gestione L293D

Ciao a tutti vorrei gestire un motore DC in entrambi i sensi di rotazione con 2 pulsanti uno che azioni il motore in senso orario e alla successiva pressione si blocchi e l'altro che alla prima pressione giri in senso antiorario e dopo si blocchi, sono riuscito a gestire le 2 direzioni con un pulsante solo ma non riesco a fermarlo, come devo fare??

Questo è il codice:

#define BUTTON 2  


int motor1Pin1 = 3;    
int motor1Pin2 = 4;   
int enablePin = 9;    
int val = 0;  
int old_val = 0;
int state = 0;

void setup() {
  
  
  
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enablePin, OUTPUT);
  
  digitalWrite(enablePin, HIGH);
  pinMode(BUTTON, INPUT);
}
void loop() {
  val = digitalRead(BUTTON); 
  if ((val == HIGH)&& (old_val ==LOW)) {
    state = 1 - state;
    delay (10);
  }
  
  old_val = val;
  
  if (state == 1) {
    digitalWrite(motor1Pin1, LOW);   
    digitalWrite(motor1Pin2, HIGH);  
  }

  else {
    digitalWrite(motor1Pin1, HIGH);  
    digitalWrite(motor1Pin2, LOW);   
  }
}

Grazie, Salvo

devi dare 3 stati alla variabile
dx, sx e stop.

Stop puoi implementare che devi Schiacciare il pulsante per lungo tempo ( per esempio 1 secondo)
Ciao UWe

si ma per il secondo pulsante inserisco un altro if??

Ho provato ad aggiungere un altro if per il secondo pulsante, ora l'idea è quella che volevo io solo che il motore non parte a girare fa uno scatto e si ferma perchè???

#define LEFT 2  //il pin del punsante
#define RIGHT 7


int motor1Pin1 = 3;    // pin 2 on L293D
int motor1Pin2 = 4;    // pin 7 on L293D
int enablePin = 9;    // pin 1 on L293D
int val = 0;  //si usa val per conservare lo stato
int old_val = 0;
int state = 0;

int valR = 0;  //si usa val per conservare lo stato
int old_valR = 0;
int stateR = 0;

void setup() {
  // set the switch as an input:
  
  // set all the other pins you're using as outputs:
  pinMode(motor1Pin1, OUTPUT);
  pinMode(motor1Pin2, OUTPUT);
  pinMode(enablePin, OUTPUT);
  // set enablePin high so that motor can turn on:
  pinMode(RIGHT, INPUT);
  pinMode(LEFT, INPUT);
}
void loop() {
  val = digitalRead(LEFT); //legge il valore dell'input e lo conserva
  if ((val == HIGH)&& (old_val ==LOW)) {
    state = 1 - state;
    delay (10);
  }
  
  old_val = val;
  
  if (state == 1) {
    digitalWrite(motor1Pin1, LOW);   // set pin 2 on L293D low
    digitalWrite(motor1Pin2, HIGH);  // set pin 7 on L293D high
    digitalWrite(enablePin, HIGH);
  }

  else {
    digitalWrite(motor1Pin1, HIGH);  // set pin 2 on L293D high
    digitalWrite(motor1Pin2, LOW);   // set pin 7 on L293D low
    digitalWrite(enablePin, LOW);
  }
  
   valR = digitalRead(RIGHT); //legge il valore dell'input e lo conserva
  if ((valR == HIGH)&& (old_valR ==LOW)) {
    stateR = 1 - stateR;
    delay (10);
  }
  
  old_valR = valR;
  
  if (stateR == 1) {
    digitalWrite(motor1Pin1, HIGH);   // set pin 2 on L293D low
    digitalWrite(motor1Pin2, LOW);  // set pin 7 on L293D high
    digitalWrite(enablePin, HIGH);
  }

  else {
    digitalWrite(motor1Pin1, HIGH);  // set pin 2 on L293D high
    digitalWrite(motor1Pin2, LOW);   // set pin 7 on L293D low
    digitalWrite(enablePin, LOW);
  }
}

penso che il prob sia il comando "delay" perchè ho fatto delle prove aumentando il valore e pare che il motore gira per il tempo che imposto nel valore delay ma io vorrei che girasse fino a quando non ri-premo il pulsante, come lo devo modificare??

ma nessuno sa come posso risolvere il problema???? =( =( =( =(

Prova a guardarti gli esempi che alla pressione accendono e ad unn altra pressione di un bottone accendono e spengono il led e poi modifichi il codice :wink:

ma non riesco a trovare nulla con 2 pulsanti