INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Kompiler beschwert sich nicht, LC-Display macht aber nicht, was es soll.
26.01.2021, 10:43
Beitrag #1
Kompiler beschwert sich nicht, LC-Display macht aber nicht, was es soll.
Guten Tag,

ich habe eine Schaltung gebaut, bei welcher man 4 verschiedene Taster hat (T1, T2, T3 und Reset). Drückt man die Taster 1 bis 3 bzw. auch T1 und T2 gleichzeitig um so und so viele male, so soll das LC-Display ein Passwort anzeigen. Drückt man den Reset-Taster, so sollen sich die Werte der Taster zurücksetzen, man muss den Code also neu eingeben. Das Problem ist nun aber, dass das LC-Display zwar anzeigt, wenn die Tasterwerte zurückgesetzt werden, das Passwort jedoch, auch bei richtiger Betätigung der Taster nicht angezeigt wird. Ich habe noch nicht viel Erfahrung mit Arduino, also habe ich keine sonderlich komplexen Funktionen benutzt. Ich füge den Programmcode anbei an, damit man besser nachvollziehen kann, was ich meine. Vielleicht fällt einem von euch ja auf, woran das liegen könnte. Danke für jede Hilfe.

[
Code:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int taster1 = 7;
int taster2 = 0;
int taster3 = 1;
int reset = 8;
int taster1wert = 0;
int taster2wert = 0;
int taster3wert = 0;
void setup() {
  int taster1wert = 0;
  int taster2wert = 0;
  int taster3wert = 0;
  lcd.begin(16, 2);
  lcd.print("Bitte entsperren");
  pinMode(taster1, INPUT);
  pinMode(taster2, INPUT);
  pinMode(taster3, INPUT);
  pinMode(reset, INPUT);
}

void loop() {
  while (taster1wert != 1) {
    if (digitalRead(reset) == LOW) {
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Werte");
      lcd.setCursor(0, 1);
      lcd.print("zurueckgesetzt");
    }
    if (digitalRead(taster1) == LOW) {
      int taster1wert = taster1wert + 1;
      int taster2wert = taster2wert - 1;
      delay(50);
    }
    if (digitalRead(taster2) == LOW) {
      int taster2wert = taster2wert + 1;
      delay(50);
    }
    if (digitalRead(taster3) == LOW) {
      int taster3wert = taster3wert + 2;
      delay(50);
    }
    if (digitalRead(taster1) == LOW && digitalRead(taster2) == LOW) {
      int taster3wert = taster3wert + 1;
      delay(50);
    }
    if (taster1wert == 4 && taster2wert == -1 && taster3wert == 5)  { //Wenn alle Bedingungen erfüllt sind, also jeder Taster, bzw einmal zwei gleichzeitig, bestimmt oft gedrückt wurden,
      lcd.clear();                                               // wird das Passwort angezeigt. Man muss also einmal T2+T3, viermal T1, zweimal T3 und dreimal T2 drücken. Ist man bei nur einem
      lcd.setCursor(0, 0);                                       // Schalter darüber, so muss man mit dem Reset-Taster alles zurücksetzen.
      lcd.print("Passwort lautet:");
      lcd.setCursor(0, 1);
      lcd.print("0123456");                            // Hinweis: Der Kompiler beschwert sich bei diesem Code nicht, jedoch wird, im echten Gebrauch, das Passwort nicht angezeigt.
    }
}
}
[/code]]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.01.2021, 11:30
Beitrag #2
RE: Kompiler beschwert sich nicht, LC-Display macht aber nicht, was es soll.
Sorry, aber deine Beschreibung, wie dein Sketch funktionieren soll, verstehe ich nicht.
Wenn du es mal tabellarisch auflistest, wird es wohl verständlicher.

Auffällig ist, dass du Pin D0 und D1 für deine Taster wählst. das solltest du besser nicht machen, da diese Pins für den USB-Wandler reserviert sind und der evtl. dann Problem macht.
Hast du an den tastern Pullup-Widerstände dran ?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.01.2021, 11:58
Beitrag #3
RE: Kompiler beschwert sich nicht, LC-Display macht aber nicht, was es soll.
(26.01.2021 11:30)hotsystems schrieb:  Sorry, aber deine Beschreibung, wie dein Sketch funktionieren soll, verstehe ich nicht.
Wenn du es mal tabellarisch auflistest, wird es wohl verständlicher.

Auffällig ist, dass du Pin D0 und D1 für deine Taster wählst. das solltest du besser nicht machen, da diese Pins für den USB-Wandler reserviert sind und der evtl. dann Problem macht.
Hast du an den tastern Pullup-Widerstände dran ?

