RISOLTO display 16x2 con I2c lampeggia

Buongiorno
Sto cercando di "realizzare"-in realtà scopiazzare-una stazione meteo da questo :

Come realizzare una stazione meteo v1.0 - Poderak - YouTube.

Non mi sembrava particolarmente difficile.Credo di aver eseguito giustamente tutti i collegamenti
Lo sketch però non funziona e mi segnala positive not declared-come al solito.

Allora ho cambiato l'impostazione di indirizzo del display (0x27,16,2) ma ho ottenuto solo di farlo lampeggiare!!

Nella mia ignoranza spulciando qua e là ho pensato si tratti di librerie non adeguate.

Ne ho provate tutte quelle che conosco:NewLiquidCrystal,NewLiquidCrystal 1.35....

Altro non vi saprei narrar...lampeggia!

Ci fai vedere che sketch hai scritto?
Ciao Uwe

Questo è lo sketch che uso

#include <PCF8574_HD44780_I2C.h>

#include <dht11.h>
dht11 DHT;
#define DHT11_PIN A3

PCF8574_HD44780_I2C lcd(0x27,16,2 ); 
int temp=0; 
int um=0; 
int temp_min=0; 
int um_min=0; 
int temp_max=0; 
int um_max=0; 
int c1, c2;

 void setup() {
  lcd.begin(16,2); //inizializzo il display. Il display LCD usato è 16x2
  Serial.begin(9600);
  lcd.setCursor(0,0); 
  lcd.print(" Stazione meteo ");
  lcd.setCursor(0,1);
  lcd.print("  Fulvio v1.0  "); 
  delay(2000);
  }

void loop() {
  lcd.clear();
  int chk = DHT.read(DHT11_PIN); 
  temp=DHT.temperature;
  um=DHT.humidity; 
  
  lcd.setCursor(0,0); 
  lcd.print("Umidita' : ");       
  lcd.print(DHT.humidity,1);
  lcd.print("%");
  lcd.setCursor(0,1);
  lcd.print("Temperat.: ");  
  lcd.print(DHT.temperature,1);
  lcd.print((char)223); 
  lcd.print("C"); 
  delay(3000);
  
  if (c1==0) { 
    um_min=um;
  }
  if (c2==0) {
    temp_min=temp;
  }
  
  if (temp>temp_max) {
    temp_max=temp;
  }
  
  if (um>um_max) {
    um_max=um;
  }
  
  if (um_min>=um) {
    um_min=um;
    c1++;
  }

  if (temp_min>=temp) {
    temp_min=temp;
    c2++;
  }
 //stampo statistiche: um_max, um_min, temp_max, temp_min
  lcd.clear();
  lcd.setCursor(0,0); 
  lcd.print("Umid. max.: ");          
  lcd.print(um_max);
  lcd.print("%");
  lcd.setCursor(0,1);
  lcd.print("Temp. max.: ");  
  lcd.print(temp_max);
  lcd.print((char)223); 
  lcd.print("C"); 
  delay(3000);  
  lcd.clear();
  lcd.setCursor(0,0); 
  lcd.print("Umid. min.: ");          
  lcd.print(um_min);
  lcd.print("%");
  lcd.setCursor(0,1);
  lcd.print("Temp. min.: ");  
  lcd.print(temp_min);
  lcd.print((char)223); 
  lcd.print("C"); 
  delay(3000); 
}

>karafasta: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

Intanto quella libreria è sicuramente la migliore, lascia stare le LiquidCrystal che si chiamano tutte uguali e molte non sai più come farle funzionare
Poi quando tiri su una libreria, automaticamente nella cartella ESEMPI ti appaiono gli esempi relativi alla libreria. Da li puoi capire cosa sbagli.

Per esempio per inizializzare la libreria devi scrivere

lcd.init(); // initialize the LCD

e non quello che hai scritto tu

Poi gli indirizzi non si cambiano così, come capita.
Inoltre non vedo

#include <Wire.h>

Usa uno scanner I2c, ne trovi dappertutto, oppure usa questo:

// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    http://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
// 
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknown error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}

Una volta che hai trovato l'indirizzo, vai su File > Esempi > PCF8574.....ecc > Examples e provi "Hello World"

E da li sai se il display funziona e puoi seguire con gli esperimenti....

Grazie.Risolto!

karafasta:
Grazie.Risolto!

Bene! Ma ora modifica il post come ti è stato chiesto, grazie!

steve-cr:
Inoltre non vedo
#include <Wire.h>

Non serve, lo fa già la libreria (vedi PCF8574_HD44780_I2C.h riga 16). :wink:

docdoc:
...

Non serve, lo fa già la libreria (vedi PCF8574_HD44780_I2C.h riga 16). :wink:

Vero, mi era scappata, poi ho visto che ormai tutte le librerie fanno così...

karafasta:
Grazie.Risolto!

Prego, spero di esserti stato utile. Quando lampeggia le cose sono due: o è colpa del programma (troppi lcd.clear al posto sbagliato e "lampeggiano" i caratteri) o è sbagliato l'indirizzo (che in alcuni casi influisce sulla retroilluminazionee "lampeggia" tutto lo LCD)

Scusate.Come faccio per modificare e mettere risolto?

karafasta:
Scusate.Come faccio per modificare e mettere risolto?

Vai in modifica del tuo PRIMO post di questo thread e modifichi il titolo scrivendo [RISOLTO] davanti :slight_smile:

Guglielmo

Fatto.ok?

karafasta:
Fatto.ok?

Guglielmo

karafasta:
Fatto.ok?

Per il topic si, ma ancora devi modificare il post per mettere il codice tra tag "code" come ti ha scritto il moderatore:

karafasta: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

docdoc:
... ancora devi modificare il post per mettere il codice tra tag "code" come ti ha scritto il moderatore:

VERO, m'era sfuggito ... grazie :slight_smile:

>karafasta: nel mio post #3 hai le istruzioni per sistemare il tuo codice del post #2 conformemente al REGOLAMENTO

Guglielmo