Ich bastele schon einige Zeit mit diversen Arduinos rum.
Doch jetzt zum ersten mal mit Display.
zur Zeit läuft auf einem ein etwas verändertet Wechselblinker.
Ich würde jedoch gerne ein SainSmart LCD Keypad Shield daran betreiben und über die Tasten die Laufzeit und die Pause verändern können.
Leider kann ich dazu nirgendwo etwas finden.
Mein Bisheriger Sketch:
// Laufzeit hier einstellen (ms)
int laufzeit = 3200;
int pause = 8000;
int links = 9;
int rechts = 10;
void setup() {
pinMode(links, OUTPUT);
pinMode(rechts, OUTPUT);
// Serial.begin(9600);
}
void loop() {
digitalWrite(links , HIGH);// schaltet links ein
delay(laufzeit); // Strom für x Sekunden (Millisekunden)
digitalWrite(links, LOW); // schaltet links aus
delay(pause); // pause für x sekunden
digitalWrite(rechts, HIGH); // schaltet rechts rechts ein
delay(laufzeit); // Strom für s Sekunden
digitalWrite(rechts, LOW); // schaltet die rechts aus
delay(pause); // pause für x Sekunde
}
Es wäre toll wenn mir da jemand helfen könnte .....
Hallo,
nimm erst einmal das delay() da raus. Mache das mit millis()
Was suchst Du denn? Das Shield, die Tasten oder eine Sketch zum hochzählen, wenn eine Taste gedrück wird?
So einen Sketch findest Du im Forum.
Gruß und Spaß
Andreas
Das ist mit etwas eigeninitiative lösbar. Mach es erst einmal so wie Skoby sagte. Danach lieste 2 Potis ein zum Einstellen der Zeiten. Wenn das klappt, kannst du dich an das Programm fürs Display machen. Im Endeffekt ist es recht trivial. Aber ohne die Grundkenntnisse von millis() wird dein Display dann flackern
Auf den Display gibst du deinen Zähler i aus. Mit je 2 Tasten erhöhst du den Wert um x. Fertig.
/* * Tastendrücke zählen */
int switchPin = 25; // Schalter ist mit Pin 25 verbunden
int val; // Variable für den Pin Zustand
int buttonState; // Variable für den letzten Schalterzustand
int buttonPresses = 0; // Wie oft ist der Schalter gedrückt
const int LED = 13;
//int zstS1=1;
void setup()
{
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
pinMode(switchPin, INPUT); // Schalter-Pin ist Input
Serial.begin(19200); // Start der seriellen Kommunikation mit 9600bps
buttonState = digitalRead(switchPin); // Anfangszustand lesen
}
void loop()
{
val = digitalRead(switchPin); // Eingabewert lesen und in val speichern
if (val != buttonState)
{ // Der Zustand des Schalters hat sich verändert
if (val == LOW)
{ // Ist der Schalter gedrückt?
buttonPresses++; // Inkrementieren der Variablen buttonPresses
Serial.print("Schalter wurde ");
Serial.print(buttonPresses);
Serial.println(" gedrueckt"); }
} buttonState = val; // Den Zustand merken
if (buttonPresses == 5)
{digitalWrite(LED, HIGH);}
if (buttonPresses == 10)
{digitalWrite(LED, LOW);}
}
mit einem zweiten Taster machst Du aus diesem (buttonPresses++; ) das, buttonPresses--;
oder
wenn zweiter Taster, dann "buttonPresses = buttonPresses - 1"
Gruß und Spaß
Andreas
Du kannst/musst dann noch Status-Variablen einführen und diese mit && verknüpfen, so dass die Abfrage nur gemacht wird, wenn der vorherige Zustand ausgeführt wurde. Wenn die Verzögerung dann vorbei ist und der Pin geschaltet wurde, in den nächsten Zustand wechseln.
lcd.clear() ist übrigens auch nicht so gut. Das dauert ziemliche lange und damit flackert oft das Display. Besser man überschreibt nur was sich tatsächlich ändert.
Zu Testzwecken habe ich an den einen Geschalteten Pin eine rote an den anderen eine grüne LED angebracht
Die laufzeit lässt sich einstellen ABER es schaltet nur die grüne ein für die dauer der laufzeit aber er hält die pause nicht ein und schaltet auch die rote LED nicht ein
digitalWrite(links, LOW); // schaltet links aus
if(currentMillis - previousMillis > pause) {
// save the last time you blinked the LED
previousMillis = currentMillis;
digitalWrite(rechts, HIGH); // schaltet rechts rechts ein
if(currentMillis - previousMillis > laufzeit) {
// save the last time you blinked the LED
previousMillis = currentMillis;
digitalWrite(rechts, LOW); // schaltet die rechts aus
if(currentMillis - previousMillis > pause) {
// save the last time you blinked the LED
previousMillis = currentMillis;