Non riesco a capire perché non mi si accende il LED blu quando il PIR intercetta il movimento.
Il listato è il seguente:
/*
* Fontana v0
* 17 aprile 2018
*/
#include <Wire.h>
#include <PCF8574_HD44780_I2C.h>
// address 0x27, 16 chars, 2 line display
PCF8574_HD44780_I2C lcd(0x27,16,2);
void setup() {
lcd.init();
lcd.noBacklight();
lcd.clear();
pinMode(13, OUTPUT); // LED verde
pinMode(11, OUTPUT); // LEd blu
pinMode(8, INPUT); // PIR o IR
digitalWrite(5, LOW); // rele
Serial.begin(9600);
Wire.begin();
lcd.setCursor(3,0); // colonna, riga
lcd.print("Fontana v.0");
lcd.setCursor(2,1);
lcd.print("17 aprile 2018");
delay(2000);
lcd.clear();
lcd.home();
}
int pinin = 0;
void loop() {
pinin = digitalRead(8);
if (pinin == 0) {
pinin = digitalRead(8);
digitalWrite(11, LOW);
}
digitalWrite(11, HIGH);
Serial.println(pinin,DEC);
lcd.setCursor(0,1);
lcd.print(pinin, DEC);
digitalWrite(13, HIGH);
delay(750);
digitalWrite(13, LOW);
delay(250);
}
Anche se cambio il pin digitale in uscita il LED non funziona.
Ho verificato i collegamenti elettrici, le polarità del LED e sono corretti.
Anche se utilizzo un Arduino NANO al posto del UNO, il risultato non cambia.
Sulla seriale e sul LCD vedo che il PIR cambia di stato.
I due ARDUINO sono originali, non giapponesi.
Il led L (pin 13) integrato negli Arduino lampeggia regolarmente.
Forse è la libreria i2C, che mi crea questo problema?
Saluti
Hai idea di quanto velocemente vengono eseguite le istruzioni? Una ogni 62.5 ns. Tu spegni il led e lo riaccendi subito dopo, e i tuoi occhi non sono così veloci da percepire 62.5 ns di led spento.
mi sono permesso di farti una modifica per comprendere meglio i pin usati...
e ho aggiunto dei commenti...
però da come è scritto il led bleu è praticamente sempre acceso ( se non hai messo l'opportuna resistenza potrebbe essere anche fulminato)
/*
* Fontana v0
* 17 aprile 2018
*/
#include <Wire.h>
#include <PCF8574_HD44780_I2C.h>
// address 0x27, 16 chars, 2 line display
PCF8574_HD44780_I2C lcd(0x27, 16, 2);
byte blu = 11;
byte verde = 13;
byte pir = 8;
byte rele = 5;
void setup() {
lcd.init();
lcd.noBacklight();
lcd.clear();
pinMode(verde, OUTPUT); // LED verde
pinMode(blu, OUTPUT); // LEd blu
pinMode(pir, INPUT); // PIR o IR
digitalWrite(rele, LOW); // rele
Serial.begin(9600);
Wire.begin();
lcd.setCursor(3, 0); // colonna, riga
lcd.print("Fontana v.0");
lcd.setCursor(2, 1);
lcd.print("17 aprile 2018");
delay(2000);
lcd.clear();
lcd.home();
}
int pinin = 0;
void loop() {
pinin = digitalRead(pir);
if (pinin == 0) { // se entri qui il pir non rileva nulla
pinin = digitalRead(pir); // rileggi il pir ???
digitalWrite(blu, LOW); // e spegni il led blu
}
digitalWrite(blu, HIGH); // qui come dice sukkopera dopo 62 nanosecondi accendi il led blu
Serial.println(pinin, DEC);
lcd.setCursor(0, 1);
lcd.print(pinin, DEC);
digitalWrite(verde, HIGH);
delay(750);
digitalWrite(verde, LOW);
delay(250); // e dopo 1 secondo ricominci
}
Mi chiedo tu cosa voglia fare.
Comunque ho notato qualche errore:
- non fai la pinMode del relé
2)non usi il relé
- spegni il blu se il pir non sente, ma lo riaccendi comunque subito dopo
- la dicitura DEC nelle print di numeri é sottintesa, quindi omettibile
- non vedo come tu usi la wire
- non alzi mai il relé, che abbassi all'inixio inutilmente (stato normale dinuscita dichiarata é low)
In breve, puoi per favore spiegare cosa vuoi fare che non si capisce?
Ok!
Ammetto di aver fatto una serie di errori da principiante.
In breve vorrei attivare tramite un sensore PIR o IR, una pompa dell'acqua della fontanella per la mia gatta quando si avvicina per bere.
Adesso provo ad apportare le correzioni che mi avete evidenziato.
Il passo successivo sarà quello di avviare la pompa ogni ora per un minuto per tenere pulita l'acqua della fontanella, tramite un ds1307 comandato in i2C.
Saluti
Ok.
Io ti consiglio di dividere il problema in più parti, di scrivere un programma per ognuna di esse e di imparare bene cone esse funzionano.
Prima parte: leggere un sensore PIR o IR (anche se ammetto non so cosa sia) e scrivere su seriale il valore letto.
Seconda parte: comandare il modulo di controllo fontana secondo comandi prestabiliti.
Terza parte: vedo che usi un display, imparane i segreti (cone ad esempio come usare tutte le righe)
Passo successivo, dopo aver imparato bene cone funzionano i vari pezzi singolarmente, éunirli in un programma unico
Bene!
Sviluppo il programma per singole parti come consigliato
Per l'IR io intendevo un sensore infrarosso tipo il IS417F con associato un LED Ir.
Saluti