Encoder e Lcd I2C e la seriale non comunica

Buona sera a tutti, sono alla prese con un problema diverso dal mio solito.
Giocando con un encoder HW040 una scheda UNO e la seriale tutto funziona alla perfezione ; a questo punto voglio espandere il gioco e aggiungo la libreria (la solita che uso ) per gestire un display I2C e la WIRE. Ed ancora tutto funziona.
Ma , una volta che inizializzo il display nel setup la seriale non mi stampa più. ....

#include <Wire.h>
#include <PCF8574_HD44780_I2C.h>
PCF8574_HD44780_I2C lcd(0x27,16,2);
#define pinClk 5  
#define pinDt  3  
#define pinSW  4  

float era_Clk;                  
float era_Dt;                   
int era_SW;                    
float contatore = 0.00;

void setup() {
  
 Serial.begin(9600);
  //lcd.init(); finché non digito questa stringa lo sketch funziona e la seriale
  //comunica correttamente.                                   
  
 pinMode (pinClk, INPUT);       
 pinMode (pinDt, INPUT);         
 pinMode (pinSW, INPUT_PULLUP);  
  
  era_Clk = digitalRead(pinClk);  
  era_Dt =  digitalRead(pinDt);   
  era_SW = digitalRead(pinSW);    
  
}

void loop() {
  
  float ora_Clk = digitalRead(pinClk);  
  float ora_Dt =  digitalRead(pinDt);   
  int ora_SW =  digitalRead(pinSW);   
     
  if (ora_Clk != era_Clk) {         
    
    if (ora_Dt == ora_Clk) {                     
      contatore = (contatore - 0.10);                 
    } else {                                   
      contatore = (contatore + 0.10);                  
    }          
   Serial.println(contatore);
   delay(50);
   era_Clk = ora_Clk;                
   era_Dt = ora_Dt;                  
  }

  
}

Float?

Ma tu lo sai cosa restituisce una digitalread?

oddio...

#include <Wire.h>
#include <PCF8574_HD44780_I2C.h>
PCF8574_HD44780_I2C lcd(0x27,16,2);
#define pinClk 5  
#define pinDt  3  
#define pinSW  4  

int era_Clk;                  
int era_Dt;                   
int era_SW;                    
int contatore = 0;

void setup() {
  
 Serial.begin(9600);
  lcd.init(); //finché non digito questa stringa lo sketch funziona e la seriale
  //comunica correttamente.                                   
  
 pinMode (pinClk, INPUT);       
 pinMode (pinDt, INPUT);         
 pinMode (pinSW, INPUT_PULLUP);  
  
  era_Clk = digitalRead(pinClk);  
  era_Dt =  digitalRead(pinDt);   
  era_SW = digitalRead(pinSW);    
  
}

void loop() {
  
  int ora_Clk = digitalRead(pinClk);  
  int ora_Dt =  digitalRead(pinDt);   
  int ora_SW =  digitalRead(pinSW);   
     
  if (ora_Clk != era_Clk) {         
    
    if (ora_Dt == ora_Clk) {                     
      contatore --;                 
    } else {                                   
      contatore ++;                  
    }          
   Serial.println(contatore);
   delay(50);
   era_Clk = ora_Clk;                
   era_Dt = ora_Dt;                  
  }

  
}

Però anche così il problema rimane..

int?...

:slightly_smiling_face:

void setup() {
  
    Serial.begin(9600);
    lcd.init();
    Serial.println("prova seriale");
 
}

Con solo questo codice nel setup non vedi la scritta prova seriale nel serial monitor?

Ovviamente il serial monitor è configurato a 9600 baud.

Ciao.

Anche così non funziona. Se cancello lcd.init(); , stampa correttamente.
ciao , grazie.

Comincio ad aver paura ...ma non è (in soldoni) la stessa cosa che scrivere int_8 ?

:thinking:

Prova invece

void setup() {
  Serial.begin(9600);
  Serial.println("prima di init");
  lcd.init();
  Serial.println("dopo init");
}

Perché potrebbe inchiodarsi tutto Arduino e da init in poi è bloccato

Grazie , ho provato , a questo punto potrebbe essere un problema della scheda?

Per quanto riguarda digitalRead, può assumere solo due valori:

  • 0, stato logico basso, se non c'è tensione;
  • diverso da 0, stato logico alto, se ci sono 5V.

Quindi è binario ed è sufficiente un bool.

Nota: gli stati logici sono da sempre chiamati 0 e 1, basso e alto, falso e vero, LOW e HIGH, false e true. Mentre lo stato logico basso è sempre rappresentato con il valore numerico 0, lo stato logico alto può essere rappresentato con 1, ma anche con 255 (tutti gli 8 bit di un byte) o qualunque altro valore diverso da 0. In Arduino viene definito uguale a 1 ma, almeno in teoria, un giorno potrebbe essere cambiato.

1 Like

Confermo problema sulla scheda. Sostituendola con un'altra non ci sono più problemi. Grazie a tutti.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.