Hallo,
ich habe hier ein Problem mit der Abfrage von Tastern. (Mega 2560)
Auf den EingangsPin´s 25, 26, 27 und 28 habe ich ein 1,6kHz Signal.
Es sieht verdächtig danach aus, als ob die Eingänge immer geschaltet
werden.
Wie kann ich das unterbinden?
Anschluss Taster: Masse-> R-> PinInput
Anschluss Taster gedrückt: Masse-> R-> PinInput-> Taster schaltet Plus an PinInput
Das Programm macht noch nichts besonderes. Es zeigt auf einem 4x20 Display
Datum und Zeit an. Wenn ein Taster gedrückt ist, dann gibt es eine StatusMeldung aus.
Gruß und Dank
Andreas
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <LiquidCrystal.h>
const int LED = 13; // LED an Pin x
const int S1 = 25; // Taster (S1..S4) an Pin x
const int S2 = 26;
const int S3 = 27;
const int S4 = 28;
tmElements_t tm;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
lcd.begin(20, 4);
pinMode(LED, OUTPUT); // Pin LED als Ausgang
pinMode(S1, INPUT); // Taster (S1..S4) als Eingang
pinMode(S2, INPUT);
pinMode(S3, INPUT);
pinMode(S4, INPUT);
}
void loop() {
{ int val = digitalRead(S1); // Taster lesen
if (val == HIGH) // ist Taster gedrückt
{
// #### Reaktion Taster S1 ###
digitalWrite(LED, HIGH); // wenn Taster gedrückt - LED ein
lcd.setCursor(7, 3); // Status-Meldung S1
lcd.print("S1-ein");
digitalWrite(LED, LOW); // Taster-Eingabe löschen
}
}
{ int val = digitalRead(S2); // Taster lesen
if (val == HIGH) // ist Taster gedrückt
{
// ### Reaktion Taster S2 ###
digitalWrite(LED, HIGH); // wenn Taster gedrückt - LED ein
lcd.setCursor(7, 3); // Status-Meldung S2
lcd.print("S2-ein");
digitalWrite(LED, LOW); // Taster-Eingabe löschen
}
}
{ int val = digitalRead(S3); // Taster lesen
if (val == HIGH) // ist Taster gedrückt
{
// ### Reaktion Taster S3 ###
digitalWrite(LED, HIGH); // wenn Taster gedrückt - LED ein
lcd.setCursor(7, 3); // Status-Meldung S3
lcd.print("S3-ein");
digitalWrite(LED, LOW); // Taster-Eingabe löschen
}
}
{ int val = digitalRead(S4); // Taster lesen
if (val == HIGH) // ist Taster gedrückt
{
// ### Reaktion Taster S4 ###
digitalWrite(LED, HIGH); // wenn Taster gedrückt - LED ein
lcd.setCursor(7, 3); // Status-Meldung S4
lcd.print("S4-ein");
digitalWrite(LED, LOW); // Taster-Eingabe löschen
}
// ### Zeit lesen ###
}
if (RTC.read(tm)) {
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(6, 1);
print2digits(tm.Hour);
lcd.write(':');
print2digits(tm.Minute);
lcd.write(':');
print2digits(tm.Second);
lcd.setCursor(5, 2);
lcd.print(tm.Day);
lcd.write('.');
lcd.print(tm.Month);
lcd.write('.');
lcd.print(tmYearToCalendar(tm.Year));
lcd.setCursor(1, 3);
lcd.print(" "); // Status-Meldungen löschen
} else {
lcd.setCursor(1, 3);
lcd.print("ChronoDOT - Fehler"); // Status-Meldung RTC oder BUS Fehler
}
}
void print2digits(int number) {
if (number >= 0 && number < 10) {
lcd.write('0');
}
lcd.print(number);
}