Pages: [1]   Go Down
Author Topic: Status led?  (Read 687 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve, mi scuso per l'assenza e per non aver potuto ringraziare nello scorso thread. Però purtroppo il tempo è sempre poco e non riesco quasi mai a lavorare con Arduino e quindi non incontro spesso problemi.

Sono qua per chiedervi una mano

Code:
const byte led = 13;   
const byte puls = 2;
char val;
byte statusled = LOW;

void setup()
{
  pinMode(led, OUTPUT);   
  pinMode(puls, INPUT);
  Serial.begin(9600);
}


void loop(){
  const byte button = digitalRead(puls);
  delay(10); // debounce

  if (button == HIGH) statusled = HIGH;
 
  if (button == LOW) statusled = LOW;
 

  if( Serial.available() )     
  {
    val = Serial.read();         
  }

  if( val == 'G' ) statusled = HIGH;

  digitalWrite(led, statusled);
 
 if( val == 'E' ) statusled = LOW;
    digitalWrite(led, statusled);
}

Ringrazio gli utenti che mi hanno dato una mano prima.. Ma ora vorrei che il led si accendesse e rimanesse acceso anche se io non tengo premuto il pulsante e poi spegnerlo per spegnerlo vorrei ripremere il pulsante.

Capite cosa intendo? Capisco che mi sono spiegato un po' male cercherò di farlo meglio:

Premo una volta = Led (HIGH)

Premo seconda volta = Led (LOW)
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao, il codice che hai postato ha qualche problema, il debounce non è un debounce perchè leggi e aspetti senza effetturare la lettura di controllo, ti consiglio di usare la libreria bounce (c'è un esempio nell'ide se non ricordo male e comunque lo trovi sul sito se non dovesse esserci nell'ide).
Poi le verifiche della variabile val le sposterei all'interno dell'if Serial.available() e lascerei alla fine una sola digitalwrite.
Ah anche l'indentazione usata è abbastanza fuorviante sembra fatta apposta per indurre in errore chi legge il codice  smiley-roll-sweat l'ultima digitalwrite sembra essere all'interno dell if ma in realtà non lo è e si capisce dall'assenza di parentesi graffe, con codice semplice non è un problema ma se il codice si complica alle volte si diventa matti

Ciao
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ti ringrazio per la risposta! Proverò ad aggiustarlo e farti sapere!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ragazzi sto provando di tutto ma non riesco a far tenere in "memoria" lo stato al led. Help
Logged

Offline Offline
God Member
*****
Karma: 10
Posts: 578
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lasciando perdere al momento la parte del serial (ed il fatto che dopo le condizioni degli IF le istruzioni da eseguire se la condizione è true andrebbero messe fra {} ogni istruzione su una riga col suo bel ; in modo che il codice sia corretto ed anche leggibile da altri... ed anche il debounching) togli il secondo if (quello che ti porta lo statusled a LOW se il pulsante è LOW)... altrimenti appena lasci il pulsante lo status si porta a LOW ed il led si spegne.

Metti un solo IF che se il pulsante è premuto (presumo sia connesso in modo da dare HIGH quando lo premi) ti inverte lo stato del led e poi va a fare il digitalwrite sulla porta del led. Tutto qui. Quando lo premi, se lo stato è on passerà ad off e se è off passerà ad on.

Logged

0
Offline Offline
Faraday Member
**
Karma: 31
Posts: 2908
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

La gente è in grado di fare cose complesse, come guidare una vettura su un percorso di montagno e poi si perde nelle cose semplici.

Analizza il problema, analizza come lo affronti tu, immedesimati nella stupidità del microcontroller e cerca una soluzione a questa.

Mi passi la bottiglia.

Sequenza:
Bottiglia? identificabile dalla forma, identificabile dal contesto.
contesto è == cena, pranzo o simili, si tratta di bottiglia di una bevanda, bevanda ancora da identificare.
Controllo presenza bottiglia: esiste solo una bottiglia nelle mie immediate vicinanze,
     scartare tutti gli altri controlli
     eseguire l'azione.
Controllo presenza bottiglia: ci sono due bottiglie, una di acido muriatico e una di aranciata
     individuazione bottiglia da conteso: contesto cena,pranzo o simili, bottiglia = bottiglia di aranciata.
     eseguire azione

Si tratta di tantissime condizioni if nidificate che eseguiamo in modo inconsapevole, esempio
a tavola un bambino ci chiede; mi passa la bottiglia? a tavola ci sono bottiglie di vino, acqua, birra, e aranciata.
noi scartiamo subito che la bottiglia di vino e di birra e chiediamo; acqua o aranciata, ma se vicino a noi abbiamo solo la bottiglia di acqua, non è necessario chiedere.

La nostra mente esegue dei cicli da cui si può decidere di uscire, e noi possiamo anche sospendere qualche ciclo per iniziarne o continuarne uno lasciato in sospeso. Eseguiamo in modo non cosciente una quantità straordinaria di if con alta velocità

Noi abbiamo anche tanti timer a cui connettiamo delle routine di interrupt, ma alla volte la routine di interrupt o il timer fallisce e ci dimentichiamo il figlio a scuola. Si vede che gli altri timer con relativi interrupt era stati scelti con priorità più elevata e questo non è buono
nostro figlio richiede la massima priorità.

Ora non prendete tutto alla lettere e non comportatevi come automi pensando che possa essere un modo infallibile, cioè non fate spack di star trek.  smiley-razz

Ciao.
Logged

AvrDudeQui front end per avrdude https://gitorious.org/avrdudequi/pages/Home

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21936
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao, il codice che hai postato ha qualche problema, il debounce non è un debounce perchè leggi e aspetti senza effetturare la lettura di controllo, ti consiglio di usare la libreria bounce (c'è un esempio nell'ide se non ricordo male e comunque lo trovi sul sito se non dovesse esserci nell'ide).
@ fabpolli  un ritardo dopo una lettura di un pulsante funziona benissimo come debounce. Eviti di leggere un LOW dopo un HIGH dato dal saltellare dei contatti prima che si sono fermati.

@ Holla
pensavi a qualcosa come questo?
http://www.arduino.cc/en/Tutorial/Switch

 Ciao Uwe
« Last Edit: May 21, 2013, 06:26:59 pm by uwefed » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La gente è in grado di fare cose complesse, come guidare una vettura su un percorso di montagno e poi si perde nelle cose semplici.

Analizza il problema, analizza come lo affronti tu, immedesimati nella stupidità del microcontroller e cerca una soluzione a questa.

Mi passi la bottiglia.

Sequenza:
Bottiglia? identificabile dalla forma, identificabile dal contesto.
contesto è == cena, pranzo o simili, si tratta di bottiglia di una bevanda, bevanda ancora da identificare.
Controllo presenza bottiglia: esiste solo una bottiglia nelle mie immediate vicinanze,
     scartare tutti gli altri controlli
     eseguire l'azione.
Controllo presenza bottiglia: ci sono due bottiglie, una di acido muriatico e una di aranciata
     individuazione bottiglia da conteso: contesto cena,pranzo o simili, bottiglia = bottiglia di aranciata.
     eseguire azione

Si tratta di tantissime condizioni if nidificate che eseguiamo in modo inconsapevole, esempio
a tavola un bambino ci chiede; mi passa la bottiglia? a tavola ci sono bottiglie di vino, acqua, birra, e aranciata.
noi scartiamo subito che la bottiglia di vino e di birra e chiediamo; acqua o aranciata, ma se vicino a noi abbiamo solo la bottiglia di acqua, non è necessario chiedere.

La nostra mente esegue dei cicli da cui si può decidere di uscire, e noi possiamo anche sospendere qualche ciclo per iniziarne o continuarne uno lasciato in sospeso. Eseguiamo in modo non cosciente una quantità straordinaria di if con alta velocità

Noi abbiamo anche tanti timer a cui connettiamo delle routine di interrupt, ma alla volte la routine di interrupt o il timer fallisce e ci dimentichiamo il figlio a scuola. Si vede che gli altri timer con relativi interrupt era stati scelti con priorità più elevata e questo non è buono
nostro figlio richiede la massima priorità.

Ora non prendete tutto alla lettere e non comportatevi come automi pensando che possa essere un modo infallibile, cioè non fate spack di star trek.  smiley-razz

Ciao.

WoooW! E' fantastica la tua spiegazione non avevo mai pensato così durante la programmazione! Grazie infinite Mauro sono certo che mi tornerà utile!

Quote
pensavi a qualcosa come questo?
http://www.arduino.cc/en/Tutorial/Switch

Si avevo in mente proprio questo però aggiungendo il controllo da device android!
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 160
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ fabpolli  un ritardo dopo una lettura di un pulsante funziona benissimo come debounce. Eviti di leggere un LOW dopo un HIGH dato dal saltellare dei contatti prima che si sono fermati.

Ciao Uwe

Ciao Uwe,
  ovviamente quello che dici è corretto, ma dopo la pausa non dovrebbe essere riletto lo stato e confrontato con quello letto prima della pausa per verificare che siano uguali e non si è trattato di un rimbalzo?

Ciao
Logged

Pages: [1]   Go Up
Jump to: