Milano, IT
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« on: January 23, 2013, 06:06:14 pm » |
Ciao a tutti, le premesse usuali le vorrei rislvere in breve, ho riflettuto a lungo, letto e riletto, provato e riprovato... ma non trovo nulla del genere! Sono stato un perito elettonico (ora grafico pubbliciario!) e dopo aver cercato una centralina in grado di gestire un orchidiario ho deciso di costruirla. Un arduino, 4 resistenze, 3 bulsanti... Ora veniamo al codice:
arduino uno e lcs 16x2, al menu accedo correttamente con 3 pulsanti e fino ad ora tutto bene:
se menu=1 e livello=0 temperatura se menu=1 e livello =1 illuminazione...
Un incremento gestisce la cosa, button.h garantisce l'antirimbalzo. Tutto funzionante! Il problema è questo, se aggiungo un delay>40 va tutto a pallino! Insomma, chiedo in Serial.print menu e livello mi da 1 ed 1, se tolgo il delay mi da 0 e 0.
Chiedo quindi se qualcuno ha qualche spiegazione o qualche idea...
|
|
|
|
« Last Edit: January 23, 2013, 06:21:50 pm by dvluca »
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15752
+39 349 2158303
|
 |
« Reply #1 on: January 23, 2013, 06:45:24 pm » |
Avrei un po' di idee: Allega i Sketch INTERI come file e non come immagini del video. Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Milano, IT
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #2 on: January 23, 2013, 06:58:12 pm » |
Certo, lo allego ridotto ai minimi termini....
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15752
+39 349 2158303
|
 |
« Reply #3 on: January 23, 2013, 08:32:32 pm » |
Vorrei aiutarTi ma come posso farlo se non dai gli sketch dove fa errore. Ciao Uwe
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #4 on: January 24, 2013, 03:51:52 am » |
Usa i code tags (pulsante # nell'editor)
|
|
|
|
|
Logged
|
|
|
|
|
Milano, IT
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #5 on: January 24, 2013, 04:40:24 am » |
Scusate... mi serve un po di rodaggio.... #include <Button.h> // Libreria Uniquepress (antirimbalzo) //-----------------------DICHIARAZIONE VARIABILI----------------------- byte menu=0; //Menu // Contatore menù 1 byte level=0; //Menu // Contatore livello (menux = 0 livello = 1) come x e y nello schema del menu //-----------------------DICHIARAZIONE per LIBRERIE -------------------
Button tastomenu = Button(9, BUTTON_PULLUP_INTERNAL, true, 50); // Identifica il Pin al quale è collegato il tasto Menu Button tastoset = Button(11, BUTTON_PULLUP_INTERNAL, true, 50); // Identifica il Pin al quale è collegato il tasto Set Button tastomeno = Button(10, BUTTON_PULLUP_INTERNAL, true, 50); // Identifica il Pin al quale è collegato il tasto Tastomeno //-----------------------VOID SETUP () -------------------------------- void setup() { Serial.begin(9600); // Apre la porta seriale a 9600 } //-----------------------VOID LOOP () -------------------------------- void loop() { delay(1000); //!!!!!!!!!! DELAY INCRIMINATO !!!!!!!!!!!!!!!! //-----------------------Gestione menù --------------------------------- if((tastomenu.uniquePress() && level==0)) { (menu=menu++); } if(tastoset.uniquePress() ) { (level++); } if (menu == 1 && level == 0) {} if (menu == 1 && level == 1) {} if (menu == 1 && level == 2) {} if (menu == 1 && level == 3) {} if (menu == 1 && level == 4) {} if (menu == 1 && level == 5) { (level=0);}
if (menu ==2) {} if (menu ==3) {} if (menu ==4) {} if (menu ==5) {} if (menu ==6) { delay(500); (menu=0); }
Serial.print("Dopo :"); Serial.print(menu); Serial.println(level); if (menu==0 && level==0) {} if (menu==0 && level==1) {}
} // Fine Loop
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2451
|
 |