An den Tastern sind 100k Ohm-Pull-Up-Widerstände.
Zur Beschreibung:

Drückt man z.B Taster 1, so wird der Variable taster1wert +1 hinzugefügt. Am Anfang hat die Variable den Wert 0. Wenn man also, meiner Vorstellung nach, den Taster 1 beispielsweise 3-mal drückt, hat die Variable taster1wert den Wert 3.

1. Drücken von Taster 1: taster1wert=0+1=1.
2. Drücken von Taster 2: taster1wert=1+1=2.

So ähnlich verhält es sich ja auch mit den Tastern 2 und 3 (bei Taster 3 wird der Variable taster3wert jedoch pro Drücken nicht +1 sondern +2 hinzugefügt).

Ziel soll es sein, dass, wenn die Variablen taser1wert, taster2wert und taster3wert
jeweils einen bestimmten Wert haben, also so und so viel mal gedrückt wurden, das Passwort angezeigt wird.
Hoffe, das war etwas besser ausgedrückt.

Ich benutze mal andere Pins für die Taster.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.01.2021, 14:11 (Dieser Beitrag wurde zuletzt bearbeitet: 26.01.2021 14:17 von MicroBahner.)
Beitrag #4
RE: Kompiler beschwert sich nicht, LC-Display macht aber nicht, was es soll.
Dein Sketch enthält ein paar grundsätzliche Feher, weshalb er nicht funktionieren kann. Dass sich der Kompiler nicht beschwert, sagt nichts. Zwischen 'Kompiler ist zufrieden' und 'Programmierer ist zufrieden' liegt oft ein weiter Weg ...
Du solltest auch mal die Warnung in 'Voreinstellungen' mindestens auf 'weitere' einstellen. Dann macht dich der Kompiler auf Dinge aufmerksam, die zwar syntaktisch richtig sind, aber eher keinen Sinn machen ( und häufig semantische Fehler sind ). z.B. diese Zeile(n):
Code:
int taster1wert = taster1wert + 1;
Da muss das int weg, sonst erzeugst Du innerhalb des if Blockes eine neue Variable, die am Ende des Blockes wieder weggeworfen wird. Das machst Du an vielen Stelle falsch, auch auf im Setup:
Code:
warning: unused variable 'taster1wert' [-Wunused-variable]
   int taster1wert = 0;
       ^~~~~~~~~~~
N.B. Wenn Du die Variable beim Anlegen bereits initiiert hast, musst Du das im setup() nicht nochmal machen.

Des weitern musst Du bei den Tastern die Flanke auswerten ( den Moment des Drückesn ). So wie es jetzt ist wird die Variable während des Drückens ständig hochgezählt - und der Arduino kann sehr schnell zählen.

Die while-Schleife macht auch keinen Sinn - loop() ist bereits eine Schleife - nutze sie!

Und kommentiere deine Programme aussagekräftig ( nicht die Syntax, sondern was eine Anweisung funktional bewirken soll ). Das macht es den Helfern einfacher, und auch dir, wenn Du deinen Code in ein paar Wochen nochmal anschaust.

Das man Pin 0 und 1 ( zumindest auf UNO/Nano/Mega) nicht nutzen sollte, hat dir Dieter ja schon geschrieben.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Poti wert in Minuten auf dem LCD Display ausgeben senseman 80 2.453 Gestern 23:24
Letzter Beitrag: senseman
  Es macht einfach keinen Spaß E.B. 8 346 14.05.2021 18:02
Letzter Beitrag: Chopp
  Konvertieren von Display Daten pe_martin 14 294 09.05.2021 15:54
Letzter Beitrag: pe_martin
  Bibliothek einbinden funktioniert nicht Maxcruiser 5 404 18.04.2021 21:31
Letzter Beitrag: Tommy56
  Nano. Sketch kann nicht hochgeladen werden 4heiner 4 487 02.04.2021 17:21
Letzter Beitrag: 4heiner
  Programm startet bei Neustart nicht Moritzzz 18 1.063 02.04.2021 14:06
Letzter Beitrag: Tommy56
  Laserwert auf OLED Display ausgeben Blauepi 18 1.205 22.03.2021 14:00
Letzter Beitrag: Blauepi
  Arduino Ampelschaltung Taster funktioniert nicht fatihakan36 9 890 13.03.2021 22:06
Letzter Beitrag: N1d45
  TFT-LCD-Display (Extension) phg 3 608 13.03.2021 19:26
Letzter Beitrag: Tommy56
  Library Ethernet: Nicht zu compilieren GuaAck 5 559 22.02.2021 17:31
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste