Problema interruzione loop

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");
  }
}

Hai scritto male lo sketch e senza usare opportune indentazioni.

Ti consiglio di usare il comando Formattazione automatica del menu strumenti.

Controlla il listato e ti accorgerai che la variabile i non è inizializzata essendo dichiarata in area globale tra setup e loop.

Ho provato a eliminare quella riga ed assegnare al posto della i il valore 200.
ora non si blocca, ma comunque i due motori non si muovono. (la i veniva da un processo che visto che non funzionava ho provato a semplificare il piu possibile.

#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);
}


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(200); 
      motor2.setSpeed(200);
      delay(3000);
      Serial.println("avanti");
      digitalWrite(19, HIGH);
    }
    if (results.value==(2998643817)){
      digitalWrite(13, LOW);
      delay(20);
      digitalWrite(13, HIGH);
      motor1.run(BACKWARD);
      motor2.run(BACKWARD);
      motor1.setSpeed(200);  
      motor2.setSpeed(200); 
      delay(300);
    }
    irrecv.resume();
    Serial.println("verifica ciclo finito");
  }
}

comunque sia il led che sulla seriale il processo si conclude.