Forum: Compiler & IDEs Array mit Inhalt fühlen und USART


von Schueler (Gast)


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

von Falk B. (falk)


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

von Fred (Gast)


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.

von Karl H. (kbuchegg)


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.

von Schuler (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


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.

von Schuler (Gast)


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.

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

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.

von Karl H. (kbuchegg)


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

von Schuler (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.