Array mit Inhalt fühlen und USART

Gast #737553
Lesenswert?

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
#737619
Lesenswert?

@ 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
Gast #737716
Lesenswert?

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.
#737717
Lesenswert?

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.
Persönliche Seite #739615
Lesenswert?

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.
Gast #739676
Lesenswert?

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.
Persönliche Seite #739779
Lesenswert?

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.
Angehängte Dateien:
#739780
Lesenswert?

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 ];

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren