Go Down

Topic: Come si usa la libreria 74HC595 (Read 2696 times) previous topic - next topic

Patrick_M

attento!

se non l'hai fatto abilita i numeri di riga nelle impostazioni dell'IDE così parliamo la stessa lingua!

nello sketch con hc595
nel setup
alla riga 74 
accendi il led rosso e il led giallo
poi chiami la funz. all_ins()
che alla riga 202 spegne il led rosso
quindi all'inizio del loop il led rosso è spento
alla riga 83 chiami di nuovo la funz all_ins()
e il led rosso viene spento
poi dopo le varie menate sulle card
entri nello switch e se  stato=1
accendi il led giallo e poi lo spegni (il led rosso continua ad essere spento)
e se count=1
   alla riga 140 spegni il led rosso
altrimenti
   accendi e spegni il led blu

quindi secondo me a parte un breve lampeggio nel setup il led rosso non lo accendi mai
(poteva esserci una occasione  se stato=2 ma hai commentato le righe del led...)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

usul5761

attento!

se non l'hai fatto abilita i numeri di riga nelle impostazioni dell'IDE così parliamo la stessa lingua!

nello sketch con hc595
nel setup
alla riga 74 
accendi il led rosso e il led giallo
poi chiami la funz. all_ins()
che alla riga 202 spegne il led rosso
quindi all'inizio del loop il led rosso è spento

si è vero, ma se accendo il rosso e il giallo alla riga 74 e poi chiamo la - all_ins() che spegne il led rosso, perchè si spegne il giallo? chi gli dice di spegnersi?

grazie

Patrick_M

si è vero, ma se accendo il rosso e il giallo alla riga 74 e poi chiamo la - all_ins() che spegne il led rosso, perchè si spegne il giallo? chi gli dice di spegnersi?

grazie
se stato =1
il led giallo che era gia acceso quando passi dalla riga 127, si spegne alla riga 130
se stato=0 non si spegne

almeno mi pare così :)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

usul5761

#33
Apr 26, 2018, 10:10 pm Last Edit: Apr 26, 2018, 10:23 pm by usul5761
spetta spetta...
nel momento che inizializzo il rosso e il giallo a  HIGH alla 74  e poi va giù alla 201 e spegne il rosso.....è in quel momento che spegne anche il giallo,
Perchè se noti la riga 74 è nel void setup.
A meno che io sbagli qualcosa, quando ha fatto " all_ins() poi si ferma in attesa della carta rfid

allego lo sketch con i commenti

grazie

Patrick_M

sei sicuro che sia alla riga 74 che fa tutto? ti rammento che il ciclo avanza alla velocità di circa 16.000.000 istruzioni al secondo

per toglierti ogni dubbio scrivi un comando di stampa prima e dopo lo spegnimento del led rosso alla linea 207 così vedi che succede, in questo modo
Code: [Select]


Serial.Print(statoLed,BIN);
 My595.Send595Pin(statoLed ^ ledRosso, 1);
Serial.Println(statoLed,BIN);


quesa è la stampa in bimario della variabile statoLed, gli zeri iniziali sono omessi per cui se ti scrive
10001 vuol dire led giallo e led rosso acceso
1          vuol dire led rosso acceso
10000  vuol dire led giallo acceso
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

usul5761

mi dice sempre sia prima che dopo  00

Patrick_M

quindi il led giallo a quel punto li è gia spento :)
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

Patrick_M

ora prova a ripetere la stessa cosa anche prima e dopo la riga 74...
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

usul5761


Patrick_M

allora non ti si è mai acceso nemmeno il led rosso...
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

usul5761

