Was du gesagt ist stimmt. Aber man sollte doch erst die Spannung an Analog Pin 4 messen und im tmp speichern, und nur danach mit berechnen was den Taster Wert ist. Oder? Dein Programm berechnet nun mit den vorherigen Taster-spannung.
Zum Beispiel nur den wichtige Anderungen im readSwitches und den loop-Funktion. (Nicht getestet!)
Code:
...
//read front switches
int readSwitches()
{
pinMode(3, OUTPUT);
digitalWrite(3, HIGH);
tmp = analogRead(4); // Erst messen, dan Berechnen!
digitalWrite(3, LOW);
long taster = ((10240000L/tmp-10000L)*61L+5000L)/10000; // Pollswitch-Funktion Tasterauswerutng
return taster;
}
...
void loop()
{
readSwitches();
if (taster!=0) Serial.println(taster); // Wenn Taster nicht 0 ist, zur Rechner senden als ASCII
delay(100); //etwas verzögeren
}
Außerdem, bemerken das ein Taster gedruckt ist kann man eigentlich schon wen an INT/Pin3 als Digitale Eingang ein LOW gemessen wird. Dazu braucht man nicht den analoge Taster-wert jedesmal zu messen und berechnen. Den Tasterspannung wird schon durch R23 hoch gehalten bis ein eingedrukten Taster die Kondensator C7 entladet. Ein Interupt Routine ist sehr geeignet dafür wegen die Automatische Abhandlung, aber für Anfänger etwas complex. Oft die Pin-zustand abfragen sollte auch reichen. Wenn ein Taster-prellung bemerkt ist kannst du die Einzelne Tastern heraus finden lassen durch den Funktion readSwitches.
Lesezeichen