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