è possibile fare questo collegamento?

allora voglio mettere 4 diodi dopo la resistenza che pilota il led su 4 uscite di arduino
digitalWrite (X, HIGH);

le uscite dei 4 diodi le unisco assieme e le voglio collegare a un pin di entrata analogico,

per ottenere un segnale "alto" sempre sullo stesso pin di entrata indipendentemente da quale led sia acceso o quanti led sono accesi (almeno uno si ovviamente)

oppure posso risolvere diversamente

Sì. l'idea è praticabile, aggiungi però una R da 10K tra il pin e GND (funzione pull-down)

una cosa cosi giusto?

perfetto :slight_smile:

Come dice giustamente il prof, l'idea è applicabilissima e lo schema è corretto.
Francamente quello che mi sfugge, però, è il senso di questa cosa; infatti dato che stai monitorando delle uscite facenti parte della stessa MCU e NON uscite esterne, puoi benissimo controllare questa condizione (ovvero la condizione HIGH di una delle 4 uscite) direttamente dall'"interno" via software, senza bisogno di fare il "giro largo".
A che cosa mai potrebbe servirti una cosa simile? Sono curioso. :stuck_out_tongue:

dalubar:
Come dice giustamente il prof, l'idea è applicabilissima e lo schema è corretto.
Francamente quello che mi sfugge, però, è il senso di questa cosa; infatti dato che stai monitorando delle uscite facenti parte della stessa MCU e NON uscite esterne, puoi benissimo controllare questa condizione (ovvero la condizione HIGH di una delle 4 uscite) direttamente dall'"interno" via software, senza bisogno di fare il "giro largo".
A che cosa mai potrebbe servirti una cosa simile? Sono curioso. :stuck_out_tongue:

ci sto provando ma forse sbaglio qualcosa questa è la porzione di codice che non mi funziona
non stampa nulla nel serial monitor
l'idea era questa "parto" con allarme = 0 e man mano che verifico le 4 uscite gli venva assegnato un valore diverso (tra 1 e 4)
alla fine se allarme < 1 tutto ok nessun allarme

ma i led di allarme sono accesi ma e come se non li legge :~

int allarme; //

allarme=0;
if (5 == HIGH) allarme=1;
if (5 == HIGH) Serial.println (" 13) ALLARME ACQUA SERBATOIO INSUFFICENTE ATTIVO ");
if (6 == HIGH) allarme=2;
if (6 == HIGH) Serial.println (" 13) ALLARME FOTORESISTENZA RILEVA POCA LUCE ");
if (10 == HIGH) allarme=3;
if (10 == HIGH) Serial.println (" 13) ALLARME TEMPERATURA SERBATOIO 72° ");
if (11 == HIGH) allarme=4;
if (11 == HIGH) Serial.println (" 13) ALLARME TEMPERATURA PANNELLI 102° ");

Per verificare lo stato digitale di un pin devi usare la funzione "digitalRead(numeropin)".
Inoltre puoi risparmiare un if per controllo.
Prova così:

if (digitalRead(5) == HIGH) {
allarme=1;Serial.println (" 13) ALLARME ACQUA SERBATOIO INSUFFICENTE ATTIVO   ");
}
if ((digitalRead(6) == HIGH) {
allarme=2; Serial.println (" 13) ALLARME FOTORESISTENZA RILEVA POCA LUCE   ");
}
// etc....

EDIT: Mi è partito l'update per sbaglio mentre editavo il post XD

GINGARDU:

[quote author=Michele Menniti link=topic=110074.msg826495#msg826495 date=1339701252]
Sì. l'idea è praticabile, aggiungi però una R da 10K tra il pin e GND (funzione pull-down)

una cosa cosi giusto?
[/quote]
La tensione letta dal entrata analogica dipende dal colore del LED e va da 0,9V (infrarosso) a 3,5V (blu o bianco)
Ciao Uwe

dalubar:
Per verificare lo stato digitale di un pin devi usare la funzione "digitalRead(numeropin)".
Inoltre puoi risparmiare un if per controllo.
Prova così:

if (digitalRead(5) == HIGH) {

allarme=1;Serial.println (" 13) ALLARME ACQUA SERBATOIO INSUFFICENTE ATTIVO   ");
}
if ((digitalRead(6) == HIGH) {
allarme=2; Serial.println (" 13) ALLARME FOTORESISTENZA RILEVA POCA LUCE   ");
}
// etc....




EDIT: Mi è partito l'update per sbaglio mentre editavo il post XD

OK grazie mille, ero convinto (manca l'esperienza) che digitalRead servisse per una lettura esterna dei segnali,
cosi sembra funzionare e abbiamo risparmiato 4 diodi e piste sullo stampato 8)

uwefed:

GINGARDU:

[quote author=Michele Menniti link=topic=110074.msg826495#msg826495 date=1339701252]
Sì. l'idea è praticabile, aggiungi però una R da 10K tra il pin e GND (funzione pull-down)

una cosa cosi giusto?

La tensione letta dal entrata analogica dipende dal colore del LED e va da 0,9V (infrarosso) a 3,5V (blu o bianco)
Ciao Uwe
[/quote]
quindi mettendo 4 diodi di colore diverso che tensione si otterrebbe se si accendono tutti?

quindi mettendo 4 diodi di colore diverso che tensione si otterrebbe se si accendono tutti?

quella del diodo con la tensione Vf piú alta meno i 0,7V del diodo.
Ciao Uwe

hai risolto diversamente, altrimenti avresti solo dovuto collegare l'anodo dei diodi all'altro capo della R di limitazione dei led, per evitare il giusto problema della caduta di tensione, sollevato da Uwe.

Sí Michele, parlando teoreticamente, ma cosí puoi controllare se il LED funziona e non sia interrotto o in corto.
Ciao Uwe

dalubar:
Per verificare lo stato digitale di un pin devi usare la funzione "digitalRead(numeropin)".
Inoltre puoi risparmiare un if per controllo.
Prova così:

if (digitalRead(5) == HIGH) {

allarme=1;Serial.println (" 13) ALLARME ACQUA SERBATOIO INSUFFICENTE ATTIVO   ");
}
if ((digitalRead(6) == HIGH) {
allarme=2; Serial.println (" 13) ALLARME FOTORESISTENZA RILEVA POCA LUCE   ");
}
// etc....




EDIT: Mi è partito l'update per sbaglio mentre editavo il post XD

volevo chiedere una curiosita,
perche questa "riga" stampa (correttamente) solo se 10 è HIGH

if (digitalRead(10) == HIGH) {allarme=1;
Serial.println (" 9) ALLARME ATTIVO, TEMPERATURA SERBATOIO 72 GRADI ");}

invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

volevo chiedere una curiosita,
perche questa "riga" stampa (correttamente) solo se 10 è HIGH

if (digitalRead(10) == HIGH) {allarme=1;
Serial.println (" 9) ALLARME ATTIVO, TEMPERATURA SERBATOIO 72 GRADI ");}

invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

(digitalRead( 8 ) == HIGH && digitalRead(9); <<< questo punto e virgola? ..... == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

Forse volevi scrivere:

if (digitalRead( 8 ) == HIGH && digitalRead(9) == HIGH) {
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
}

puoi anche omettere le graffe nell'if se esegui una sola istruzione
ciao

pablos:

volevo chiedere una curiosita,
perche questa "riga" stampa (correttamente) solo se 10 è HIGH

if (digitalRead(10) == HIGH) {allarme=1;
Serial.println (" 9) ALLARME ATTIVO, TEMPERATURA SERBATOIO 72 GRADI ");}

invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

(digitalRead( 8 ) == HIGH && digitalRead(9); <<< questo punto e virgola? ..... == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

ok grazie mille levando il punto e virgola stampa "giusto"

GINGARDU:

invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

(digitalRead( 8 ) == HIGH && digitalRead(9); <<< questo punto e virgola? ..... == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

ok grazie mille levando il punto e virgola stampa "giusto"

Scusa GINGARDU una curiosità. Solo levando "quel" punto e virgola il programma funziona bene?
Cioè senza che la riga sia precedura dall'istruzione if e con il ";" alla fine di essa?

(digitalRead( 8 ) == HIGH && digitalRead(9) == HIGH);

Non metto in dubbio che stampi il messaggio, ma così viene a mancare la logica condizionale che dà il senso alla stampa stessa. Ovvero se vuoi che quel messaggio sia visualizzato solo quando gli ingressi 8 e 9 sono HIGH, devi cmq inserire la riga con il println all'interno di una istruzione condizionale if (e che finisca senza il ";"). Al limite puoi solo eliminare le parentesi graffe (anche se io consiglio di inserirle sempre a coloro che non hanno molta esperienza con la programmazione, perchè possono portare a errori logici).

dalubar:

GINGARDU:

invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

(digitalRead( 8 ) == HIGH && digitalRead(9); <<< questo punto e virgola? ..... == HIGH);
Serial.println (" 15) segnali dei 2 circolatori accesi ");

ok grazie mille levando il punto e virgola stampa "giusto"

Scusa GINGARDU una curiosità. Solo levando "quel" punto e virgola il programma funziona bene?
Cioè senza che la riga sia precedura dall'istruzione if e con il ";" alla fine di essa?

(digitalRead( 8 ) == HIGH && digitalRead(9) == HIGH);

Non metto in dubbio che stampi il messaggio, ma così viene a mancare la logica condizionale che dà il senso alla stampa stessa. Ovvero se vuoi che quel messaggio sia visualizzato solo quando gli ingressi 8 e 9 sono HIGH, devi cmq inserire la riga con il println all'interno di una istruzione condizionale if (e che finisca senza il ";"). Al limite puoi solo eliminare le parentesi graffe (anche se io consiglio di inserirle sempre a coloro che non hanno molta esperienza con la programmazione, perchè possono portare a errori logici).

si levando il punto e virgola stampa "giusto" come se if fosse implicito,
se lascio il punto e virgola stampa sempre anche se aggiungo parentesi graffe,

invece nella riga
if (digitalRead(10) == HIGH) {allarme=1;
Serial.println (" 9) ALLARME ATTIVO, TEMPERATURA SERBATOIO 72 GRADI ");}

anche se c'è il punto e virgola stampa giusto lo stesso a patto che le parentesi graffa vengono lasciate al loro posto