#40
Apr 26, 2018, 11:31 pm Last Edit: Apr 26, 2018, 11:35 pm by usul5761
mi sono accorto anche di un'altra cosa,
1) allarme inserito ( led rosso acceso)
2) faccio leggere la carta ( si spegne il rosso, si accende e poi si spegne il giallo, riaccende il rosso spegne l'allarme e poi spegne il rosso)


quello che non capisco è come mai non resti in memoria lo stato dei led mentre ne accende o spegne altri.

Scusa se mi ripeto, ma con la semplice digitalWrite(pin,stato), se dico a un pin di mettersi a HIGH, qualsiasi cosa succeda finchè non gli dico di andare a LOW lui resta a HIGH.

cosa che vorrei capire di come fare anche con un 74hc595....

 :smiley-confuse:  :smiley-confuse:  :smiley-confuse:


dunque...appena compilo il programma lui accende sia il led rosso che quello giallo.
poi va a all_ins() e spegne solo il giallo, lasciando il rosso acceso

Patrick_M

allora forse ci sono :) senza forse è così

cambia così
Code: [Select]

statoLed= statoLed | ledRosso | ledGiallo;
My595.Send595Pin(statoLed, 1);

in tutti i posti dove c'è la send595pin aggiungi la riga statoLed=statoLed or o xor led da accendere/spegnere

altrimenti la variabile statoLed non viene mai modificata e rimane sempre =0, così al contrario varia con i valori
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

usul5761

Sei un grandeeeee.......fungeeeee
grazie grazie.

Adesso però ti do un'altro problemino da cui non esco.
Code: [Select]
sensorValue = analogRead(sensor); // imposta il sensore                  //se il sensore di luminosità dice che c'è buio e
      if (sensorValue < 100 && count == 0)                                     // l'allarme è disinserito
      { My595.Send595Pin(statoLed | ledBianco, 1);delay(2000); //led Bianco ON  // accendo il led bianco.....

ovvero, al primo passaggio di una tessera se c'è poca luce all'esterno  lui mi accende il led bianco, ma ad un ulteriore passaggio di un'altra tessera, se il sensore legge tanta luce all'esterno il led bianco si spegne.

questo l'ho fatto perchè se sono il primo che arriva e ho poca luce all'esterno, oltre che spegnere l'allarme e aprire la porta mi accende una luce neon all'interno.
Solo che vorrei che se il primo ha acceso la luce interna perchè c'era poca luce all'esterno, anche se i prossimi hanno tanta luce all'esterno lascino il neon acceso.


lo so lo so ......sono un pò matto, ma ho dei motivi per dover effettuare questa procedura.


comunque grazie del tuo tempo e della tua disponibilità
se mi dai una dritta te ne sarei grato a vita :)  :)  :)

Patrick_M

ti crei una nuova variabile  di tipo bool che dichiarerai come verae diventa vera dopo aver acceso la luce bianca e per accenderla fai il controllo se la var. è vera o falsa
Ovviamente da qualche altra parte del programma dovrai ad un certo punto della giornata riportarla alla condizione true per il giorno successivo
Oppure accendi la luce bianca a tempo, il giusto che serve all'entrata e poi la spegni


Code: [Select]

// dichiaraz assieme alle altre variabili
bool primoAccesso= true;
...
...
...
sensorValue = analogRead(sensor); // imposta il sensore        //se il sensore di luminosità dice che c'è buio e
      if (sensorValue < 100 && count == 0)  {                          // l'allarme è disinserito
         if (primoAccesso)  {

              statoLed=statoLed | ledBianco;                //questa istruz devi metterla dappertutto!!!!!
              My595.Send595Pin(statoLed , 1);            // accendo il led bianco.....
              delay(2000);                                           // tempo suff per entrare

              statoLed=statoLed ^ ledBianco;   
              My595.Send595Pin(statoLed , 1);            // spengo led bianco
              primoAccesso = false;                             //metto a falso primoAccesso
          }                                                               
      }
per inserire (lo sketch) il programma, dall'IDE clicca modifica, clicca copia per il forum poi vieni qui e incolla nel tuo post (ctrl+v) ;)

usul5761

Grazie Patrick_m sei davvero bravo e disponibile.
Giusto per imparare un po di più, secondo te, c'è un altro modo per memorizzare il codice delle varie carte rfid e poi abbinarle ai nomi?

grazie ancora

Go Up