PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro IR Fernsteuerung



peer
05.09.2005, 13:33
Hallo zusammen,
ich habe ein Problem bei der Fernsteuerung meines Asuro per IR

#include "asuro.h"

int main(void)
{
char daten[] = "0";

Init();
MotorDir(FWD,FWD);
while(1)
{
SerRead(daten,1,0);
if(daten == "r")
{
MotorSpeed(255,255);
}
SerWrite(daten,1);
}
return 0;
}
wenn ich nun per hyperterminal ein r sende tut sich an dem Roboter nichts er sendet mit lediglich den Inhalt von daten zurück. Nun weiss ich nicht mehr wie ich da weitermachen soll... er empfangt ja einwandfrei ein r, die bedingung daten == "r" ist aber dennoch nicht WAHR ](*,) ](*,) aber trotzdem sendet er ein r zurück ... also was ich meine: an der einen stelle is in daten ein r, an der anderen nicht.
wie bekomme ich es nun hin das er wenn ich per terminal ein r sende auch anfängt zu fahren ?

so long
peer

ps: ich weiss das es bei der bedingten reichweite nonsens ist eine fernbedienung zu programmieren, doch dies hatte ich mir als vorübung vergenommen und bin schon gescheitert =(

Andun
05.09.2005, 13:44
daten ist ja ein array, wie du selbst definiert hast. Du brauchst es 1. nicht voher zu füllen und 2. musst du bei deiner If Abfrage auf daten[0] == "r" testen.

peer
05.09.2005, 14:21
also nun habe ich folgendes ausprobiert bzw an einigen stellen den quellcode abgeändert:

...
SerRead(daten[0],1,0);
if(daten[0] == "r")
...
SerWrite(daten[0],1);
so nun kommt wenn ich per terminal ein r seinde ein + zurück !!! ](*,) Wieso ?
naja dachte ich mir halb so wild stelle ich das if eben auf ein + um:
if(daten[0] == "+")
aber trotzdem passiert nichts als dass der asuro mir ein + zurücksendet aber trotzdem stehenbleibt!!
Kann jm sagen woran das liegt ?

so long
peer

m.a.r.v.i.n
05.09.2005, 15:05
Hallo peer,

SerRead(&daten[0],1,0) bzw. SerWrite(&daten[0], 1) sollte funktionieren.
Die Funktionen erwarten einen Zeiger auf die Daten.

gruß m.a.r.v.i.n

Andun
05.09.2005, 16:00
daten[0] liefert meiner Meinung nach shcon einen Zeiger zurück, da es ein Array ist. Dort bekommt man immer die Adresse, meine ich, oder irre ich mich?

Du musst übrigens ach beachten, dass dein Transciever, jedes zeichen, dass du schickst auch selbst einmal empfängt. Hast du denn bei dir das Echo abgeschaltet? Also ob er es einmal hinschreibt und ob er es dann nohcmal empfängt?

Ich glaube, dass sollte jemand anderes erklärenm, der das kann.

Andun

peer
05.09.2005, 16:19
hallo,
die sache mit den zeigern hat auch nicht gefunzt.

zu dem echo: wenn ich es mit den zeigern mache kommt wie am anfang rr als ausgabe wenn ich r drücke. wenn ich
#include "asuro.h"

int main(void)
{
char daten[] = "0";

Init();
MotorDir(FWD,FWD);

while(1)
{
SerRead(daten[0],1,0);
if(daten[0] == "r")
{
MotorSpeed(255,255);
}
SerWrite(daten[0],1);
}
return 0;
} nehme kommt r+ als ausgabe wenn ich r tippe ... vollkommen komisch das ganze !
hat denn noch nie jm versucht seinen asuro ferzusteuern? wenn doch würd ich mir sehr gern die codes ansehen.

so long
peer

m.a.r.v.i.n
05.09.2005, 16:34
Hallo peer,

