Pages: [1]   Go Down
Author Topic: problemi lcd  (Read 530 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
#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..
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

piacenza
Offline Offline
God Member
*****
Karma: 0
Posts: 673
prima della pazzia c'è la passione
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

stefano
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao
questo mi sembra un errore
Code:
const int buttonPin0=4;
Code:
pinMode(buttonPin0,INPUT);
il pin 4 serve al lcd
Code:
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..
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 328
Posts: 22747
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa ma:
Code:
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:
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 47
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa ma:
Code:
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:
  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...
Logged

Pages: [1]   Go Up
Jump to: