Kommando Interpreter

Gast #1234570
Lesenswert?
• ▲
▼
Hallo Leute,

habe folgende Frage: Ich habe eine µC Platine mit einem Mega168, habe 
eine Kommunikation über PC(USB) -> UART(µC) hergestellt und möchte daten 
vom PC zum µC und dann über den I²C schicken. Das geht nun soweit. Nun 
mein Problem:
Ich möchte die Daten vom PC folgendermaßen aussehen lassen. 1:AAA
Erklärung: [1:] steht für die erste anzusprechende Karte, also Adresse 
des    ersten I²C Slave(Hardware mäßig einstellbar auf dem Slave)
[AAA] steht für die Adresse die mitgeschickt werden soll, um den 
Adressbaustein auf dem Slave anzusprechen, damit dieser den jeweiligen 
Port schaltet.
Habe schon mal etwas gehört von den Befehlen Switch/Case, aber ich 
verstehe es irgendwie gar nicht.

Was ich also letztendlich haben möchte:: Ich kann in einem Hyperterminal 
eingeben -> 1:010 (und mit Enter drücken wegschicken)
Daraufhin soll der µC alles auflösen und dann per I²C dem Slave die 
Daten [010] schicken. Daraufhin schaltet der Adressbaustein auf dem 
Slave den Ausgang [010] worauf sich dann eine LED oder sonstiges 
schalten lässt.

Ich hoffe mir kann jemand helfen:-)
Ein kleiner Beispiel Code wäre auch sehr hilfreich denke ich....
Bin schon gespannt auf antworten oder viell besseren Vorschlägen, wie so 
etwas schneller und einfacher gehen kann.

MfG
Matze
#1234606
Lesenswert?
• ▲
▼
Fang mal damit an, das komplette Kommando als 1 String zu empfangen. 
Also vom Start der Kommandozeile bis zum Enter.
Der nächste Schritt ist dann diese kompletten String in einzelne Teile 
zu zerlegen. Bei dir wär das zb. zwischen den Teilstrings befindet sich 
ein ':'
Danach wandelst du die einzelnen Strings gegebenenfalls in Zahlen um 
falls notwendig.
Und dann kann der grosse Auftritt des switch/case erfolgen.

Also:
Dein µC empfängt diesen String hier

   "1:010"

du zerlegst diesen String zunächst mal in die Einzelteile

   char Command[20];
   char Value[100];

wobei Command "1" enthält, während Value "010" enthält.

Da deine Kommando auch numerisch ist, wandelst du erst mal alles in 
Zahlen um (zb. mit atoi)

  numCommand sei dann 1
  numValue sei dann 10

und dann der switch/case
1
   switch( numCommand )
2
   {
3
     case 1:
4
       // send Value to Slave
5
       break;
6

7
     case 2:
8
       // get value from Slave
9
       break;
10

11
     default:
12
       // unknown command
13
   }

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