im Asuro SelfTest ist so ein Fernsteuerungsprogramm enthalten. Das File heißt 'PCDemo.c'.

Gruß m.a.r.v.i.n

peer
05.09.2005, 17:00
das is mir ein wenig kryptisch ...
weiss denn niemand den fehler ?

m.a.r.v.i.n
05.09.2005, 17:13
Hallo peer,

ohne es selbst ausprobiert zu haben, versuch doch mal folgendes:



#include "asuro.h"

int main(void)
{
char daten[] = "0";

Init();
MotorDir(FWD,FWD);

while(1)
{
SerRead(&daten[0],1,0);
if(daten[0] == 'r')
{
MotorSpeed(255,255);
}
SerWrite(&daten[0],1);
}
return 0;
}


Gruß m.a.r.v.i.n

peer
05.09.2005, 17:29
JUHU es geeht
danke marvin

war ja ne schwere geburt .. so wie ich das nu verstanden habe bedeuten die & das es sich um einen Zeiger handelt!?

naja nu komm ich erstmal weiter VIELEN DANK

peer

m.a.r.v.i.n
05.09.2005, 17:47
Na Gott sei dank.

Dein 1. Programm mit


SerRead(daten, 1, 0);

wäre auch richtig gewessen, da es ebenfalls der Funktion einen Zeiger (auf ein Arrray) übergibt.


SerRead(&daten[0], 1, 0);

ist das selbe.

Der zweite Fehler steckte in der Zeile:


if(daten[0] == 'r') // funktioniert

stattdessen sollte


if(daten[0] == "r") // funktioniert nicht

eigentlich eine Compiler-Warnung ausspucken.
"Nicht übertragbare Zeiger-konvertierung."
'r' wird in C als einzelnes Zeichen interpretiert,
"r" hingegen als String.

Gruß m.a.r.v.i.n

Andun
05.09.2005, 20:25
Oh, achso. Das mit dem ' und " wusste ich ja gar nicht. Sehr interessant. Aber gut zu wissen.

ThomasC.
26.04.2006, 19:14
Hallo,
ich habe ein Programm geschrieben, bei dem der Asuro ein bestimmte Aktion durchführt, wenn ich eine bestimmte Taste auf der Tastatur drücke. Bloß führt er die entsprechende Aktion nicht durch sondern geht gleich auf die else Schleife über. Über SerWrite jedoch wird genau das selbe Zeichen zurückgesendet. Kann es sein, dass er das nicht als das entsprchende Zeichen erkennt?

(Das ist jetzt nur ein Ausschnitt)

unsigned char IrBefehl;

SerRead(IrBefehl,1,0);
if(&IrBefehl=="1"){BackLED(ON,OFF);i=30000;}
else if(&IrBefehl=="2"){BackLED(OFF,ON);}
else{BackLED(OFF,OFF);FrontLED(ON);}
SerWrite(IrBefehl,1);

Arexx-Henk
26.04.2006, 20:47
Dies ist ein Ausschnit vom IR Empfanger Spezifikation.

Betriebsspannung
Supply Voltage
Vcc-min 4.5, Vcc-typ 5.0, Vcc-max 5.5 V

So die IR empfanger funktioniert nicht unterhalb 4.5V.

Es konnte sein das wenn die Batterien oder Accu's nicht ganz voll sind, da die Motoren drehen, die Batteriespannung unter 4.5V senkt.

Gruss

Henk

fxlee
27.04.2006, 13:57
Hi, Thomas!

Ich habe zwar erst gestern meinen Asuro geholt :D. und habe noch nicht mit dessen Programmierung beschäftigt. Aber dein Prg hat zumindest denselben Fehler wie oben:
"1" ist ein String! Entspricht ein Array mit: '1' und ein 0
Probier mal mit '1' und '2' usw.

Übrigens, Stringvergleichen geht über strcmp


Ohh, ich freue mich schon auf mein Asuro's ersten Schritt

Felix