Ho creato e testato 2 sketch separati: il primo legge tramite un sensore ir i segnali di un telecomando e li scrive su seriale, l’altro utilizza un adafruit motor shield per far muovere avanti o dietro 2 motori DC.
Ho cercato di unire i due progetti per fare andare avanti o dietro i motori alla pressione di un pulsante.
Ora, il problema è che se non elimino le due righe “motor1.setSpeed(i);” il processo si blocca mentre la stessa stringa per il motore 2 non da nessun problema.
Ho anche provato a non connettere per nulla la shield dei motori, ma il problema rimane.
Aggiungo che ci deve essere anche qualche altro problema, dato che anche senza quella stringa il motore 2 non gira (pur eseguendo il loop correttamente).
#include <AFMotor.h>
#include <IRremote.h>
// DC motor on M1, M2
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
int RECV_PIN = 14;//uscita del sensore collegato al pin 9
int led=19;
int led2=13;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(19, OUTPUT);
digitalWrite(19, HIGH);
// turn on motor 1 and 2
motor1.setSpeed(200);
motor1.run(RELEASE);
motor2.setSpeed(200);
motor2.run(RELEASE);
pinMode(led,OUTPUT);
}
int i;
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value);
if (results.value==(3476004267)){
digitalWrite(19, LOW);
delay(20);
motor1.run(FORWARD);
motor2.run(FORWARD);
//motor1.setSpeed(i);
motor2.setSpeed(i);
delay(3000);
Serial.println("si");
digitalWrite(19, HIGH);
}
if (results.value==(2998643817)){
digitalWrite(13, LOW);
delay(20);
digitalWrite(13, HIGH);
motor1.run(BACKWARD);
motor2.run(BACKWARD);
//motor1.setSpeed(i);
motor2.setSpeed(i);
delay(300);
}
irrecv.resume();
Serial.println("verifica ciclo finito");
}
}