digitalWrite does not end analogWrite

When designing a basic program to test an H bridge I built, however, when using analogWrite to control the speed of my motor, the code locks and the outputs won’t turn off. From doing some research this appears to have been a problem with the Leonardo as well. Something about the basic Arduino code not cancelling the PWM when digitalWrite is called.

~working code~

int gogo;


void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
  
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);

pinMode(A16, INPUT_PULLUP);
pinMode(A15, INPUT_PULLUP);
pinMode(A14, INPUT_PULLUP);
}





void loop() {
  

//free spinning, all MOSFET off. Clear any stray code since I don't know what I'm doing. 
digitalWrite(A3, LOW);
digitalWrite(A2, LOW);
digitalWrite(A1, LOW);
digitalWrite(A0, LOW);

gogo = analogRead(A5)/4;

Serial.print("Throttle is set to ");
Serial.print(gogo);
Serial.println(" of 255.");


  //brake
if (!digitalRead(16)){


  digitalWrite(A3, LOW);
  digitalWrite(A1, LOW);
  digitalWrite(A2, HIGH);
  digitalWrite(A0, HIGH);

}

//clockwise rotation
if (!digitalRead(14)){


  digitalWrite(A2, LOW);
  digitalWrite(A1, LOW);
  digitalWrite(A3, HIGH);
    digitalWrite(A0, HIGH);
}

//counter clockwise rotation
if (!digitalRead(15)){


  digitalWrite(A3, LOW);
  digitalWrite(A0, LOW);
  digitalWrite(A2, HIGH);
  digitalWrite(A1, HIGH);

}

  

delay(5);
}

~end working code~

~code that should work but doesn't?~

int gogo;


void setup() {
 
Serial.begin(9600);
  
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT);

pinMode(A16, INPUT_PULLUP);
pinMode(A15, INPUT_PULLUP);
pinMode(A14, INPUT_PULLUP);
}





void loop() {

digitalWrite(A3, LOW);
digitalWrite(A2, LOW);
digitalWrite(A1, LOW);
digitalWrite(A0, LOW);

gogo = analogRead(A5)/4;

Serial.print("Throttle is set to ");
Serial.print(gogo);
Serial.println(" of 255.");


  
if (!digitalRead(16)){


  digitalWrite(A3, LOW);
  digitalWrite(A1, LOW);
  digitalWrite(A2, HIGH);
  digitalWrite(A0, HIGH);

}

if (!digitalRead(14)){


  digitalWrite(A2, LOW);
  digitalWrite(A1, LOW);
  analogWrite(A3, gogo);
    analogWrite(A0, gogo);
}

if (!digitalRead(15)){


  digitalWrite(A3, LOW);
  digitalWrite(A0, LOW);
  analogWrite(A2, gogo);
  analogWrite(A1, gogo);

}

  

delay(5);
}

~end sad code~

If it is indeed my code that is just wrong, my apologies. But I do believe this has to do with the way the Artemis handles analogWrite.

Hmmm - digitalWrite does indeed not disable pwm output. This is because PWM output comes from a different peripheral. I think you need to reconfigure the pin to a normal digital output with pinMode(pin, OUTPUT); when you want it to stop being PWM

Is that something unique to the Artemis Arduino core? On my teensy as well as on other Arduinos digitalWrite will stop PWM output.

I knew this issue seemed familiar. We have considered it and decided that the best solution is to call pinMode to change back to a digital mode.

https://github.com/sparkfun/Arduino_Apollo3/issues/92

Thanks so much for the link! I agree with what was discussed there. I guess ill just have to add another line to my code