#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define CONTRAST_PIN 9
#define BACKLIGHT_PIN 7
#define CONTRAST 125
void setup()
{ pinMode(CONTRAST_PIN, OUTPUT);
pinMode(BACKLIGHT_PIN, OUTPUT);
digitalWrite(BACKLIGHT_PIN, HIGH);
analogWrite (CONTRAST_PIN, CONTRAST);
lcd.begin(16,2); // initialize the lcd
lcd.home (); // go home
lcd.print("Hello, ARDUINO ");
lcd.setCursor ( 0, 1 ); // go to the next line
lcd.print (" WORLD!");
}
void loop() {}
non trovo su internet il download di questa libreria #include <Wire.h> su le librerie di arduino non c'è
wirefree:
non trovo su internet il download di questa libreria #include <Wire.h> su le librerie di arduino non c'è
Certo che non la trovi per il "download" ... è di base e fa parte delle librerie del "core" di Arduino e la trovi in /hardware/arduino/avr/libraries/Wire/
Guglielmo
Aggiornamento:
la libreria ufficiale GitHub - johnrickman/LiquidCrystal_I2C: LiquidCrystal Arduino library for the DFRobot I2C LCD displays
nell'IDE 1.6.8 da scaricare attraverso il gestore librerie, mi funziona con i moduli I2C standard.
Quindi, invece di usare la NewLiquidCrystal di Malpartida, e dando quella sfilza di parametri LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
va benissimo quella ufficiale con un semplice LiquidCrystal_I2C lcd(0x27,16,2); e poi lcd.init() nel setup
Se invece il modulo I2C non è standard (io ne uno con marchio mjkdz) allora usare lib di Malpartida che permette di dare parametri diversi. La lib ufficiale NON accetta parametri diversi !!
non è nel librerie di arduino molto probabilmente lo tolta per fare qualche altro programma , in quanto andava in contrasto se non ricordo male con altre librerie
La wire viene fornita con l'IDE e non stà assieme alle altre librerie.
Parliamo di IDE 1.6.8 poi se usi altro IDE dillo.
wirefree:
non è nel librerie di arduino molto probabilmente lo tolta per fare qualche altro programma , in quanto andava in contrasto se non ricordo male con altre librerie
... se lo hai fatto hai SBAGLIATO ... vai nell'area download e riscarica l'ultima versione completa dell'IDE ed installala ... e NON toccare quello che è dentro l'IDE.
E se ci sono conflitti ... è quello che va in conflitto che è sbagliato/obsoleto, NON quello che c'è all'interno del IDE che è necessario (... l'unica che si può cancellare è la RobotIRremote ... che va tolta se si usa la IRremore completa).
Guglielmo
aggiornamento
grazie gpb01 , la libreria era dove a detto lei ,/hardware/arduino/avr/libraries/Wire/ , o dovuto pero inserila nelle librerie di arduino per fargliela vedere, ora FUNZIONA il tutto ,
di un nuovo grazie per la vostra pazienza e disponibilità nid69ita ,SukkoPera, gpb01
devo risolvere un altro disagio, datemi un suggerimanto se esiste la soluzione il monitor ha i pin maschio
cosi il uguale convertitore seriale lo devo montare in una basettta per semplificare , c'è degli attacchi in
commercio femmina - femmina per unire i due componenti
Certamente che esistono
wirefree:
.... o dovuto pero inserila nelle librerie di arduino per fargliela vedere, ora FUNZIONA il tutto ,
NO, NON va bene ... se selezioni la corretta "board" la DEVE vedere dove si trova, altrimenti è sintomo che il tuo IDE è male installato o c'è qualche cosa che NON va.
Non si può cambiare di testa propria, senza sapere quello che comporta, la posizione di librerie ...
... se è stata messa li c'è un motivo ben preciso e NON va assolutamente messa nella cartella delle librerie "generiche".
Ripeto il consiglio, scarica l'ultima versione dell'IDE e usa quella SENZA andarci a mettere le mani dentro, o ...
... prima o poi avrai problemi e non capirai perché !
Guglielmo
allora scarico l'ultima ide e faccio anche questo test ,, pero mettendo nelle librerie funziona correttamente , prima non la vedeva,, bho e probabile che ci sia qualcosa di anomalo nel ide che ho installato
ancora un piccolo aiuto , che non riesco a risolvere , al monitor ho alleganto un telecomando , la funzione è
questa: se premo un tasto del telecomando il monitor a una determita frase
mentre se premo un altro tasto il monitor visualizza un altra frase , nulla di anomalo
fino a due tre volte funziona bene poi non corrisponde più , il monitor lampeggia con la scritta e non riesce ad uscire dalla quella condizione
allego il lo sckiech non so dove sono le anomalie .
#include <IRremote.h>
int receiver = 2; // settiamo il pin 11 come pin dove andar a leggere i segnali ricevutiIRrecv irrecv(receiver); // istanziamo un oggetto di tipo irrecv
decode_results results; // istanziamo un oggetto di tipo decode_result
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
#include <Wire.h>
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define CONTRAST_PIN 9
#define BACKLIGHT_PIN 7
#define CONTRAST 125int x;// ciclo for
void setup(){pinMode(CONTRAST_PIN, OUTPUT);
pinMode(BACKLIGHT_PIN, OUTPUT); //FUNZIONI MONITOR
digitalWrite(BACKLIGHT_PIN, HIGH);
analogWrite (CONTRAST_PIN, CONTRAST);irrecv.enableIRIn();// FUNZIONE TELECOMANDO
lcd.begin(16,2);
lcd.print("!!!ALLARME!!! ");
lcd.setCursor (0,1);
lcd.println("!!!DISINSERITO!!! ");}void loop() {
if (irrecv.decode(&results)) {
irrecv.resume(); ////FUNZIONE TELECOMANDO DI DEFAULT}
if ( results.value ==0XFFA857 ){ //se premo il tasto 1 del telecomando esegue le istruizioni qui di seguito
for(x=0;x<5;x++){ //FOR per avre un ritardio di circa 20 secondi
lcd.begin(16,2);
lcd.println("--ATTENZIONE--- ");
lcd.setCursor (0,1);
lcd.print(" ALLARME ATTIVO");
delay(2000);
lcd.clear();
lcd.begin(16,2);
lcd.print("FRA 20 SECONDI");
delay(2000);}lcd.begin(16,2);
lcd.print("ALLARME ATTIVO "); }if ( results.value == 0XFFE01F ) { //se premo il tasto 2 del telecomando esegue le istruizioni qui di seguito
lcd.begin(16,2);
lcd.print("----ALLARME---- ");
lcd.setCursor (0,1);
lcd.println("---DISINSERITO--- ");
delay(400);}}
Secondo me è sbagliata la logica. Quando da telecomando arriva il tasto, setta una variabile e poi ragiona su quella. E' importante il resume() sul receiver sia fatto nel giusto momento.
int StatoTc=0; // tra le variabili globali
...
if (irrecv.decode(&results))
{ if ( results.value ==0xFFA857 ) StatoTc=1;
if ( results.value ==0xaltrox ) StatoTc=2;
...
irrecv.resume(); ////FUNZIONE TELECOMANDO DI DEFAULT
}
if( StatoTc==1) allora ...
dove che sbaliato ad inserire le tue istruzioni perdonami , inserisco lo schiech :
#include <IRremote.h>
int receiver = 2; // settiamo il pin 11 come pin dove andar a leggere i segnali ricevuti
IRrecv irrecv(receiver); // istanziamo un oggetto di tipo irrecv
decode_results results; // istanziamo un oggetto di tipo decode_result
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define CONTRAST_PIN 9
#define BACKLIGHT_PIN 7
#define CONTRAST 125
int statotc=0; // tra le variabili globali
int statotc=1;
int x;// ciclo for
void setup(){
pinMode(CONTRAST_PIN, OUTPUT);
pinMode(BACKLIGHT_PIN, OUTPUT); //FUNZIONI MONITOR
digitalWrite(BACKLIGHT_PIN, HIGH);
analogWrite (CONTRAST_PIN, CONTRAST);
irrecv.enableIRIn();// FUNZIONE TELECOMANDO
lcd.begin(16,2);
lcd.print("!!!ALLARME!!! ");
lcd.setCursor (0,1);
lcd.println("!!!DISINSERITO!!! ");}
void loop() {
if (irrecv.decode(&results)) {
if ( results.value ==0xFFA857 ) statotc=1;
if ( results.value ==0XFFE01F ) statotc=2;
irrecv.resume(); ////FUNZIONE TELECOMANDO DI DEFAULT
}
if( StatoTc==1) { //se 0XFFA857 premo il tasto 1 del telecomando esegue le istruizioni qui di seguito
for(x=0;x<1;x++){ //FOR per avre un ritardio di circa 20 secondi
lcd.begin(16,2);
lcd.println("--ATTENZIONE--- ");
lcd.setCursor (0,1);
lcd.print(" ALLARME ATTIVO");
delay(2000);
lcd.clear();
lcd.begin(16,2);
lcd.print("FRA 20 SECONDI");
delay(2000);}
lcd.begin(16,2);
lcd.print("ALLARME ATTIVO "); }
if( StatoTc==2) { //0XFFE01F se premo il tasto 2 del telecomando esegue le istruizioni qui di seguito
lcd.begin(16,2);
lcd.print("----ALLARME---- ");
lcd.setCursor (0,1);
lcd.println("---DISINSERITO--- ");
delay(400);
}}
--- wirefree, ti prego di usare correttamente i tag ... per il codice si usano i tag CODE e non i tag QUOTE. Grazie - gpb01
#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define pinReceiver 2
IRrecv irrecv(pinReceiver); // istanziamo un oggetto di tipo irrecv
decode_results results; // istanziamo un oggetto di tipo decode_result
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define CONTRAST_PIN 9
#define BACKLIGHT_PIN 7
#define CONTRAST 125
byte statoA = 0; // stato allarme, pilotato da Telecomando
byte x; // ciclo for
void setup()
{ pinMode(CONTRAST_PIN, OUTPUT);
pinMode(BACKLIGHT_PIN, OUTPUT); //FUNZIONI MONITOR
digitalWrite(BACKLIGHT_PIN, HIGH);
analogWrite (CONTRAST_PIN, CONTRAST);
irrecv.enableIRIn();// FUNZIONE TELECOMANDO
lcd.begin(16, 2);
}
void loop()
{ if (irrecv.decode(&results))
{ if ( results.value == 0xFFA857 ) statoA = 1; // allarme in attivazione (2=attivo)
if ( results.value == 0XFFE01F ) statoA = 0; // allarme disattivo
irrecv.resume(); ////FUNZIONE TELECOMANDO DI DEFAULT
}
if ( statoA == 1) //se 0XFFA857 premo il tasto 1 del telecomando esegue le istruizioni qui di seguito
{ // 0123456789012345
lcd.setCursor(0, 0); lcd.print("*ALLARME ATTIVO*");
lcd.setCursor(0, 1); lcd.print("->FRA 00 SECONDI");
for (x = 1; x < 20; x++)
{ lcd.setCursor(0, 6); // 2 cifre
if (x < 10) lcd.print("0");
lcd.print(x);
delay(1000);
}
statoA = 2; // finito ciclo passa a stato allarme attivo
lcd.clear();
}
if (statoA == 2)
{ lcd.setCursor(0, 0); lcd.print("ALLARME ATTIVO");
}
if (statoA == 0) //0XFFE01F se premo il tasto 2 del telecomando esegue le istruizioni qui di seguito
{ lcd.setCursor(0, 0); lcd.print("----ALLARME---- ");
lcd.setCursor(0, 1); lcd.println("---DISINSERITO--- ");
}
}
Nello stato attivazione quel for è una schifezza. Fare un ciclo da 0 a <1 per fare 1 ciclo che senso ha ?
for (x = 0; x < 1; x++) //FOR per avre un ritardio di circa 20 secondi
Può essere carino invece usare quel for con un vero conteggio di 20 secondi e mostrarlo su lcd
Inoltre ti ho messo uno statoA=2 perchè quel ciclo for() deve essere fatto quando passi da allarme disattivo ad attivo e non sempre
ok grazie ,,
dei tuoi suggerimenti testo il tuo skech