« Reply #6 on: January 24, 2013, 04:46:33 am » |
Probabilmente interferisce con l'antirimbalzo, dato anche in quella libreria ci sono dei delay, la button aspetta un pochino e anche nel loop aspetta un pochino e non si mettono d'accordo. 
|
|
|
|
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #7 on: January 24, 2013, 04:49:26 am » |
delay() = male
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8242
:(){:|:&};:
|
 |
« Reply #8 on: January 24, 2013, 04:52:26 am » |
Probabilmente interferisce con l'antirimbalzo, dato anche in quella libreria ci sono dei delay, la button aspetta un pochino e anche nel loop aspetta un pochino e non si mettono d'accordo.  delay() = male più probabile che la libreria usi i millis(), in ogni caso anche io sono della vostra stessa idea. @dvluca: impara ad usare la millis() e non usare mai più la delay()  per capire come osserva lo sketch di esempio blinkWithoutDelay
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15752
+39 349 2158303
|
 |
« Reply #9 on: January 24, 2013, 05:22:09 am » |
dvluca, cosí non funziona. Non puoi chiederci un aiuto dandoci un sketch che non é quello che Ti da i problemi. Ciao Uwe
|
|
|
|
« Last Edit: January 24, 2013, 09:45:31 am by uwefed »
|
Logged
|
|
|
|
|
Milano, IT
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #10 on: January 24, 2013, 05:27:40 am » |
Ciao, forse non sono riuscito a spiegarmi; Questo da problemi!
prendo l'arduino, senza collegamenti eccetto l'USB, (senza bottoni, led, sonde, nulla di nulla)
copi il codice che ho inserito sopra,
fai l'upload senza delay, apri la seriale e dice: menu= 0 Level =0 ...poi... fai l'upload con il delay, april la seriale e dice: menu= 1 Level =1
Vi prego di verifcare, sono certo di queste condizioni,
Il delay è male, lo sò... ma il delay non manda tutto a pallino! Se avessi chiesto: "perchè se metto un delay di 2 ore non funziona nulla?" la risposta sarebbe ovvia per tutti, Invece, in questo caso, il delay, da solo, altera 2 variabili!
|
|
|
|
« Last Edit: January 24, 2013, 05:41:25 am by dvluca »
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8242
:(){:|:&};:
|
 |
« Reply #11 on: January 24, 2013, 05:45:47 am » |
perchè quel delay va a interferire con i tempi di milli memorizzati dalla libreria button.h per calcolare lo stato dei pulsanti, mandando tutto a pallino.
lo stesso vale per il delay(500) che vedo più avanti, ma viene chiamato in rari casi e quindi è un bug latente.
apri la button.h / button.cpp e leggiti il codice, dovresti capire cosa succede
|
|
|
|
|
Logged
|
|
|
|
|
Milano, IT
Offline
Newbie
Karma: 0
Posts: 19
|
 |
« Reply #12 on: January 24, 2013, 06:24:10 am » |
La libreria dovrebbe funzionare così:
if (bitRead(state,CURRENT) != bitRead(state,PREVIOUS)){ bitWrite(state,CHANGED,true);
Leggi il tasto, prima era o ed adesso è 1 ; prima era 1 ed adesso è 0; bene lo stato è cambiato!
La libreria non ha delay ne millis...
lo stato iniziale era dei pin ai quali (non) sono collegati i bottoni è dichiarato a 0, i bottoni non ci sono! (quindi il problema non è hardware) Scusate ma proprio non capisco!
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2451
|
 |
« Reply #13 on: January 24, 2013, 07:21:23 am » |
prova a spostare quel delay 1000 in fondo al loop, se non altro almeno prima vede i tasti premuti ed esegue le relative cose, poi aspetta 1 sec.
|
|
|
|
« Last Edit: January 24, 2013, 07:25:00 am by pablos »
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
0
Offline
Tesla Member
Karma: 83
Posts: 8242
:(){:|:&};:
|
 |
« Reply #14 on: January 24, 2013, 07:25:07 am » |
aspetta, se ai pin dei bottoni non è presente pull up o pull down allora è normale avere cose a random
|
|
|
|
|
Logged
|
|
|
|
|
|