I am designing a fire fighting robot and am using L298n motor driver for the motors.When sending Pwm signal to the driver for speed control only Pwm on pin 11 goes. The Pwm output on pin 10 doesn't work.
```cpp
#include <Servo.h>
#include <Wire.h>
#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx;
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
int flame_sensor = 8;
int flame = 0;
int motor1pin1 = 2;
int motor1pin2 = 3;
int motor2pin1 = 4;
int motor2pin2 = 5;
float d1 = 3.8;
double temp = 0;
float fire_temp = 35.5;
int motorspeed = 100;
int motor1speedpin = 11;
int motor2speedpin = 10;
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
myservo.write(90);
pinMode(motor1pin1, OUTPUT);
pinMode(motor1pin2, OUTPUT);
pinMode(motor2pin1, OUTPUT);
pinMode(motor2pin2, OUTPUT);
pinMode(motor1speedpin, OUTPUT);
pinMode(motor2speedpin, OUTPUT);
pinMode(flame_sensor, INPUT);
mlx.begin();
}
void scan() {
while(true){
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
if(Serial.available()>0){ // read value from serial monitor
flame = Serial.readString().toInt();
}
if (digitalRead(flame_sensor)==0||flame==1){
if (pos<90){
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, HIGH);
delay(d1*(90-pos));
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, LOW);
myservo.write(90);
break;
} else if(pos>90)
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, HIGH);
digitalWrite(motor2pin1, HIGH);
digitalWrite(motor2pin2, LOW);
delay(d1*(pos-90));
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, LOW);
myservo.write(90);
break;
}
}
if(pos != 181){
break;
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
if(Serial.available()>0){ // read value from serial monitor
flame = Serial.readString().toInt();
}
if (digitalRead(flame_sensor)==0||flame==1){
if (pos<90){
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, HIGH);
delay(d1*(90-pos));
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, LOW);
myservo.write(90);
break;
} else if(pos>90){
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, HIGH);
digitalWrite(motor2pin1, HIGH);
digitalWrite(motor2pin2, LOW);
delay(d1*(pos-90));
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, LOW);
myservo.write(90);
break;
}
}
}
if(pos != -1){
break;
}
}
}
void loop(){
scan();
while(true){
temp = mlx.readObjectTempC();
Serial.println(mlx.readObjectTempC());
if (temp > fire_temp) {
digitalWrite(motor1pin1, LOW);
digitalWrite(motor1pin2, LOW);
digitalWrite(motor2pin1, LOW);
digitalWrite(motor2pin2, LOW);
break;
} else {
analogWrite(motor1speedpin, motorspeed);
analogWrite(motor2speedpin, motorspeed);
digitalWrite(motor1pin1, HIGH);
digitalWrite(motor1pin2, LOW);
analogWrite(motor2speedpin, motorspeed);
digitalWrite(motor2pin1, HIGH);
digitalWrite(motor2pin2, LOW);
}
}
}
