Buonasera a tutti, utilizzo da diverso tempo Arduino per semplici progetti e fino ad ora non ho avuto grandi problemi, ora vorrei fare lo step successivo e andare ad utilizzare delle funzioni un po' particolari per migliorare il mio livello di programmazione. Premetto che non sono esperto quindi spero di non ricevere troppe critiche, sono qua per imparare. Detto questo vi spiego la mia idea, praticamente io utilizzo Arduino collegato tramite USB ad un raspberry pi, sul raspberry ho creato una pagina web e tramite python invio sul seriale delle lettere, a dipendenza della lettera che arriva Arduino la interpreta ed esegue delle operazioni. Questa comunicazione seriale non avviene spesso quindi mi sembra stupido continuare a controllare il seriale,rallenta il mio programma. Leggendo in internet ho visto che esistono degli interrupt, che possono essere generati esternamente tramite i pin. E possibile utilizzare gli interrupt con il seriale? Ad esempio quando arriva una lettera sul seriale attivo un'interrupt ed eseguo un'azione
Spero di essere stato chiaro, vi metto il programma che ho scritto cosi forse e più facile capire, se vedete errori o miglioramenti non esitate a dirmelo
int Switch = 3;
int Schermo = 5;
int LuceEsterna = 7;
int Trasformatore = 8;
char Dati;
int StatoSeAcceso = 0;
char DatiSi = 'U';
int DelaySistema = 500;
void setup() {
Serial.begin(9600);
//-------------------------------
pinMode(Trasformatore, OUTPUT);
digitalWrite(Trasformatore, HIGH);
//-------------------------------
pinMode(LuceEsterna, OUTPUT);
digitalWrite(LuceEsterna,HIGH);
pinMode(Switch, OUTPUT);
digitalWrite(Switch, HIGH);
pinMode(Schermo,OUTPUT);
digitalWrite(Schermo, HIGH);
}
void loop() {
if (Serial.available() > 0) {
Dati = Serial.read();
if(Dati == 'C'){
Serial.print(DatiSi);
}
if(Dati == 'S'){//Acceso
digitalWrite(Schermo, HIGH);
DatiSi = 'Q';
}
if(Dati == 'R'){//Spento
digitalWrite(Schermo, LOW);
DatiSi = 'U';
}
//Accesa----------------------------
if (Dati == 'N'){
if(digitalRead(5)==HIGH){
digitalWrite(Schermo, LOW);
StatoSeAcceso == 1;
}
//----------------------------------
digitalWrite(Trasformatore, LOW);
delay(DelaySistema);
//---------------------------------
digitalWrite(Switch, LOW);
if(StatoSeAcceso == 1){
digitalWrite(Schermo, HIGH);
StatoSeAcceso == 0;
}
}
//----------------------------------
//Spenta----------------------------
if (Dati == 'O') {//Spenta
if(digitalRead(5)==HIGH){
digitalWrite(Schermo, LOW);
}
digitalWrite(Switch, HIGH);
delay(DelaySistema);
//----------------------------------
digitalWrite(Trasformatore, HIGH);
//----------------------------------
digitalWrite(Schermo, LOW);
DatiSi = 'U';
StatoSeAcceso == 0;
}
//------------------------------------
//LuceEsterna-------------------------
if(Dati == 'A'){
digitalWrite(LuceEsterna,LOW);
delay(DelaySistema);
}
if(Dati == 'B'){
digitalWrite(LuceEsterna,HIGH);
delay(DelaySistema);
}
}
}
type or paste code here