lga83 Inserito: 24 settembre 2017 Segnala Share Inserito: 24 settembre 2017 Salve a tutti ho fatto questo piccolo progetto per far scaricare in automatico acqua del wc dopo averlo usato funziona tutto benissimo, ora siccome voglio utilizzare una scheda unica la uno per utilizzarla su due bagni differente uomini donne ma non riesco a creare lo shrek mi potete aiutare, grazie questo e lo shrek funzionante. int peppe = 0; void setup() { Serial.begin(9600); pinMode(2, INPUT); pinMode(3, OUTPUT); pinMode(13, OUTPUT); } void loop() { delay(1000); if (digitalRead(2) == HIGH && peppe == 1) { //Serial.println("scarica"); delay(1000); digitalWrite(3, HIGH); delay(5000); peppe = 0; digitalWrite(3, LOW); } if (digitalRead(2) == HIGH) { //Serial.println("attesa"); digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); peppe = 1; //Serial.println("rilevato"); } Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 24 settembre 2017 Segnala Share Inserita: 24 settembre 2017 A parte la scortesia verso il forum ufficiale di arduino, di cui hai copiato di sana pianta una pagina (ovviamente ho pulito il tutto), mancano alcune informazioni fondamentali. Non c'è un commento, non c'è un'indicazione di cosa fanno ingressi ed uscite. Tu, probabilmente hai copiato pedissequamente lo sketch da qaulche parte, hai visto che fa il suo dovere ma non sai come fare per farlo lavorare su 2 bagni. Come minimo dovresti avere 2 sensori, uno per bagno, e le uscite relative 2 +2. Poi non ti resta che duplicare pedeissequamente lo sketch funzionante cambiando ingressi ed uscite, li scrivi di seguito e dovrebbe funzionare. Potresti avere problemi con i delay, perchè bloccano il programam per il tempo di ritardo. P.S. "lo shrek" è un orchetto dei cartoni animati. I programmi dia rduino sono detti sketch; però visto che siamo italiani potremmo dire semplicemente "programma" Link al commento Condividi su altri siti More sharing options...
lga83 Inserita: 24 settembre 2017 Autore Segnala Share Inserita: 24 settembre 2017 Fatto quello che dici tu, ovviamente e normale che ci vogliono e sensori e relè ma se funzionano singolarmente tutto ok ma quando rilevano la presenza contemporaneamente quello delle donne scarica invece quello uomini ritorna in attesa Link al commento Condividi su altri siti More sharing options...
gabri-z Inserita: 24 settembre 2017 Segnala Share Inserita: 24 settembre 2017 Cambia l'ingressi donne / uomini tra di loro ; troppi favoritismi .... Link al commento Condividi su altri siti More sharing options...
lga83 Inserita: 24 settembre 2017 Autore Segnala Share Inserita: 24 settembre 2017 Cambiato ingresso donne 5 uomini 2 funziona bene ma quando rilevano la presenza contemporaneamente quelle delle donne scarica invece uomini torna in attesa x rilevare la presenza e non scarica Link al commento Condividi su altri siti More sharing options...
GiRock Inserita: 24 settembre 2017 Segnala Share Inserita: 24 settembre 2017 Devi utilizzare i millis per creare un programma peseudo-multitasking, facendo così discrimini gli utilizzatori e non sei costretto all'attesa dovuta al delay. Per ogni secondo ci sono 1000 millis, quindi crei delle variabili per ogni bagno dove memorizzi lo stato iniziale, poi con le istruzioni condizionali confronti quel valore con i millis attuali ottenendo il tempo trascorso e senza far bloccare il programma. Link al commento Condividi su altri siti More sharing options...
lga83 Inserita: 24 settembre 2017 Autore Segnala Share Inserita: 24 settembre 2017 2 ore fa, lga83 scrisse: esto e lo sketch modificato int peppe = 0; void setup() { Serial.begin(9600); pinMode(2, INPUT); pinMode(3, OUTPUT); pinMode(13, OUTPUT); pinMode(5, INPUT); pinMode(4, OUTPUT); pinMode(12, OUTPUT); } void loop() { delay(1000); if (digitalRead(2) == HIGH && peppe == 1){ Serial.println("scarica uomini"); delay(1000); //tempo inizio scarico digitalWrite(3, HIGH); delay(10000); //durata scarico acqua peppe = 0; digitalWrite(3, LOW); } if (digitalRead(2) == HIGH) { Serial.println("attesa uomini"); digitalWrite(13, HIGH); } else { digitalWrite(13, LOW); peppe = 1; Serial.println("rilevato uomini"); } if (digitalRead(5) == HIGH && peppe == 2){ Serial.println("scarica donne"); delay(1000); //tempo inizio scarico digitalWrite(4, HIGH); delay(10000); //durata scarico acqua peppe = 0; digitalWrite(4, LOW); } if (digitalRead(5) == HIGH) { Serial.println("attesa donne "); digitalWrite(12, HIGH); } else { digitalWrite(12, LOW); peppe = 2; Serial.println("rilevato donne "); } }funziona bene separatame, ma quando i 2 sensori rilevano la presenza contemporaneamente non scaricano ma ritornano in attesa, dove sta l'errore, grazie tante.. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 25 settembre 2017 Segnala Share Inserita: 25 settembre 2017 Te l'ho scritto subito che avresti avuto problemi con l'istruzione delay, questa blocca il tutto. O fai come scrive GiRock, usando l'istruzione millis(xx), oppure di fai un timer che genera un interrupt ogni tot millisecondi come faccio io. Ogni 10ms, ad esempio, vai a vedere lo stato degli ingressi dei sensori e, secondo il loro stato elabori il programma. Invece dei ritardi fai un contatore che conta i tic da 10ms. Però per fare certe cose non si può copiare pedissequamente uno sketch sensa avere un mimimo di conoscenza della macchina (arduino) e di programamzione. Tanto per iniziare a rendere un po' più decente il tuo programma int peppe = 0; int peppa = 0; e usa la variabile peppe per gli uomini e peppa per le donne, facendo i due pezzi di programma identici tranne che per questa variabile e per gli I/O. Se funziona per una sezione deve funzionare anche per l'altra, magari con ritardi, ma deve funzionare. Poi fa una ricerca con la parola chiave "millis() arduino" e vatti a leggere gli esempi ed i tutorials, ne compaiono migliaia, ma è sufficiente che ti legga in primi 5 della lista. Link al commento Condividi su altri siti More sharing options...
lga83 Inserita: 25 settembre 2017 Autore Segnala Share Inserita: 25 settembre 2017 niente non riesco a inserire i millis() mi porta sempre qualche errore Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 25 settembre 2017 Segnala Share Inserita: 25 settembre 2017 Hai letto come si usano? L'istruzione millis() è banale. Esempio unsigned long tempo = 0; unsigned long tempo_1 = 0; ------- void loop() { ---------- tempo = millis(); if ((tempo - tempo_1) > 5000) { tempo_1 = tempo; digitalWrite (2, HIGH); } } Queste 4 righe scriveranno alta l'uscita 12 se è trascorso un tempo maggiore di 5 secondi dal verificarsi di un evento. Link al commento Condividi su altri siti More sharing options...
walterword Inserita: 4 ottobre 2017 Segnala Share Inserita: 4 ottobre 2017 vedi che non finisca il povero Arduino nel WC Link al commento Condividi su altri siti More sharing options...
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