Francesco Querin Inserita: 2 settembre 2017 Autore Segnala Inserita: 2 settembre 2017 fatto come dici, testato sulla seriale il pulsante d che dovrebbe stoppare e passare al case 2 non fa altro che resettare tutto, come se premessi il pulsante rosso reset di arduino invece che chiamare il case 2. controprova premo solo il pulsante d e vedo sulla seriale esecuzione programma e sotto 2 il valore appunto di int variabile. tolto if( bevanda != rele1) e funziona, si accende il rele della pompa e il rele della bevanda 1 anche se premo il pulsante della bevanda 3, poi non vedo sulla seriale versamento bevanda e infine fa uno strano suono e si blocca, stoppando il funzionamento e poi riavviandosi.
Livio Orsini Inserita: 3 settembre 2017 Segnala Inserita: 3 settembre 2017 Quote fatto come dici, testato sulla seriale il pulsante d che dovrebbe stoppare e passare al case 2 non fa altro che resettare tutto, Non è che si possono fare tante ipotesi: o c'è un errore macroscopico che manda il software "a farfalle" sino a quando ripassa per l'indirizzo di zero oppure, causa più probabile, il comando attiva un qualche cosa che genera un bel disturbo. la sensibilità ai disturbi è il tallone di achille di arduino. Hi provato a fare i test senza periferiche collegate (relè, servi, etc) Quote si accende il rele della pompa e il rele della bevanda 1 anche se premo il pulsante della bevanda 3, poi non vedo sulla seriale versamento bevanda e infine fa uno strano suono e si blocca, stoppando il funzionamento e poi riavviandosi. Fai le prove senza collegare relè e motori. Usa solo dei LEDs sulle uscite (sempre con un resistore in serie, ovviamente) per virificare la loro attivazione. Credo che il problema sia proprio causato anche da disturbi che mandano il programma "a ranocchie".
Francesco Querin Inserita: 3 settembre 2017 Autore Segnala Inserita: 3 settembre 2017 capito grazie faro come dici ci rivediamo a fine test
Francesco Querin Inserita: 8 settembre 2017 Autore Segnala Inserita: 8 settembre 2017 il problema e qui digitalWrite(bevanda, HIGH); tutto regolare solo che siaccende solo la pompa, se tolgo il codice iniziale bevanda=rele1 automaticamente senza impostazione bevanda diventa rele 2 e quindi quando arriva al case 2 parte pompa e valvola 1, se imposto premendo altri pulsanti tutto sembra regolare solo che pero si accende sempre bevanda 1 e pompa, usando solo led e pulsanti ci sono meno disturbi e fila piu regolare infatti ce sempre scritto versamento bevanda che prima non compariva, pero ce sempre il fatto che se non metto variabile=0 parte subito al case 1 e vale lo stesso per bevanda=rele1 e altre situazioni simili.
Francesco Querin Inserita: 13 settembre 2017 Autore Segnala Inserita: 13 settembre 2017 in poche parole il pulsante d resetta le impostazioni di bevanda aquisite dal pulsante a,b o c
Livio Orsini Inserita: 14 settembre 2017 Segnala Inserita: 14 settembre 2017 Devi solo vedere come evolve il programma quando viene riconosciuta la pressione al pulsante "D"
Francesco Querin Inserita: 14 settembre 2017 Autore Segnala Inserita: 14 settembre 2017 in seriale ce serial.println bevanda serial.println variabile ce pulsante a variabile = 1 e bevanda = rele2 pulsante b variabile = 1 e bevanda = rele3 pulsante c variabile = 1 e bevanda = rele4 pulsante d variabile = 2 impostazioni base bevanda=rele1 variabile=0 sul monitor seriale leggo 0 variabile 26 bevanda alla pressione del pulsante a,b o c 1 27,28 o 29 alla pressione del pulsante d 2 26 dovrebbe essere 2 27,28 o 29 mettendo impostazione al posto di bevanda e nel pulsante d sotto variabile bevanda=impostazione, oppure nel case 2 bevanda=impostazione, oppure nel pulsante d bevanda=bevanda il risultato ottenuto in diverse prove e sempre lo stesso. togliendo le impostazioni iniziali oltretutto bevanda e variabile ottengono la prima impostazione che trovano anche se e dentro if ( digitalRead(buttonA) ==HIGH )
Livio Orsini Inserita: 15 settembre 2017 Segnala Inserita: 15 settembre 2017 Scusa ma rele2, rele3, rele4 casa sono? Non ho visto le dichiarazioni, ma credo di intuire che non puoi fae questa eguaglianza " bevanda=rele1 ". Probabilmente il numero che leggi sul monitor è l'indirizzo fisico di rele1
Francesco Querin Inserita: 15 settembre 2017 Autore Segnala Inserita: 15 settembre 2017 rele1 sarebbe int rele1=26; void setup { pinMode(rele1, OUTPUT) } ecco il programma https://pastebin.com/ipsEnSwZ
Livio Orsini Inserita: 16 settembre 2017 Segnala Inserita: 16 settembre 2017 Allora esegue correttamente il programma. La macchina fa esattamente quello che gli dici di fare. Se hai: Quote alla pressione del pulsante d 2 26 dovrebbe essere 2 27,28 o 29 Vai a vedere cosa fa nel ciclo relativo al pulsante d. Io non posso fare il debug del programma al posto tuo.
Francesco Querin Inserita: 16 settembre 2017 Autore Segnala Inserita: 16 settembre 2017 capito, mi sono dimenticato di dire che un mio amico mi ha detto che quando arriva al pulsante d si e dimenticato del resto e che devo fare a= lettura del pulsante a e che se a fai codice, quindi ho messo a= variabile 1 a= bevanda= rele2 al pulsante d variabile=2 a. pero non e cambiato niente, che sia il pulsante d avevo intuito bene pero non so come vedere che cosa fa quando e li e come risolverlo. provero a debuggare il pulsante d
gabri-z Inserita: 16 settembre 2017 Segnala Inserita: 16 settembre 2017 Non c'è modo di far girare il programma " al rallentatore " ? Domanda da ignorante, evidentemente .
Livio Orsini Inserita: 16 settembre 2017 Segnala Inserita: 16 settembre 2017 25 minuti fa, gabri-z scrisse: Non c'è modo di far girare il programma " al rallentatore " ? No è uno dei limiti di arduino; l'unica cosa possibile è mettere delle stampe di traccia e vedere sul monitor dove transita il programma. 34 minuti fa, Francesco Querin scrisse: provero a debuggare il pulsante d Il pulsante "D" viene letto ed il programma fa esattamente quello che gli hai detto di fare. E' possibile sapere cosa vuoi far fare al pulsante "D"?
Francesco Querin Inserita: 16 settembre 2017 Autore Segnala Inserita: 16 settembre 2017 il pulsante d deve portare il programma al case 2, cioe nel codice dentro il case 1 deve stopparlo e lo sta facendo bene, deve poi chiamare il case 2 e interompere il case 1 e anche qui sta facendo bene, quello che sta facendo e che non dovrebbe fare e mettere la variabile bevanda a rele1(cioe la pompa) e lasciarla impostata a rele2 o rele3 o rele4(che sarebbero le elettrovalvole che versano le bevande). bevanda dovrebbe rimanere a rele2 o rele3 o rele4 invece di essere resettata a rele1.
Livio Orsini Inserita: 16 settembre 2017 Segnala Inserita: 16 settembre 2017 Io ho guarsdato il file allegato; tu hai scritto: if(digitalRead(buttonD)==HIGH) { variabile=2; a; } ----------- case 2: myservo.write(180); /* qui aggiungi Serial.println(lettura, soglia); */ while(lettura < soglia) { digitalWrite(rele1, LOW); digitalWrite(bevanda, LOW); Serial.println("versamento bevanda"); } if(lettura > soglia){variabile=3;} break ; Che significa che se lettura è minore di soglia esegue le istruzioni, altrimenti salta ed esce. Aggiungi la riga che ti ho messo tra i commenti e verifica che ci siano le condizioni affinchè esegua il loop.
Francesco Querin Inserita: 16 settembre 2017 Autore Segnala Inserita: 16 settembre 2017 capito, lettura e analogRead A0 che e 0, per cui funziona infatti ogni volta vedo su seriale versamento bevanda, ho tolto a; a= variabile=1 e a= bevanda= rele2 visto che non funzionava ho provato anche altre vie ma sempre il pulsante d resetta bevanda tranne nel caso, pulsante a variabile=1 a=high pulsante d variabile=2 if a=high bevanda=rele2 problema essendo a= cioe a impostato, parte subito a b e c essendo c in fondo sovrascrive gli altri e quindi parte sempre c, mettendo invece == uguale invece di = assegnazione non funziona, messo anche serial.println e in seriale leggo a b c invede dovrei leggere solo a o b o c aggiunto la riga che mi ai detto testero il programma
Francesco Querin Inserita: 17 settembre 2017 Autore Segnala Inserita: 17 settembre 2017 int variabile=0; int soglia=250; int bevanda; bevanda=rele1; semplicemente mettendole nel loop tra il passaggio dei pulsanti a b e c al pulsante d in quel pezzo cera il loop che impostava le variabili a come erano a inizio programma ottenendo il reset e provocando in mancanza di variabile=0 un assegnazione pari al primo valore che trovavano, spostandole dal loop a inizio programma dopo le librerie prima del void setup () non solo scrivo int variabile; int soglia=250; int bevanda; ma funziona pure perché non ce un loop che le rimposta a inizio ciclo, grazie di tutto il tempo e i consigli sono stati sempre utili.
Livio Orsini Inserita: 17 settembre 2017 Segnala Inserita: 17 settembre 2017 L'importante è arrivarci ed imparare le piccole malizie che semplificano la vita.
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora