Wiki Info
Vuoi reagire a questo messaggio? Crea un account in pochi click o accedi per continuare.
Ricerca Avanzata
Answers
Se necessiti di aiuto, clicca il pulsante "Cerco Aiuto" (disponibile anche per i non iscritti).
Ultimi argomenti attivi
» Comunicazione termine servizio Arduino BT Control
Da Admin Mar Mag 10, 2022 12:55 pm

» Robot aspirapolvere per Alexa: Dreame D9
Da Admin Mar Feb 09, 2021 9:42 am

» Come costruire un robot smart con Arduino
Da Admin Mar Nov 17, 2020 12:15 pm

» TOPPS Trading Cards Match Attax Champsion League/Europa League 2020/21
Da Admin Mar Nov 10, 2020 3:21 pm

» Guida per utilizzare Arduino BT Control v1.2
Da Admin Gio Lug 09, 2020 12:01 pm

» Recensione Umidigi A3 Pro - Smartphone sotto i 100€
Da Admin Gio Apr 04, 2019 12:22 pm

» [Arduino] aiuto programma
Da Glak Mar Mar 12, 2019 9:30 am

» ERRORE NELLA COMPILAZIONE NEXTION
Da papat Mar Feb 26, 2019 7:11 am

» Comandare la Smart TV con Alexa senza broadlink (gratis)
Da Admin Mar Feb 19, 2019 4:31 pm

I postatori più attivi del mese
Nessun utente


Semaforo con millis aut./man.

2 partecipanti

Andare in basso

Semaforo con millis aut./man. Empty Semaforo con millis aut./man.

Messaggio Da Guido Laferrari Gio Giu 23, 2016 5:47 pm

Ciao a tutti,
dopo aver capito più o meno la funzione millis ho provato realizzare uno sketch con questa funzione. Si tratta di gestire un comune semaforo stradale. Avrei due domande da sottoporti: per primo vorrei sapere se il codice è stato scritto nella maniera corretta, per secondo vorrei inserire un pulsante con il quale premendolo una prima  volta attivo il lampeggio del semaforo,premendolo una seconda volta resetto il lampeggio e così via. Ho provato ad inserirlo prima e dopo la funzione  millis ma non funziona,come e dove lo devo inserire? Se è possibile non scrivermi il codice, ma dimmi solo la logica. Ti ringrazio in anticipo

Guido

Codice:

int semaforo_rosso = 2;                    // led rosso  collegato al pin digitale  2
int semaforo_verde = 3;                    // led verde collegato al pin digitale   3
int semaforo_giallo = 4;                   // led giallo  collegato al pin digitale 4
int puls            = 5;
int val             = 0;
int stato           = 0;
int interval       = 5000;                 // intervallo di tempo per lampeggio semaforo
int contatore      = 0;                    // conta la sequenza del semaforo
long previousMillis = 0;                   // memorizza l'ultima volta l'intervallo è stato aggiornato 

void setup() {
 pinMode(semaforo_rosso,OUTPUT);           // imposta pin 2 come outpu
 pinMode(semaforo_verde,OUTPUT);           // imposta pin 3 come outpu
 pinMode(semaforo_giallo,OUTPUT);          // imposta pin 4 come outpu
 pinMode(puls,INPUT);
}

void loop() {
 val=digitalRead(puls);
 if(val==1){
  stato = 1 - stato;
  delay(30);
 }


 if (millis() - previousMillis > interval)  {
    previousMillis = millis ();   
    contatore++;
 }
 switch ( contatore ){

case 1 :
 digitalWrite(semaforo_rosso,LOW);  
 digitalWrite(semaforo_verde,HIGH);
 break;
 case 2 :  
 digitalWrite(semaforo_giallo,HIGH);
 break;
}
 if (contatore > 2 ){
 digitalWrite(semaforo_rosso,HIGH);
 digitalWrite(semaforo_verde,LOW);
 digitalWrite(semaforo_giallo,LOW);
 contatore=0;
 }
 }





Guido Laferrari
Guido Laferrari
Livello due
Livello due

