vielen vielen Dank werde das morgen gleich ausßprobieren
Das ist einfach:Aber ich weiß nicht wie man festelt welche taste gedrückt ist ich hab zwischen jeder taste einen 10 k wiederstand eingefügt.
Du gibst den Wert von keys für jede der gedrückten Tasten aus.
Angenommen, eine Taste gibt den Wert 230 aus, die nächste 400 und die folgende 570.
Dann errechnest du den Mittelwert zwischen den 3 Tasten, also 315 und 485.
Die Tasten kann man dann mit einer If-Abfrage feststellen:
If (keys < 315) "Taste 1 gedrückt"
If ((keys > 315) && (keys < 485)) "Taste 2 gedrückt"
If ((keys > 485) && (keys < 1000)) "Taste 3 gedrückt"
Gruß Dirk
vielen vielen Dank werde das morgen gleich ausßprobieren
Bei mir ist aber der wert viel geringer woran kann das liegen ?
zb. Bei taster 1 ungedrückt ist der wert 255 und gedrückt ist der wert 5.
So sieht mein programmcode aus jetzt mal nur für den taster 1.
Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); writeString_P("\n\n _______________________\n"); writeString_P(" \\| RP6 ROBOT SYSTEM |/\n"); writeString_P(" \\_-_-_-_-_-_-_-_-_-_/\n\n"); uint8_t keys; uint8_t counter; uint8_t counter1; setLEDs(0b111111); mSleep(1000); setLEDs(0b000000); mSleep(500); keys = readADC(ADC_ADC0); counter = keys; writeInteger(counter, DEC); writeString_P("\n\n"); while(true) { keys = readADC(ADC_ADC0); if (keys == 5) { counter1 = keys; writeInteger(counter1, DEC); setLEDs(0b11111); mSleep(1000); setLEDs(0b000000); } } return 0; }
in der simulation mit yenka gibt deine schaltung aus:
5;2,5;1,67;1,25 und 1volt.
Sind den alle Widerstände richtig?
wenn ja liegt der Fehler im Programm.
Mit hochohmigen Grüßen
Virus
Es lebe der Digitalkäse !
Also bei folgenden Programmcode ist die ausgabe von taster 1 immer wieder was anderse 0 - 76 meistens 0 oder 5.
taster 2 hat immer den wert 228 oder 229.
wo könnte ich den fehler bei taster 1 gemacht haben.
Code:#include "RP6RobotBaseLib.h" int main(void) { initRobotBase(); writeString_P("\n\n _______________________\n"); writeString_P(" \\| RP6 ROBOT SYSTEM |/\n"); writeString_P(" \\_-_-_-_-_-_-_-_-_-_/\n\n"); uint8_t keys; uint8_t counter; uint8_t counter1; uint8_t counter3; setLEDs(0b111111); mSleep(1000); setLEDs(0b000000); mSleep(500); keys = readADC(ADC_ADC0); counter = keys; writeInteger(counter, DEC); writeString_P("\n\n"); while(true) { keys = readADC(ADC_ADC0); if (keys < 100) { counter1 = keys; writeString("Taste 1: \n"); writeInteger(counter1, DEC); } if (keys == 229 || keys == 228) { counter3 = keys; writeString("Taste 2: \n"); writeInteger(counter3, DEC); } } return 0; }
Wie viele taster könte ich eigentlich maximal an einen adc port anschließen wenn ich zwischen jeden taster einen 10k wiederstand habe.
... eine Idee wäre zum Beispiel ja auch eine Matrixtastatur.
Man könnte dann auf einer Erweiterungsplatine z.B. 16 Taster unterbringen und diese mit "nur" einem 8poligen Stecker ansteuern.
Mit Metallfilmwiderständen habe ich 16 Taster geschafft:Wie viele taster könte ich eigentlich maximal an einen adc port anschließen ...
https://www.roboternetz.de/phpBB2/viewtopic.php?t=34732
(Siehe mein Beitrag vom 14.10.2007, 20:30)
In dem Beitrag wird auch die Alternative, eine Matrixtastatur beschrieben.
Gruß Dirk
Ich vermute mal, dass das Maximum der Taster in etwas bei 16 liegt. Bei noch mehr müssten ja die Widerstände dann noch viel genauer sein.
Stimmt das ?
Lesezeichen