Salve a tutti,
sempre per il mio progetto cockpit per flight simulator vorrei chiedere delle delucidazioni sull'uso di un interruttore on/off.
Attualmente nel progetto ho i classici bottoni a rilascio.
Per esempio ho un bottone che comanda da Leonardo, con funzione Keyboard, l'accensione e lo spegnimento del motore dell'aereo.
Default motore su pista spento. Se premo il pulsante si accende tramite comando tastiera "e" e si accende il led verde per un attimo, se lo ripremo il motore si spegne e si accende il led rosso per un attimo con comando tastiera "r"
Ora, io nella costruzione del cruscotto, vorrei sostituire il pulsante con un comune interruttore on/off a due pin, negativo e positivo.
Come devo adattare il codice?. Ho provato a scrivere qualche modifica. Ma praticamente, se l'interruttore è on continua in loop a premere il tasto keyboard corrispondente e ad accendersi il led verde e così al contrario quando è off.
Cioè vorrei che seleziono uno dei due stati dell'interruttore ed esegua il comando una sola volta.
Qui vi riporto il codice, ma con l'uso del bottone...come lo riadatto per l'interruttore?.
#define Engines_OnOff 4
#define Buzzer 11
#define led_red 12
#define led_green 13
String eng_stateOn = " On";
String eng_stateOff = "Off";
int stato_engines = 0;
void setup() {
lcd.init(); //setup iniziale lcd
lcd.backlight();
pinMode(Engines_OnOff, INPUT);
pinMode(Buzzer, OUTPUT);
pinMode(led_red, OUTPUT);
pinMode(led_green, OUTPUT);
schermata_default();
}
void loop() {
pulsanteEngine();
}
void pulsanteEngine() {
int varlettura_pulsante_engine = digitalRead(Engines_OnOff);
if (varlettura_pulsante_engine == 1) {
stato_engines++;
tone(Buzzer, toneBuzzer, durBuzzer);
if (stato_engines == 1) {
Keyboard.begin();
Keyboard.press('e');
Keyboard.println(" Engine On");
digitalWrite(led_green, HIGH);
delay(200);
digitalWrite(led_green, LOW);
Keyboard.releaseAll();
lcd.setCursor(5, 1);
lcd.print(eng_stateOn);
delay(400);
} else if (stato_engines > 1) {
stato_engines = 0;
Keyboard.press('r');
Keyboard.println("Engine Off");
digitalWrite(led_red, HIGH);
delay(200);
digitalWrite(led_red, LOW);
lcd.setCursor(5, 1);
lcd.print(eng_stateOff);
delay(400);
}
}
}
void schermata_default() {
//cornice schermo
lcd.setCursor(0, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(1, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(2, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(3, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(4, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(5, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(6, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(8, 0);
//fine cornice
lcd.print("INFO");
lcd.setCursor(13, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(14, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(15, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(16, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(17, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(18, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(18, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(19, 0);
lcd.print(cornice_simbolo);
lcd.setCursor(9, 1);
lcd.print(cornice_simbolo);
lcd.setCursor(9, 2);
lcd.print(cornice_simbolo);
lcd.setCursor(9, 3);
lcd.print(cornice_simbolo);
lcd.setCursor(10, 1);
lcd.print(cornice_simbolo);
lcd.setCursor(10, 2);
lcd.print(cornice_simbolo);
lcd.setCursor(10, 3);
lcd.print(cornice_simbolo);
//fine cornice
//quadrante
lcd.setCursor(0, 1);
lcd.print("Eng ");
lcd.setCursor(5, 1);
lcd.print(eng_stateOff);
lcd.setCursor(12, 1);
lcd.print("Flap ");
lcd.setCursor(18, 1);
lcd.print(potFlapsVal / 10 % 10);
lcd.print(potFlapsVal % 10);
lcd.setCursor(0, 2);
lcd.print("Gear ");
lcd.setCursor(5, 2);
lcd.print(Landing_GearOn);
lcd.setCursor(12, 2);
lcd.print("Trim ");
lcd.setCursor(17, 2);
lcd.print(" 00");
lcd.setCursor(17, 3);
lcd.print(" 00");
lcd.setCursor(0, 3);
lcd.print("APil ");
lcd.setCursor(5, 3);
lcd.print(Autopilot_stateOff);
}