Citazione:
Originalmente inviato da pavmail Salve a tutti.
Mi servirebbe gentilmente una dritta su come realizzare un programmino che mi permetta di fare una cosa abbastanza banale, ma visto che per me è la prima volta che prendo in mano questa scheda e il suo software....... non ne vengo fuori.
In pratica devo applicare 2 finecorsa ad un motore che funzionano con questa logica:
SW1=OFF SW2=OFF -> Motore acceso
SW1=ON SW2=OFF -> Motore acceso
SW1=ON SW2=ON -> Motore fermo
A questo punto il motore deve ripartire quando entrambi ritornano in OFF.
Allego anche l'immagine esplicativa: in pratica devo riempire un tubo fino ad un certo livello, fermare il motore e fare in modo che riparta quando il tubo si svuota.
Grazie per l'attenzione.  |
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
boolean Stato1;
boolean Stato2;
boolean Stato;
// definisco quali sono i pin di ingresso per i due sensori
const int SW1 = 2;
const int SW2 = 3;
// 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, implementando uno XOR ESCLUSIVO
// tabella della verità:
// Stato1 Stato2 Stato
// Vero Vero Vero
// Vero Falso Falso
// Falso Vero Falso
// Falso Falso Vero
Stato = (Stato1 && Stato2) || (!Stato1 && !Stato2);
if (Stato){
digitalWrite(PinMotore, HIGH);
}else{
digitalWrite(PinMotore, LOW);
}
}
Carlo
EDIT: No, ho sbagliato. Aspetta che faccio le correzioni