Messaggi Messaggi : 34
Crediti Crediti : 54
Reputazione Reputazione : 2
Data d'iscrizione Data d'iscrizione : 30.04.16

Torna in alto Andare in basso

Semaforo con millis aut./man. Empty Re: Semaforo con millis aut./man.

Messaggio Da Admin Gio Giu 23, 2016 6:38 pm

Ciao Guido, prima di tutto complimenti... Hai fatto passi da gigante dalla prima volta! Very Happy

Il codice è strutturato molto bene ed è leggibile Wink. Per quanto riguarda la tua seconda richiesta, se ho capito bene vuoi che con un pulsante se clicchi si disattiva e lampeggia e se riclicchi riparte a fare il suo mestiere.

Una cosa del genere l'ho fatta anch'io ma non con il millis ma bensì con il delay (il mio è poco ottimale mentre con il millis è meglio, quindi molto bravo per la scelta!! Wink). In pratica dovrai aggiungere nel codice il tuo pulsante e due variabili: Una che legge se il pulsante è premuto (quindi leggera 0 o 1) e una che ricorda lo stato del pulsante (nel primo stato i semafori lampeggiano mentre nel secondo i semafori funzionano correttamente). Per fare ciò dovrai prima di tutto leggere il pulsante e con un if cambiare la variabile stato. Continuando con il codice, dovrai fare due if nella quale nel primo if i semafori lampeggiando mentre nel secondo if il semaforo fa il suo lavoro. A grandi linee, in questo modo dovresti riuscire nel tuo progetto Very Happy.

Fammi sapere Ciao!
Admin
Admin
♔ Amministratore

Messaggi Messaggi : 4370
Crediti Crediti : 12173
Reputazione Reputazione : 187
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 25

https://wikiinfo.forumattivo.it

Torna in alto Andare in basso

Semaforo con millis aut./man. Empty Semaforo con millis aut./man.

Messaggio Da Guido Laferrari Mer Giu 29, 2016 6:08 pm

Ciao ,
sono riuscito a terminare il mio primo sketch da solo,ho portato alcune modifiche e grazie alle quali sono riuscito a realizzarlo come mi ero prefissato. In sostanza si tratta di questo: con il selettore aut./man. svolgo due funzioni ,quando è posizionato in manuale lampeggia solo il semaforo giallo,quando si passa in automatico parte la sequenza di un comune semaforo stradale . Ti sottopongo il codice così mi potrai dare un tuo giudizio. Ti ringrazio in anticipo.  
Guido 

Codice:
int semaforo_rosso  = 2;                  // led rosso  collegato al pin digitale  2
int semaforo_verde  = 3;                  // led verde collegato al pin digitale  3
int semaforo_giallo = 4;                  // led giallo  collegato al pin digitale 4
int selett          = 5;                  // selettore aut./manu.collegato al pin digitale 5
int val            = 0;                  // variabile dove memorizzare aut./man.
int contatore      = 0;                  // conta la sequenza del semaforo
int giallo_stato    = 0;                  // variabile per lampeggio in manuale
const long interval1          = 500;      // intervallo di tempo per lampeggio semaforo giallo in manuale
unsigned long previousMillis1 = 0;        // memorizza l'ultima volta che l'intervallo è stato aggiornato
const long interval          = 5000;      // intervallo di tempo per lampeggio semaforo in automatico
unsigned long previousMillis  = 0;        // memorizza l'ultima volta che l'intervallo è stato aggiornato
unsigned long time = 0;                    // variabile dove copio valore millis
                 
// usare " unsigned long " per le variabili che tengono il tempo
                                         
void setup() {
 pinMode(semaforo_rosso,OUTPUT);          // imposta pin 2 come outpu
 pinMode(semaforo_verde,OUTPUT);          // imposta pin 3 come outpu
 pinMode(semaforo_giallo,OUTPUT);          // imposta pin 4 come outpu
 pinMode(selett,INPUT);                    // imposta pin 5 come input
 time=millis();                            // copio valore millis
}


