LCD display loopt raar

Arduino specifieke Software
Berichten: 21
Geregistreerd: 23 Jan 2013, 10:59

LCD display loopt raar

Berichtdoor patrickwit » 24 Apr 2013, 14:10

Op arduino kom ik veel van LCD tegen maar dat word allemaal in de void setup gezet.
dit is eenmalig, maar ik wil tekst laten zien aan de hand van bepaalde status die aanwezig is.

dit wil ik dan in de void loop
Code: Alles selecteren
inputclock1 = digitalRead(inputclock1);
  if (inputclock1 == HIGH){
    lcd.begin(16, 2);
    lcd.print("Clock1 aanwezig");
  }
  else if (inputclock1 == LOW){ 
    lcd.begin(16, 2);
    lcd.print("Clock1 defect");

  }}


alleen niet schrijft hij volgens mij steeds de tekst omdat hij de loopt steeds herhaald hoe op te lossen??

Advertisement

Berichten: 9
Geregistreerd: 20 Feb 2013, 20:43

Re: LCD display loopt raar

Berichtdoor ON5MF » 24 Apr 2013, 15:40

in
Code: Alles selecteren
inputclock1 = digitalRead(inputclock1);
gebruik je 2x 'inputclock1'? Denk niet dat dit lukt. Die in digitalRead() zal een pin nummer zijn vermoed ik.

Als je die code maar 1x wil gebruiken dan kan je hem in
Code: Alles selecteren
void setup()
zetten
huidig Arduino project: universele banddecoder om volautomatisch antennes en bandpasfilters te schakelen

Berichten: 27
Geregistreerd: 23 Feb 2013, 12:07

Re: LCD display loopt raar

Berichtdoor walker » 25 Apr 2013, 19:31

Om het LCD te updaten als bijv. een ingang veranderd moet je dus de verandering detecteren. In jou geval kun je dit doen door de toestand van de ingang op te slaan.

Voorbeeld:
Code: Alles selecteren
const int pinclock1 = 2;

int prevInputState = 0;
int inputclock1 = 0;

void setup() {
  UpdateDisplay(digitalRead(pinclock1));
}

void loop() {
  inputclock1 = digitalRead(pinclock1);
  if (inputclock1 != prevInputState) {
    UpdateDisplay(inputclock1);
  }
}

void UpdateDisplay(int state) {
    lcd.begin(16, 2);

    if (HIGH == state) {
      lcd.print("Clock1 aanwezig");
    } else {
      lcd.print("Clock1 defect");   
    }
 
    prevInputState = state;
}

In de setup wordt de display data de eerste keer gezet afhankelijk van de ingangs waarde en de prevInputState aan de ingangs waarde gelijk gemaakt.
In de loop functie wordt het display alleen geupdate als de ingang veranderd is.

Overigens ik heb deze code niet kunnen testen.

Om het probleem met dubbel gebruik van een variabele te voorkomen kun je in dit geval van de inputclock1 de input pin variabele een const maken.
Als het pin nummer niet tijdens runtime ver anderd kun er beter een const van maken dit heeft 2 voordelen:
1) de waarde kan niet perongeluk veranderd worden
2) de const heeft geen RAM geheugen van de Arduino nodig omdat de const door de compiler vervangen wordt door de betreffende waarde.

Nog een tip:
Om vervelend debuggen te voorkomen is het goed om in een "if" eerst de constante te zetten en dan achter de == de variabele. Wordt nu i.p.v. == maar 1 = gebruikt dan ontstaat er een compiler error. Het is vaak tijd rovend om dit probleem te vinden want if (state = 1) is altijd waar dus de code in de if blok wordt dan altijd uitgevoerd.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: osizejamow en 29 gasten