Bräuchte leichte Starthilfe. Ich möchte ein Array mit bestimmten Tastenkominationen fühlen und denen einen Buchstaben zu ordnen. Je nach Tastenkombination soll dann der Buchstabe über USART übersendet werden. Bitte keine schlauen Kommentaren von wegen Tutorial und Suchfunktion. Ich nutze das jedesmal und nehme mir hin und wieder einige Sachen dort zu Kenntniss. Eine kleine Starthilfe würde mir schon reichen und den Rest mache ich dann selber weiter. Benutze STK500 und ATMEGA16
@ Schueler (Gast) >Ich möchte ein Array mit bestimmten Tastenkominationen fühlen und denen >einen Buchstaben zu ordnen. >Je nach Tastenkombination soll dann der Buchstabe über USART übersendet >werden. Und wo ist jetzt das Problem? Wie man ein Araay mit Daten füllt? Steht in jedem C-Buch. MFG Falk
Ich würde vorschlagen, schließ die Augen und gleite mit deinen Händen ganz sanft über die Tastatur. Da fühlst du ein Array mit einer Menge Tastenkombinationen....:D Sorry, ich konnts mir nicht verkneifen.
Wie sehen deine Tastenkombinationen aus? Ist es möglich aus der 'Tastenkombination' eine eindeutige Zahl zu errechnen? Ist es möglich, das ganze auch so aufzusetzen, dass dieser eindeutigen Zahlen auch noch aufsteigend sind? Wenn ja: Tastenkombination hernehmen Aus der Tastenkombination die erwähnte Zahl errechnen Diese Zahl als Index in das Array benutzen Aus dem Array bekommt man dann den Buchstaben Der Buchstabe wird über die UART verschickt. Zuvor muss natürlich noch das Array mit den richtigen Buchstaben besetzt werden. Dazu rechnest du dir alle möglichen Tasten- kombinationen aus und besetzt das Array an der errechneten Stelle mit dem von dir gewählten Buchstaben.
Es soll den verschiedenen Tastenkombinationen ein Buchstabe hitnerlegt werden. zb. wenn 1+3+5 dann soll ein G gesendet werden wenn 1+3+5+6 dann soll ein K gesendet werden
Schuler wrote: > Es soll den verschiedenen Tastenkombinationen ein Buchstabe hitnerlegt > werden. > zb. wenn 1+3+5 dann soll ein G gesendet werden > wenn 1+3+5+6 dann soll ein K gesendet werden Du brauchst mindestens eine weitere Taste ("ENTER") oder einen Timeout (5s keine Taste heisst Eingabe fertig) um zwischen 1+3+5 und 1+3+5+6 zu unterscheiden.
im grunde will ich eine mechanische eingabe digitalisieren. egal welche tastenkombintation ich drücke. es wird jedesmal eine tast mit betätigt. diese könnte man dann als "Enter" nutzen. weil sie erst wieder in ihre ausgansposition geht, wenn keine taste mehr gedrückt wird. Nach meinem anfänger yC Verständnis bräuchte ich array uart (char) string mit uart senden habe ich hinbekommen. mir ist noch nicht klar wie der array inhalt aussehen muss und wie ich dann zu bestimmter kombination den richtigen hinterlegten buchstabe sende.
Hier ein Beispiel. Die zur Compilezeit definierten Tastenkombinationen und die Buchstaben sind in einer Struktur. Zur Laufzeit wird ein Eingabestring mit den Tastenkombinationen verglichen. Den Eingabestring habe ich in der Linux/DOS Version über die Kommandozeile eingegeben. Auf einem µC würde man da Tastendrücke oder UART-Emfangsdaten o.ä. benutzen. Ich habe die einfachste Version - direkte Zuweisung - gewählt, da ich deine Hardware nicht kenne. A propos Hardware - wie ist das mit der Reihenfolge der Tastendrücke? Kommen die Tasten hintereinander 1, 3 dann 5 so dass man schön den String "135" aufbauen kann oder kommen sie gleichzeitig so dass die Eingabe 135, 153, 315, 351, ... lauten kann. Im letzten Fall wäre das Beispiel nicht so schön, weil man entweder viele vordefinierte Strings vorhalten muss oder weil man den Eingabestring zunächst sortieren muss.
Schuler wrote: > mir ist noch nicht klar wie der array inhalt aussehen muss und wie ich > dann zu bestimmter kombination den richtigen hinterlegten buchstabe > sende. Der Array Inhalt sind die zu versendenden Buchstaben. Als Array Index verwendest du die Tastenkombination selbst. Du hast also 6 Taster. Und ich gehe davon aus, dass diese Taster gleichzeitig gedrückt werden sollen. Also nicht wie bei einem Codeschloss hintereinander. Jeder Taster kann entweder offen oder geschlossen sein. Ist er offen, dann werten wir das einfach mal als 0, ist er geschlossen dann wird das als 1 gewertet. Für alle 6 Taster hintereinander aufgeschrieben wäre das zb. 000000 mit der Bedeutung: alle Taster sind geöffnet. 000001 alle Taster bis auf Taster 1 sind geöffnet, Taster 1 ist in der Tat geschlosssen oder 010011 Taster 1 + 2 + 5 sind geschlossen; Taster 3 + 4 + 6 sind offen Soweit so gut, wenn ich jetzt mal alle Möglichkeiten aufschriebe, so ergibt sich eine Tabelle 000000 alle offen 000001 1 geschlossen 000010 2 geschlossen 000011 1 + 2 geschlossen 000100 3 geschlossen 000101 3 + 1 geschlossen 000110 3 + 2 geschlossen 000111 001000 ... Hey. Das sind doch nichts anderes als Binärzahlen. Man kann also jeder Tastenkombination eine eindeutige Zahl zuordnen. Ob man die jetzt binär oder dezimal anschreibt ist Geschmackssache, wichtig ist nur, dass es sie gibt, und dass diese Zahl ja nach Stellung der Taster immer eindeutig ist 0 = 000000 alle offen 1 = 000001 1 geschlossen 2 = 000010 2 geschlossen 3 = 000011 1 + 2 geschlossen 4 = 000100 3 geschlossen 5 = 000101 3 + 1 geschlossen 6 = 000110 3 + 2 geschlossen 7 = 000111 8 = 001000 ... Mit 6 Tastern kann auf diese Art bis 63 zählen. Das heist wenn du ein Array mit 64 Elementen bereitstellst, kannst du ganz einfach mit der Zahl die sich durch die Tasterstellung ergibt, in das Array indizieren und kriegst so den zu sendenden Buchstaben.
1 | char CodeArray[64] = |
2 | { 'A', // 0 = 000000 wenn keine Taste gedrückt |
3 | 'B', // 1 = 000001 |
4 | 'C', // 2 = 000010 |
5 | 'D', // 3 = 000011 |
6 | 'E', // 4 = 000100 |
7 | 'F', // 5 = 000101 |
8 | 'G', // 6 = 000110 |
9 | .....
|
10 | 'x', // 61 = 111101 |
11 | 'y', // 62 = 111110 |
12 | 'z', // 63 = 111111 |
13 | };
|
Alles was du noch tun musst, ist aus den Tasten die entsprechende Zahl zu bestimmen (jenachdem, wie die Tasten angeschlossen sind kann das ganz banal und simpel sein) und mit dieser Codezahl, dann aus dem Array den Buchstaben zu holen:
1 | uint8_t Code; |
2 | |
3 | Code = PIN..... // was auch immer notwendig ist um die Taster |
4 | // stellung in eine 6 Bit Zahl zu bringen
|
5 | |
6 | |
7 | uint8_t UART_Character; |
8 | |
9 | UART_Character = CodeArray[ Code ]; |
Vielen Dank. Vor allem der Letzte Beitrag hilft mir weiter und es sind nun paar Fragen weniger die ich habe. Werde es dann mal versuchen zu testen. Thx
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.