Hallo, wie dem Betreff bereits zu entnehmen ist bin ich absoluter Mikrocontroller Anfänger und wollte mich anfangs daran machen mit dem Arduino Leonardo eine Tastatur zu simulieren. Habe dazu auch schon Beispiele gefunden aber die waren immer nur mit 1 Taster. Die Art wie das ganze funktionieren soll ist folgende: 3 Taster. Wenn Taster 1 und Taster 2 gedrückt = Tastendruck X Wenn Taster 3 und Taster 2 gedrückt = Tastendruck Y Wie müsste ich das aufbauen/anschließen und coden (wobei das Coding noch das geringste Problem ist)? Hoffe hier findet sich jemand der mir da helfen würde. MfG
Mario schrieb: > Wie müsste ich das aufbauen/anschließen und coden (wobei das > Coding noch das geringste Problem ist)? Das glaub ich nicht. Denn 3 Taster werden genauso angeschlossen wie 1 Taster. Nur eben 3 mal. Tatsächlich ist das Coding dein Problem. Aber das hilft nicht. Da musst du durch. Wenn du 1 Taster abfragen kannst, dann kannst du auch 3 Taster abfragen. Das Prinzip ist ja für jeden Taster gleich. Mit den Ergebnissen der 3 Tasterabfragen machst du dann deine Logik. Zb. indem du Dinge tust, wenn genau 2 davon gedrückt sind.
> eine Tastatur zu simulieren Was meinst du damit? Willst due den Arduiono an einen PC anschließen so das der PC "denkt" es sei eine Tastatur angeschlossen worden? Falls ja: Schlag Dir das mal ganz schnell wieder aus dem Kopf. Die Programmierung von USB Protokollen ist sehr kompliziert. Für solche Anwendungsfälle gibt es fertig programmierte Mikrocontroller, die man mit einem Setup-Tool konfigurieren kann. Das Stichwort dazu ist HID. Lesestoff dazu: http://www.lvr.com/hidpage.htm Fertige Module: http://www.codemercs.de/index.php?id=37&L=0
Mario schrieb: > Wenn Taster 1 und Taster 2 gedrückt = Tastendruck X > Wenn Taster 3 und Taster 2 gedrückt = Tastendruck Y Diese Schaltung ist sehr einfach. Welchen Controller hast du denn und in welcher Sprache möchtest du das machen.
:
Bearbeitet durch User
Basti Himmi schrieb: > Diese Schaltung ist sehr einfach. > > Welchen Controller hast du denn und in welcher Sprache möchtest du das > machen. Also, ich arbeite mit dem Arduino Leonardo und würde das ganze gerne in C umsetzen. Wenns sein müsste würde auch Assembler gehen aber C wäre mir lieber.
Du hast noch nicht beantwortet, was du genau vor hast. Soll der PC die Tastendrücke erkennen oder soll der Text "Tastendruck X/Y" per UART an den PC gesendet werden oder auf einem LCD ausgegeben werden oder..... ?
Zusätzlich zum Verwendungszweck wäre Entscheidend für den code den ich dir geben kann auch noch ob du den Arduino playground verwendest oder die arduino libraries ?
Stefanus schrieb: > Falls ja: Schlag Dir das mal ganz schnell wieder aus dem Kopf. Die > Programmierung von USB Protokollen ist sehr kompliziert. Für solche > Anwendungsfälle gibt es fertig programmierte Mikrocontroller, die man > mit einem Setup-Tool konfigurieren kann. Das Stichwort dazu ist HID. Schau Dir mal VUSB an. Grad HID ist sogar für die kleinsten AVR machbar.
Oliver R. schrieb: > Stefanus schrieb: >> Falls ja: Schlag Dir das mal ganz schnell wieder aus dem Kopf. Die >> Programmierung von USB Protokollen ist sehr kompliziert. Für solche >> Anwendungsfälle gibt es fertig programmierte Mikrocontroller, die man >> mit einem Setup-Tool konfigurieren kann. Das Stichwort dazu ist HID. > > Schau Dir mal VUSB an. Grad HID ist sogar für die kleinsten AVR machbar. Bitte, bitte, bitte. Passe deine Antworten an den Kentnissstand des Fragestellers an! Wer Hilfe braucht um 3 Taster an einen Arduino anzuschliessen, den kannst du doch nicht in VUSB reinschicken!
Ich empfehle ein Buch zu kaufen, z.B. "Arduino für Einsteiger", dort die Beispiele durchzuspielen und dann nach eigenen Vorstellungen abzuwandeln. So habe ich es jedenfalls gemacht. Wenn Du es aber schon geschafft hast, einen Taster abzufragen, dann ist es doch gar nicht mehr schwer: Der Prozessor arbeitet alles nacheinander ab, Du musst also drei Abfragen machen, und sie miteinander logisch verknüpfen (if... then...) Falls Du bereits Grundkenntnisse in C hast, dann versuche sie anzuwenden... Die drei Taster werden mit dem einen Pol parallelgeschaltet und an + gelegt, möglichst mit Vorwiderstand, der andere Pol geht jeweils an einen anderen Eingangsport. (Diese muss man festlegen, also "programmieren").
:
Bearbeitet durch User
DH1AKF K. schrieb: > Die drei Taster werden mit dem einen Pol parallelgeschaltet und an + > gelegt, genau anders rum. die 3 Taster werden jeweils an einen Pin vom Arduino angeschlossen und der andere Pin führt jeweils an Masse. Dann braucht man weder Vorwiderstand noch Pulldown-Widerstand sondern lediglich einen Pullup-Widerstand und der ist im AVR bereits eingebaut und muss lediglich freigeschaltet werden.
Bei den Atmels und auch vielen anderen Prozessoren, ist es am Einfachsten, die eingebauten Pull-Up Widerstände zu aktivieren. Diese bewirken, das der betreffende Eingang auf log. High (1) gebracht wird. Genau so als ob Du einen Widerstand von der positiven Betriebsspannung an den Anschluss legst. Schließt Du nun Deinen Taster an den Eingang und die Masseleitung an, so kannst Du durch Betätigung des Tasters den Eingang auf log. Low (0) bringen. Zur Auswertung müsstest Du Dich mal mit bool’scher Algebra beschäftigen. Da geht es darum die Zustände log. Low (0) und log. High (1) mittels AND, OR oder XOR (und andere) miteinander zu verknüpfen. Diese Funktionen sind auch im normalen "C" enthalten.
Amateur schrieb: > Zur Auswertung müsstest Du Dich mal mit bool’scher Algebra beschäftigen. > Da geht es darum die Zustände log. Low (0) und log. High (1) mittels > AND, OR oder XOR (und andere) miteinander zu verknüpfen. Diese > Funktionen sind auch im normalen "C" enthalten. Wobei man aufpassen muss wenn man Arduino-Code mit normalen C mischt. Ein
1 | if (((buttonState1)&& (buttonState2)) == LOW) |
funktioniert nicht, egal wie man Klammert. Es muss so lauten
1 | if (buttonState1 == LOW && buttonState2 == LOW) |
Hubert G. schrieb: > if (((buttonState1)&& (buttonState2)) == LOW) funktioniert nicht, egal > wie man Klammert. > Es muss so lautenif (buttonState1 == LOW && buttonState2 == LOW) Das hat mit Klammerung auch nichts am Hut, beide Ausdrücke machen was vollkommen anderes. Man könnte aber schreiben:
1 | if (((buttonState1) || (buttonState2)) == LOW) |
man könnte das LOW bzw. HIGH auch ganz einfach weglassen und die übliche C Variante benutzen, wonach eine 0 als logisch falsch gewertet wird und alles andere logisch true. LOW und HIGH sind nichts anderes als #define auf jeweils 0 und 1.
1 | if( !buttonState1 && !buttonState2 ) |
oder
1 | if( !( buttonState1 || buttonState2 ) ) |
oder man könnte die Variablen auch gleich nach dem Einlesen umdrehen, oder ... Eben das ganz normale Repertoire, das man als C Programmierer zur Verfügung hat. ABer der springende Punkt ist: Tun muss man es! Und zwar selber! Es bringt nichts, sich ein Beispiel für 1 Taste zu suchen und dann nach einem Beispiel für 3 Tasten zu fragen. 1 Taste ist ok, damit man mal die grundsätzliche Vorgehensweise sieht. Aber ein paar Einzelbedingungen miteinander verknüpfen zu können (mit allen Fallen die es dabei geben kann), das muss man lernen. Und zwar indem man es einfach tut.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.