Citazione:
Originalmente inviato da CarloRoma63 Apparentemente devi realizzare un sistema che non sia solo sensibile allo stato attuale dei sensori ma anche alla loro storia, ma semplificando non ne hai bisogno: devi semplicemente spegnere il motore quando entrambi vanno a ON e riaccenderlo solo quando entrambi vanno ad OFF.
Eccoti il codice che dovrebbe fare quello che ti occorre. Non l'ho testato ma il compilatore non mi ha dato errori.
// definisco le variabili di lavoro
boo.....
}
Carlo
EDIT: No, ho sbagliato. Aspetta che faccio le correzioni |
Questo dovrebbe funzionare, in effetti dovevo tenere conto dello stato pregresso del motore ...
// definisco le variabili di lavoro
boolean Stato1;
boolean Stato2;
boolean StatoMotore;
// definisco quali sono i pin di ingresso per i due sensori
const int SW1 = 2; // sensore basso
const int SW2 = 3; // sensore alto
// definisco il pin di uscita per comandare il motore
const int PinMotore = 4;
void setup() {
// definisco in input i pin di ingresso per i due sensori
pinMode(SW1, INPUT);
pinMode(SW2, INPUT);
// definisco in output il pin di uscita per il motore
pinMode(PinMotore, OUTPUT);
// all'avvio il motore è spento
digitalWrite(PinMotore, LOW);
}
void loop() {
// Leggo lo stato dei due sensori
Stato1 = digitalRead(SW1);
Stato2 = digitalRead(SW2);
//Calcolo lo stato del motore,
// tabella della verità:
// Stato1 Stato2 StatoMotore StatoMotore Risultante
// Falso Falso Falso Vero
// Falso Falso Vero Vero
// Falso Vero Falso Condizione non prevista
// Falso Vero Vero Condizione non prevista
// Vero Falso Falso Falso
// Vero Falso Vero Vero
// Vero Vero Falso Falso
// Vero Vero Vero Falso
// semplificando con le mappe di karnaugh ottengo
StatoMotore = (!Stato1 && !Stato2) || (Stato1 && !Stato2 && StatoMotore);
if (StatoMotore){
digitalWrite(PinMotore, HIGH);
}else{
digitalWrite(PinMotore, LOW);
}
}
Carlo