void loop() {
  time=millis();                          // copio valore millis
 
 val=digitalRead(selett);
 
 if (val==0){                              // val=0 semaforo in manuale
  digitalWrite(semaforo_rosso,LOW);
  digitalWrite(semaforo_verde,LOW);
  contatore = 0;
  previousMillis = time;                  // memorizzo il valore time nella previousMillis
 if (time-previousMillis1 >interval1){
  previousMillis1 = time ;
  if (giallo_stato == LOW){
    giallo_stato = HIGH;
  }
  else {
    giallo_stato  = LOW;
  }
 digitalWrite(semaforo_giallo,giallo_stato);
  }
  }
 if (val==1){                              // val=1 semaforo in automatico
  previousMillis1 = time ;                // memorizzo il valore time nella previousMillis1
 if (contatore==0){
 digitalWrite (semaforo_rosso,HIGH);
 digitalWrite(semaforo_giallo,LOW);
  }
 
 if (time - previousMillis > interval)  {
    previousMillis = time;                // dopo che si è verificato vero l'if memorizzo il valore time nella previousMillis
    contatore++;                          // incremento di 1 il valore del contatore
 }
 switch ( contatore ){
 case 1 :
 digitalWrite(semaforo_rosso,LOW); 
 digitalWrite(semaforo_verde,HIGH);
 break;
 case 2 : 
 digitalWrite(semaforo_giallo,HIGH);
 break;
 case 3 :
 digitalWrite(semaforo_verde,LOW);
 digitalWrite(semaforo_giallo,LOW);
 contatore=0;
 break;
 }
 }
 }


Ultima modifica di Admin il Mer Giu 29, 2016 6:51 pm - modificato 1 volta. (Motivazione : sistemato layout messaggio)
Guido Laferrari
Guido Laferrari
Livello due
Livello due

Messaggi Messaggi : 34
Crediti Crediti : 54
Reputazione Reputazione : 2
Data d'iscrizione Data d'iscrizione : 30.04.16

Torna in alto Andare in basso

Semaforo con millis aut./man. Empty Re: Semaforo con millis aut./man.

Messaggio Da Admin Mer Giu 29, 2016 6:52 pm

Ciao, posso dirti che hai fatto passi da gigante? Very Happy

La struttura del codice è leggibile e addirittura hai commentato tutto! Direi che è il top del top. Che ne pensi di fare un piccolo video e di caricarlo su Youtube? Così fai anche una dimostrazione Razz.

Fammi sapere cosa ne pensi Ciao!
Admin
Admin
♔ Amministratore

Messaggi Messaggi : 4370
Crediti Crediti : 12173
Reputazione Reputazione : 187
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 25

https://wikiinfo.forumattivo.it

Torna in alto Andare in basso

Semaforo con millis aut./man. Empty Re: Semaforo con millis aut./man.

Messaggio Da Guido Laferrari Sab Lug 02, 2016 4:00 pm

Ciao
Ti ringrazio per le belle parole, per quanto riguarda il video e la dimostrazione non me la sento,ti ringrazio ancora per il tuo prezioso aiuto a risentirci al prossimo progetto.
Guido
Guido Laferrari
Guido Laferrari
Livello due
Livello due

Messaggi Messaggi : 34
Crediti Crediti : 54
Reputazione Reputazione : 2
Data d'iscrizione Data d'iscrizione : 30.04.16

Torna in alto Andare in basso

Semaforo con millis aut./man. Empty Re: Semaforo con millis aut./man.

Messaggio Da Admin Sab Lug 02, 2016 6:52 pm

Prego Guido, non preoccuparti. Al massimo puoi fare anche solo qualche foto e caricarle. Se non te la senti, nessun problema Very Happy.

Buona giornata Ciao!
Admin
Admin
♔ Amministratore

Messaggi Messaggi : 4370
Crediti Crediti : 12173
Reputazione Reputazione : 187
Data d'iscrizione Data d'iscrizione : 08.03.11
Età Età : 25

https://wikiinfo.forumattivo.it

Torna in alto Andare in basso

Semaforo con millis aut./man. Empty Re: Semaforo con millis aut./man.

Messaggio Da Contenuto sponsorizzato


Contenuto sponsorizzato


Torna in alto Andare in basso

Torna in alto

- Argomenti simili

 
Permessi in questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum.