Go Down

Topic: problemi lcd (Read 652 times) previous topic - next topic

mattwolf

ciao ragazzi ho collegato un lcd affinchè mi visualizzasse i dati letti da un contatore di un progetto precedente seguendo passo passo lo schema nella sezione learning...
inizialmente tutto funziona ma giunto al valore di 3 lo schermo inizia a dare i numeri interrompendo il conteggio...
visualizzando in contemporanea la sequenza sul monitor seriale ho anche notato che quando il contatore scende mi salta dei numeriù8da 2 passa a 4)

allego lo sketch;

Code: [Select]
#include <LiquidCrystal.h>

const int buttonPin = 7;    // pulsante UP
const int buttonPin1= 6;    // pulsante DOWN
const int buttonPin0=4;
const int led1= 9;
const int led2 = 10;
const int led3= 11;
const int led4= 12;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int buttonPushCounter = 1;   // counter for the number of button presses
int buttonState = 0;         // stato di UP
int buttonState1 = 0;         //stato di DOWN
int buttonState0 = 0;
int lastButtonState = LOW;     // previous state of the button
int lastButtonState1= LOW;
int lastButtonstate0=LOW;

void setup() {
  pinMode(buttonPin, INPUT);
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin0,INPUT);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
Serial.begin(9600);
  lcd.begin(16, 2);

   

}
void loop() {

    //conteggio da 1 a 4 ciclico
  buttonState = digitalRead(buttonPin);
  buttonState1= digitalRead(buttonPin1);
  buttonState0= digitalRead(buttonPin0);

  delay(20); // debounce

  if (buttonState != lastButtonState) {
    if (buttonState == HIGH) {
      buttonPushCounter++ ;
       

      if (buttonPushCounter  >4) buttonPushCounter =1 ;
       Serial.println(buttonPushCounter);   
        lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(buttonPushCounter);

      LedOn(buttonPushCounter);
     
    }
   
  }
  lastButtonState = buttonState;

  //conteggio da 4 a 1 ciclico
  if (buttonState1 != lastButtonState1) {

    if (buttonState1 == HIGH) {
      buttonPushCounter-- ;
   
           if (buttonPushCounter<1) buttonPushCounter=4;
             Serial.println(buttonPushCounter);
                    lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(buttonPushCounter);
             
      LedOn(buttonPushCounter);
     
    }
   
  }
  lastButtonState1 = buttonState1;
 
 
  if(buttonState0 != lastButtonstate0){
  if(buttonState0==HIGH) {
    buttonPushCounter = 1;
    LedOn(buttonPushCounter);
  }
 
  lastButtonstate0=buttonState0;
}}

void LedOn (int numberled)
{
  // spegne led
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);

  // accende il led numero ...
  switch(numberled) {
  case 1:
    digitalWrite(led1, HIGH);
    break;
  case 2:
    digitalWrite(led2, HIGH);
    break;
  case 3:
    digitalWrite(led3, HIGH);
    break;
  case 4:
    digitalWrite(led4, HIGH);
    break;

    default:;
  }

}


eliminando i comandi dell'lcd va tutto alla perfezione..

mattwolf

ho anche notato che eliminando entrambi i LedOn(buttonPushCounter) l'lcd mostra perfettamente il conteggio...

mattwolf

possibile che abbia rovinato lo schermo collegando anche i pin db0,db1,db2,db3????

stefa24

ciao
questo mi sembra un errore
Code: [Select]
const int buttonPin0=4;
Code: [Select]
pinMode(buttonPin0,INPUT);
il pin 4 serve al lcd
Code: [Select]
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

stefano
https://sites.google.com/site/agritronica/
https://sites.google.com/site/t3chconcrete/
arduino UNO rev 3
ide 105

mattwolf


ciao
questo mi sembra un errore
Code: [Select]
const int buttonPin0=4;
Code: [Select]
pinMode(buttonPin0,INPUT);
il pin 4 serve al lcd
Code: [Select]
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

stefano

il problema non era quello..ha preso a funzionare regolarmente nel momento in cui o collegato i pin da db0 a db3 inserendo lcd.print nel void LedOn..ma,non mi scrive altro se non numeri..

leo72

Scusa ma:
Code: [Select]

const int led1= 9;
const int led2 = 10;
const int led3= 11;
const int led4= 12;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Non va bene. I pin 12 e 11 li condividi tra il display e la tua interfaccia a led.
Non puoi assegnarli alla libreria e poi farci sopra dele digitalWrite come vedo nel tuo codice:
Code: [Select]

  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);

mattwolf


Scusa ma:
Code: [Select]

const int led1= 9;
const int led2 = 10;
const int led3= 11;
const int led4= 12;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Non va bene. I pin 12 e 11 li condividi tra il display e la tua interfaccia a led.
Non puoi assegnarli alla libreria e poi farci sopra dele digitalWrite come vedo nel tuo codice:
Code: [Select]

  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);



si..quell'errore è gia stato corretto.aggiungendo gli altri 4pin dati sull'lcd sembra si sia sistemato ma quando inserisco il comando lcd.Print("valore contatore") i caratteri non vengono visualizzati correttamente...

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy