Hi Pdd,
wenn du die Variable msg initialisierts (machst du doch, oder) kannst du die Länge auf ein Zeichen begrenzen. Das sollte dan dein Problem lösen.
Viele Grüße, (Michael)
Hallo.
Ich hab heut mal damit angefangen, ASURO über Hyperterminal fernzusteuern:
Die Funktion: Wenn man im Terminal "w" drückt, sollte die Front LED angehen, tut sie aber net o.OCode:while(1) { //Befehle Empfangen msg = ""; SerRead(msg,1,0); Send("\r\nEmpfangen: >"); Send(msg); Send("<"); if(msg == "w") { FrontLED(ON); } }
Wie ihr seht sendet der Asuro zu testzwecken die Taste zurück, die angekommen ist. Ankommen sollte: "Empfangen: >w<" Empfangen wird aber :
"Empfangen >w
<"
Also mit einem Zelenumbruch. Nun will ich die Zeile if(msg == "w") so umändern, das nur das erste byte(das "w") verglichen wird. Mit msg[1] funktioniert das aber nicht! Wie kann man das machen?
Hi Pdd,
wenn du die Variable msg initialisierts (machst du doch, oder) kannst du die Länge auf ein Zeichen begrenzen. Das sollte dan dein Problem lösen.
Viele Grüße, (Michael)
Hm hab jetzt so:
es kommt aber immernoch das selbe raus! Oder begrenzt man die Anzahl anders? nicht dsa ich jetzt ein Array erstellt habe, könnte ich mir vorstellen, weil ein Fehler kommt, wenn man an einem "msg" das "[1]" weglässt.Code:char msg[1]; while(1) { //Befehle Empfangen msg[1] = ""; SerRead(msg[1],1,0); Send("\r\nEmpfangen: >"); Send(msg[1]); Send("<"); if(msg[1] == "w") { FrontLED(ON); } }
mach mal folgendes:
so dass schon ein wert gespeichert ist. dieser wird dann später überschrieben. laut anleitung des asuro sollte es so besser gehen.Code:char msg[1]="x";
Hallo Pdd,
ist ein Vektor bestehend aus 1 Element (hier Byte).Code:char msg[1];
ist eine Zuweisung auf das 2. Element (Byte) des Vektors. Also hinter den Vektor, da dieser ja nur 1 Byte lang ist.Code:msg[1] = "";
In C wird so etwas nicht überprüft, was zu unerwarteten Effekten führen kann!
wäre richtig (das gleiche gilt bei Vergleichen und als Parameter für Funktionen).Code:msg[0] = "";
Vielleicht nochmal den Abschnitt über Zeiger und Vektoren in der Asuro Bedienungsanleitung durchsehen.
Gruß m.a.r.v.i.n
aaach da war was... na klar =)
das erste element ist 0, das zweite element ist 1 usw...
Danke marvin, war grade wireder am drüber nach grübeln warums net geht =)
ok danke, habs schon gestern gelöst gehabt, habs nur net geschreiben *schäm* naja:
Wenn man jetzt W drückt, gehen die Lampen an, auf S gehen sie aber nicht mehr aus o.O weis auch net woran das liegt... naja und ausserdem sendet er immer nachrichten zurück, die garnet gesendet werden sollen. statt nur dem Buchstabe sendet er einen ganzen satz, der eigentlich nur 5 zeilen oberhalb dieses ausschnittes einmal gesendet wird!Code:char msg[1]; { //Befehle Empfangen Send("\r\n>"); SerRead(msg,1,0); msg[1] = '\0'; Send(msg[0]); if(msg[0] == 'w') { All(ON); } else if(msg[0] == "s") { All(OFF); } }
Hallo Pdd,
dein Array ist immer noch zu kurz, weil Strings noch ein abschließendes \0 Zeichen benötigen.
Also
nimm mal Hochkommas,char msg[2];
nicht Gänsefüsschenif(msg[0] == 's')
dann klappt das auch.if(msg[0] == "s")
Mit
sollte es auch das Senden klappenSend(msg);
Gruß m.a.r.v.i.n
aha, mal probiere, aber komsich, das kein compiler.error kommt. o.O
das gibts doch net, mittlerweile kommen Comiler-errors:
MAKE Version 5.2 Copyright (c) 1987, 1998 Inprise Corp.
Error makefile 222: Colon expected
Error makefile 247: Too many rules for target '%.o'
Error makefile 283: Command syntax error
*** 3 errors during make ***
> Process Exit Code: 1
Lesezeichen