-
Asuro Fernsteuern
Hallo.
Ich hab heut mal damit angefangen, ASURO über Hyperterminal fernzusteuern:
Code:
while(1)
{
//Befehle Empfangen
msg = "";
SerRead(msg,1,0);
Send("\r\nEmpfangen: >");
Send(msg);
Send("<");
if(msg == "w")
{
FrontLED(ON);
}
}
Die Funktion: Wenn man im Terminal "w" drückt, sollte die Front LED angehen, tut sie aber net o.O
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:
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);
}
}
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. :?:
-
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.
-
Hallo Pdd,
ist ein Vektor bestehend aus 1 Element (hier Byte).
ist eine Zuweisung auf das 2. Element (Byte) des Vektors. Also hinter den Vektor, da dieser ja nur 1 Byte lang ist.
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).
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:
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);
}
}
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!
-
Hallo Pdd,
dein Array ist immer noch zu kurz, weil Strings noch ein abschließendes \0 Zeichen benötigen.
Also
nimm mal Hochkommas,
nicht Gänsefüsschen
dann klappt das auch.
Mit
sollte es auch das Senden klappen
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