Problema con il modulo l293d

Salve, ho bisogno del vostro aiuto.
Sto realizzando un auto telecomandata con il cellulare con l' app di app inventor 2.
Sto utilizzando un Arduino mega con il modulo l293d e due sensori quello di temperatura e quello di distanza.
Lo sketch funziona ,soltanto che vorrei che per ogni misura rilevata dai due sensori, la misura viene visualizzata per 1 secondo sul monitor seriale. Ho utilizzato la funzione delay(1000); solo che mi influisce sul modulo l293d. Ovvero quando premo il pulsante dal cellulare , il segnale nel modulo l293d arriva ma quando lo rilascio, il segnale aspetta un secondo, prima che si interrompa.
Grazie.

Questo è lo sketch funzionante:

#include <AFMotor.h>
#include <DHT.h>

AF_DCMotor motor1(1); 
AF_DCMotor motor2(2); 
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

char key; 
DHT dht(18,DHT11);
int TRIG_PIN= 21;
int ECHO_PIN=20; 
int led_rosso=22;
int led_verde=24;


void setup() 
{    
Serial.begin(9600);  //impostare la velocità del baud per il modulo Bluetooth 
dht.begin();
pinMode(18,OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(led_rosso,OUTPUT);
pinMode(led_verde,OUTPUT);
}

void loop(){
 digitalWrite(TRIG_PIN, HIGH); //imposto il pin del trig a livello alto
  delayMicroseconds(10); //aspetta 10 us
  digitalWrite(TRIG_PIN, LOW);// imposto il pin del trig a livello basso 
    unsigned long tempo = pulseIn(ECHO_PIN, HIGH); 
    float distanza = 0.03438 * tempo / 2; //formula della distanza
    Serial.print( "DISTANZA:"+ String(distanza)+"cm");
    int t=dht.readTemperature(); // misurare la temperatura
 Serial.print("  temperatura:" + String(t)+ "°C"); //visualizza temperatura sul Monitor seriale
 if (t>34){
  digitalWrite(led_rosso,HIGH);
   digitalWrite(led_verde,LOW);
 }else {
 digitalWrite(led_verde,HIGH); 
 digitalWrite(led_rosso,LOW);
 }


if(Serial.available() > 0){

    key = Serial.read(); 
      switch(key){
    case 'A':  
      avanti();
      break;
    
    case 'B': 
    indietro();
      break;
    
    case 'C':  
      sinistra();
      break;
  
          case 'D':
     destra();
      break;
      
      case '0':
      fermo();
     break;
 } 
 }
 }
  
  
void  avanti()
{
  motor1.setSpeed(255); //velocità del motore
  motor1.run(FORWARD); //rotazione motore senso orario
 motor2.setSpeed(255);//velocità del motore
  motor2.run(FORWARD); //rotazione motore senso orario
 motor3.setSpeed(255); //velocità del motore
  motor3.run(FORWARD);  //rotazione motore senso orario
  motor4.setSpeed(255);//velocità del motore
  motor4.run(FORWARD); //rotazione motore senso orario
}

void indietro()
{

  motor1.setSpeed(255); //velocità del motore
  motor1.run(BACKWARD); //rotazione motore senso antiorario
  motor2.setSpeed(255); //velocità del motore
  motor2.run(BACKWARD); //rotazione motore senso antiorario
   motor3.setSpeed(255); //velocità del motore
  motor3.run(BACKWARD); //rotazione motore senso antiorario
  motor4.setSpeed(255);//velocità del motore
  motor4.run(BACKWARD); //rotazione motore senso antiorario
}
void sinistra()
{
  motor1.setSpeed(255); //velocità del motore
  motor1.run(BACKWARD); //rotazione motore senso antiorario
  motor2.setSpeed(255); //velocità del motore
  motor2.run(FORWARD); //rotazione motore senso orario
   motor3.setSpeed(255); //velocità del motore
  motor3.run(FORWARD); //rotazione motore senso orario
  motor4.setSpeed(255);//velocità del motore
  motor4.run(BACKWARD); //rotazione motore senso antiorario
}
void destra()
{
  motor1.setSpeed(255); //velocità del motore
  motor1.run(FORWARD); //rotazione motore senso orario
  motor2.setSpeed(255); //velocità del motore
  motor2.run(BACKWARD); //rotazione motore senso antiorario
   motor3.setSpeed(255); //velocità del motore
  motor3.run(BACKWARD); //rotazione motore senso antiorario
  motor4.setSpeed(255);//velocità del motore
  motor4.run(FORWARD); //rotazione motore senso orario
}
void fermo()
{
  motor1.setSpeed(0); //velocità del motore
  motor1.run(RELEASE); //ferma il motore quando si rilascia il pulsante
  motor2.setSpeed(0);//velocità del motore
  motor2.run(RELEASE); //ferma il motore quando si rilascia il pulsante
  motor3.setSpeed(0); //velocità del motore
  motor3.run(RELEASE); //ferma il motore quando si rilascia il pulsante
  motor4.setSpeed(0); //velocità del motore
  motor4.run(RELEASE); //ferma il motore quando si rilascia il pulsante
  }

risposta breve :
delay() interrompe l'esecuzione del programma
quindi il programma correttamente si ferma, e tu per un secondo puoi schiacciare quanto vuoi, ma non succede una cippa

non è il modulo L293D che non risponde, è che tu stesso hai mandato in ferie il programma

devi cambiare il modo di funzionamento, devi usare millis() invece che delay()

risposta lunga:
ti tocca di riscrivere il programma: i programmi che usano millis() sono "strutturalmente" differenti da quelli che usano delay()

... risposta ancora più lunga :smiley: : devi studiarti come si usa la funzione millis(), prima QUI, poi QUI e QUI e QUI e tutti gli articoli che sono in QUESTA pagina ... vedrai che poi ti sarà tutto più chiaro.

Guglielmo

Grazie a tutti, ho fatto come mi avete detto voi e adesso funziona.