problema software lc

#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/ :wink:

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 , :slight_smile:

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

http://www.ebay.it/itm/Strip-Line-singola-fila-femmina-femmina-FF-passo-2-54mm-40-pin-2-pezzi-/331450372822?hash=item4d2bfb52d6:g:QNUAAOSwYGFUuBrC

wirefree:
.... o dovuto pero inserila nelle librerie di arduino per fargliela vedere, ora FUNZIONA il tutto , :slight_smile:

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 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 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