Wir dürfen nur auf EINE Flanke reagieren, sonst geht das schief.
Entweder nur auf die Aufsteigende oder nur die Fallende Flanke.
Da die Pins über Pullupwiderstände an Plus liegen, würde ich die fallende Flanke auswerten,
also wenn der Pin A von High nach Low geht.
Ist der Pin A also auf High bedeutet dies Ruhezustand.
Wir benötigen noch ein Flag um den Zustand festzuhalten bzw. um festzuhalten ob wir die Flanke
schon ausgewertet haben, damit auch wirklich nur ein Puls ausgewertet wird.
Doch nun zum Code, den ich nicht testen kann, aber so in etwa sollte das gehen:
Code:
int Flag;
void ui()
{ if (digitalRead(A)==1) // wenn die Leitung High ist, haben wir die Ruhestellung
{
Flag=0; // Ruhestellung
return; // nix weiter machen
}
// hier kommen wir nun nur an, wenn der Pin A Low wird:
if (Flag == 1) return; // wenn das Flag schon gesetzt war, machen wir aber keine Auswertung mehr
Flag = 1; // ansonsten setzen wir nun das Flag und führen nur einmal die Auswertung von Pin B durch
if (digitalRead(B) volt+=0.05;
else volt-=0.05;
}
// Info: Das Flag wird jetzt erst wieder gelöscht, wenn die Datenleitung A auf High (also in den Ruhezustand) geht.
// Wichtig: Die Variable Flag muss GLOBAL sein, also ausserhalb der Funktion definiert werden.
Das ist nur mal zum Testen, ich hoffe das hilft Dir weiter.
Nanu, das Datenblatt hab ich eben erst gesehen, funktioniert der etwa anders.....
jetzt bin ich mir da nicht mehr sicher......
Lesezeichen