scarico wc cn uno e sensore di prossimita

Salve a tutti, ho realizzato questo picco progetto per scaricare automaticamente lo scarico del wc quando si va in bagno, ho utilizzato arduino uno sceda a 2 relè sensore di prossimità, allora il mio preblema e che essendo che ho utilizzato una scheda per due bagni se li faccio lavorare singolarmente funziona tutto benissimo invece se rileva la presenza in anbi le parti contemporaneamente wc donne scarica invece uomini ritorna in attesa, mi potete aiutare dove sto facendo errore.. grazie allego lo shrek..

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);
delay(1000);
}
delay(1000);
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);
delay(1000);
}
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) {
Serial.println("attesa donne");
digitalWrite(12, HIGH);
}

else
{
digitalWrite(12, LOW);
peppe = 2;
Serial.println("rilevato donne");
}
}

Buongiorno,
prima di tutto, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO

… poi, in conformità al suddetto regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra). Grazie.

Guglielmo

Salve,
Ho letto un po il suo programma, ma devo confessare che non ci ho capito molto. In primo luogo, non per rifarle la predica, sarebbe meglio mettere il codice nei tag code (se ho capito bene se non ci riesce basta scrivere minore code maggiore ... minore /code maggiore.
Non sono neanche un gran programmatore, ma penso che il metodo più facile per questo programma sia pensarlo composto da due parti uguali (uomini e donne) e concentrarsi su una di esse alla volta.
Successivamente descrivere (anche proprio scrivere su un foglio se utile) quello che si vorrebbe fare senza pensare ai comandi di Arduino, ma immaginando di descriverlo ad un bambino di due anni (essendo quindi quanto più possibile semplici e dettagliati).
La terza fase é provare a copiare quanto é stato scritto in forma normale, all'interno del programma di Arduino, sostituendo con funzioni e collegamenti a lui comprensibili quelli usati su carta.
Come linea generale, infine, consiglio di NON usare delay(), essendo una funzione bloccante, ma caricare un timer ogni volta che serve.
Se anche dopo questo non dovesse funzionare o dovesse avere problemi allora rivediamo il codice

scusate ma e la prima volta che utilizzo questo forum, questo e lo shrek che funziona benissimo per un bagno io voglio modificare per poter utilizzare un unica scheda per comandare 2 bagni…
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”);
}
}

>lga83: ma lo hai letto il mio post #1 ? ? ? :o :o :o ... rileggilo con attenzione e fai quanto richiesto. Grazie.

Guglielmo

Bene, se questi programma funziona allora raddoppialo, aggiungi altre n uscite/ingressi dichiarate, una variabile globale Peppe 2 e fai i controlli che fai adesso anche sulle altre variabili. L'altra parte funzionerà come questa

Ho fatto tutto quello che mi hai scritto tu funziona tutto solo che quando i 2 sensorei rilevano la presenza contemporaneamente scarica solo quello delle donne gli uomini ritorna in attesa invece usandoli separatamente funziona bene

questo 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 ");
}
}

Visto che ignori quanto ti viene richiesto, questo tuo thread viene temporaneamente bloccato in attesa che tu adempia a quanto da me chiesto in precedenza (vd. presentazione).
Ti avviso che, quando ti sarai presentato ed io lo sbloccherò, se non sistemerai, come ho chiesto al post #1 e nel rispetto del regolamento, TUTTI i codici che hai messo, chiuderò definitivamente il tuo thread.
Guglielmo
P.S.:Nel caso non dovessi accorgermene, quando hai inserito la presentazione, avvertimi in MP che sblocco.

ciao Iga83,

bene…il post è stato riaperto…siccome prima l’hanno chiuso mentre stavo scrivendo :smiley: vediamo di evitare un secondo giro :smiley: :smiley: …quindi manca ancora che tu modifichi i tuoi post inserendo il codice tra i tag code (pulsante </> sopra le faccine)…non è solo un fattore “estetico” o di regolamento ma serve ad evitare che l’editor del forum interpreti in malomodo le istruzioni incluse nel tuo sketch…per modifiare usa il tasto “Quick edit more…” in basso a destra dei tuoi post.

detto questo…nel tuo sketch all’avverarsi di una delle due condizioni “uomo presente” o “donna presente” entri nel rispettivo if e ci resti per 12 secondi(!)…in questo tempo Arduino rimane sordo a tutto quello che gli succede…quindi capisci che non è cosa buona.
devi ripensare al funzionamento in toto…ti consiglio di utilizzate due variabili per leggere lo stato di ogni “bagno” e altre due, di flag, per salvare lo stato “presente”. quindi al cambio di stato da “presente” ad “assente”, usando millis(), esegui tutte le azioni necessarie.