Puh. Da ist jede Menge los in deinem Code. Das ist nicht so einfach
nachzuvollziehen.
Wenn ich einen Vorschlag machen darf.
Du hast offenbar eine 7-Segment Anzeige, die du für Ausgabezwecke
benutzen kannst. Schreib dir da Routinen, mit denen du einen beliebigen
Zahlenwert ausgeben kannst.
Und dann legst du erst mal fast deinen ganzen Code still und lässt dir
nur die Werte von einem ADC ausgeben
1 | while(1)
|
2 | {
|
3 | cap_button();
|
4 |
|
5 | adc0 = ADC_Read (0);
|
6 | adc1 = ADC_Read (1);
|
7 | adc2 = ADC_Read (2);
|
8 |
|
9 | output_value( adc0 ); // Wert auf der 7_Segment ausgeben
|
10 | }
|
damit solltest du erst mal einen Einblick bekommen, welche Werte du vom
ADC bekommst. Wenn die vom Kanal 0 gut aussehen, dann siehst du dir die
vom adc1 an und weiters dann die vom adc2. Jeweils auch probieren ob
sich die Werte so ändern, wie du denkst dass sich die ändern sollten.
Sehen die Werte gut aus, dann fängst du an, deine Logik nach und nach
wieder zu aktivieren, wobei du die 7-Segment anzeige benutzt um zu
kontrollieren, was im Programm passiert. Die Anzeige ist dein Fenster in
das Programm. Benutze es!
So wie das im Moment aussieht hast du da eine Menge anscheinend
ungetesteten Code. Da drinn ohne Debugger Fehler zu suchen ist mühsam.
Fang vorne an, kontrolliere die Werte vom ADC und dann debuggst du dich
mit der 7-Segment Anzeige langsam vor. Schrittweise arbeiten heisst die
Devise. Haufenweise ungetesteten Code zu produzieren, bringt nur eines:
du stehst mit einem Haufen Code da, nichts funktioniert und niemand
weiss, wo man mit der Fehlersuche anfangen soll.