Hallo zusammen!
vorneweg, ich bin neu hier im Forum, habe aber Kenntnisse bei meinem Arduino.
Mein Projekt gestaltet sich wie folgt:
- Taster abfragen -> 1 bzw 0 in Variable schreiben
- Variablen der Reihe nach am LCD ausgeben
- wieder von vorne
An sich trivial, jedoch habe ich folgendes Problem:
Es funktioniert eine Zeit lang - 1 bis 30 Sekunden - dann ändern sich alle Variablenwerte ohne
mein Eingreifen auf 0. Was mir aufgefallen ist, ist, dass mein LCD für einen kleinen Moment aus bleibt.
Sind wieder alle Werte auf 0, funktionierts wieder ein paar Sekunden, und das gleiche Problem wieder
von vorne
Nachfolgend mein Code:
#include <Wire.h>
#include <LiquidCrystal.h>
#define BACKLIGHT_PIN 7
#define WARTEN 250 // hier das Timing noch anpassen
#define WARTENKURZ 100
// ab hier wird dann alles initialisiert
LiquidCrystal lcd(12, 11, 5, 4, 3, 2, BACKLIGHT_PIN, POSITIVE );
int Taster1 = 6;
int Taster2 = 7;
int Taster3 = 13;
// die nächsten drei dienen dem Shiftregister für die LEDs
int taktPin = 8;
int speicherPin = 9;
int datenPin = 10;
// die hier sollen mal die Werte von den Tastern weiter geben, wenn es endlich mal geht.
// wenn das hier mal bestellt wurde, schauen, ob das auch geht, also, dass man die 8 LEDs
// ansteuert: http://www.amazon.de/dp/B00LLW7D1K/ref=wl_it_dp_o_pC_S_ttl?_encoding=UTF8&colid=3RMBWOI8HD619&coliid=I1VL4S168OWU1P
// schaut an sich aber so aus, als dass ich dennoch meine 8 digitalen Eingänge verbrate. Veilleicht doch bei den urpsr. Tastern bleiben?
int a; // a wird als erste Variable festgesetzt für die Tasterbetätigung an 1
int b; // b wird als zweite Variable festgesetzt für die Tasterbetätigung an 2
int c; // c wird als dritte Variable festgesetzt für die Tasterbetätigung an 3
//int d = 1; // die nächsten derweil noch als 1 festgesetzt - beizeiten mit dem Shiftregister erfassen
//int e = 1;
//int f = 1;
//int g = 1;
//int h = 1;
//int Array[] = {a,b,c,d,e,f,g,h};
// hier wird dann das Setup gemacht
void setup()
{
Serial.begin ( 9600 );
lcd.backlight();
lcd.begin(16,2); //16x2er LCD
pinMode(Taster1, INPUT); //setzt den ersten Taster als INPUT fest
pinMode(Taster2, INPUT); //setzt den zweiten Taster als INPUT fest
pinMode(Taster3, INPUT); //setzt den dritten Taster als INPUT fest
pinMode(taktPin, OUTPUT); // die drei sind dann fürs Shiftregister
pinMode(speicherPin, OUTPUT);
pinMode(datenPin, OUTPUT);
}
// hier steht dann die ganze Schleife, die dauernd läuft
void loop()
{
// ab hier werden die Taster abgefragt und die LEDs angesprochen
if (digitalRead(Taster1) == HIGH)
{
a==0?a=1:a=0; // wenn Taster gedrückt wurde, wirds HIGH geschrieben; ists schon HIGH, wirds LOW geschrieben
delay(WARTENKURZ);
}
delay(WARTEN);
if (digitalRead(Taster2) == HIGH)
{
b==0?b=1:b=0;
delay(WARTENKURZ);
}
delay(WARTEN);
if (digitalRead(Taster3) == HIGH)
{
c==0?c=1:c=0;
delay(WARTENKURZ);
}
delay(WARTEN);
// ab hier steht das Schieberegister
//lcd.clear(); // LCD leeren
lcd.home(); // Heimatposition
lcd.print(a); // die drei Variablen schreiben
lcd.print(b);
lcd.print(c);
delay(WARTEN);
//lcd.print(d);
//delay(WARTEN);
//lcd.print(e);
//delay(WARTEN);
//lcd.print(f);
//delay(WARTEN);
//lcd.print(g);
//delay(WARTEN);
//lcd.print(h);
//delay(WARTEN);
// digitalWrite(speicherPin, LOW);
// shiftOut(datenPin, taktPin, MSBFIRST, Array); // hier ist noch ein Fehler
// digitalWrite(speicherPin, HIGH);
// delay(20);
}
Ich hoffe, mir kann wer weiter helfen!
P.S.: LEDs und Schieberegister hab ich der Übersichtlichkeit wegen raus geworfen.
Liebe Grüße & schönen Montag,
Michi