Arduino Variable auf LCD

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Ungetestet und ausm Kopf:

#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 10, 7, 6, 5, 4);

int zahl = 0;
int input_eins = 2;
int schalterzustand_eins_alt = 0;

void setup()
{
    pinMode(input_eins, INPUT);
    lcd.begin(16, 2);
    lcd.print("Hallo Welt");
}

void loop()
{
    lcd.setCursor(0, 1);

    int schalterzustand_eins = digitalRead(inputeins);

    if (schalterzustand_eins_alt == 0 && schalterzustand_eins == 1)
    {
        ++zahl;
        lcd.print(zahl);
    }

    schalterzustand_eins_alt = schalterzustand_eins;
}
Schlauberger303  11.10.2013, 19:05

Logik bzgl Tasterverhalten stimmt. Aber du hast mich neugierig gemacht, wie Manches in Arduino gelöst ist.

1) Programmiert man in Arduino tatsächlich objektorientiert (wegen lcd). Oder ist das irgen ein Kunstgriff.

2) Fehlt da nicht die Main, die erst Setup() und dann meinetwegen in einer while(1)-Schleife loop() aufruft? Oder ist das anders gelöst?

0
BlaBlub12389  11.10.2013, 19:43
@Schlauberger303

Also beim Arduino hast du loop und setup automatisch. Ich nehme an, dass auf dem Arduino ein sehr abgespecktes OS oder eine Runtime ist, die diese beiden Funktionen aus einer main-Funktion aufruft. Es gibt also keine main. Es ist halt kein normales C und kein normaler Compiler.

Man kann in C++ Bilbiotheken schreiben (sind nur Header und CPP-Dateien, also keine lib oder dll). Daher sind Klassen möglich. Im Arduino-Editor nutzt man dann solche Bibliotheken, aber ich glaub man kann da keine Klassen dann direkt anlegen. Also schon eine Art Kunstgriff. Benutzen kann man Instanzen von Klassen aber wie du siehst.

1
BlaBlub12389  11.10.2013, 20:14
@BlaBlub12389

loop wird automatisch zyklisch aufgerufen. Die Logik drumrum übernimmt wie gesagt eine Runtime oder ähnliches.

0
wackel13 
Fragesteller
 12.10.2013, 07:55

danke für deine schnelle Antwort der Code hatte noch kleine fehler wie mal ein _ vergessen aber trotzdem großen dank den es funktioniert ;)

0

Hi, ich habe das programm noch bisschen weiter gesponnen. Ich habe 2 weiter knöpfe Hinzugefügt die die variable zahl um eins veringern oder auf 0 setzen.

Mein Problem ist jetzt dadurch das der Cursor (lcd.setCursor) am anfang des void loops immer wieder an anfang der zeile gesetzt wird kommt das Display bei übergang in eine andere größe der zahl (von einer auf zehner auf hunderter und anders herrum ) durcheinander.

zb.: die zahl beträgt 10 also steht 10 auf dem lcd ziehe ich jetzt 1 ab beträgt die zahl 9 der cursor macht an anfang der zeile und schreibt die zahl 9 über die 1 und die 0 bleibt so das jetzt 90 auf dem lcd zu sehen ist

FRAGE: Wie bekomm ich das weg???

Kenne die Arduino-Libs nicht aber ich schätze

schalterzustandeins = digitalRead(inputeins);
if (schalterzustand_eins == 1) { zahl= 1+1; } lcd.print(zahl); }

müsste wohl eher

schalterzustand_eins = digitalRead(inputeins);
if (schalterzustand_eins == 1) { zahl+=1; } lcd.print(zahl); }

lauten

BlaBlub12389  11.10.2013, 18:46

Soweit ich das überblicke ist das aber auch noch nicht alles, da der dann hochzählt solange man den Schalter gedrückt hat. Man müsste eine Art Flanke abfragen. Also nur wenn schalterzustand_eins vorher 0 war und nun 1 ist, dann hochzählen.

0
BlaBlub12389  11.10.2013, 18:53
@Schlauberger303

digitalRead ist ne Standardfunktion von Arduino. Sie liest einen digitalen Wert vom Eingang. Da inputeins gleich 2 ist, liest er von Eingangspin 2.

Also quasi die Schalterstellung (Schalter wird an Pin 2 dran sein nehm ich an).

0