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)
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.
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.
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° ");
[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ì:
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)
[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?
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.
dalubar:
Per verificare lo stato digitale di un pin devi usare la funzione "digitalRead(numeropin)".
Inoltre puoi risparmiare un if per controllo.
Prova così:
(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).
(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