PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro mit C und Delphi machbar??



Artemis_Simetra
26.09.2012, 15:41
Hallo Zusammen,
also ich hab da mal ein paar Fragen:
Ich hatte die Idee mit Delphi ein Prog zu machen mit dem man den asuro über den usb.ir. (arexx-usb2) fernsteuern kann.
Dazu: Generell Machbar?
Welchen Datentyp kann man über di ir-schnittstelle senden?
Wie sprech ich den usb.ir.stick in delphi an?

VG malte

markusj
26.09.2012, 17:38
Machbar. Das ganze ist eine serielle Schnittstelle, es gibt Delphi-Komponenten mit denen man über die serielle Schnittstelle kommunizieren kann. Über die schiebst du deine Daten Byte für Byte, du wirst allerdings irgend eine Form von Protokoll vorsehen müssen.

mfG
Markus

Artemis_Simetra
26.09.2012, 18:54
Protokoll = welche kombi von 8bit für was steht??
danke für die zeitnahe antwort.

VG malte

markusj
26.09.2012, 19:57
Weniger 8-Bit-Kombinationen als mehr ganze Folgen. Du wirst deine Informationen vermutlich a) nicht in acht Bit unterbringen und b) Fehlererkennung/-korrektur benötigen (die IR-Schnittstelle ist verhältnismäßig störempfindlich). Ein Protokoll definiert, wie eine Reihe von Bytes zu interpretieren ist. http://de.wikipedia.org/wiki/Kommunikationsprotokoll

mfG
Markus

Artemis_Simetra
29.09.2012, 14:40
ok, danke

mal so zum ausprobieren (noch mit HyperTerminal):


#include "asuro.h"

int main(void)
{
Init();
char data;

while(1)
{
data = 0;
BackLED(ON,ON);
SerRead(data,1,0);

if(data != 0)
{
MotorDir(FWD,FWD);
MotorSpeed(200,200);
}
else
{
MotorDir(BREAK,BREAK);
}

}

}

Funktioniert aber noch nicht so wie gedacht.
Ich kann Zeichen senden soviel ich will, er (er/sie/es was für ein genus ist asuro eigentlich?) fährt nicht los.
Was is da Falsch?
vg malte

markusj
29.09.2012, 15:49
Das muss SerRead(&data, 1, 0); sein. Der erste Parameter ist die Adresse der Stelle, an die die empfangenen Daten abgelegt werden sollen, der Operator der dir die Adresse einer Variable zurück gibt, ist der &-Operator.

mfG
Markus

Artemis_Simetra
18.10.2012, 19:30
So da bin ich mal wieder diesmal:

#include "asuro.h"

int main(void)
{
Init();
char data;

while(1)
{
MotorDir(FREE,FREE);
data = 0;
BackLED(ON,ON);
SerRead(&data,1,0);

if(data == 'a')
{
MotorDir(FWD,FWD);
MotorSpeed(200,200);
}
else
{
MotorDir(BREAK,BREAK);
}
}
}

Der Asuro wartet zwar brav bis was gesendet wird, unterscheidet aber nicht nach unterschiedlichen chars. egal was man sendet er fährt los und hört auch beim senden von anderen zeichen nicht damit auf. Was stimmt da nicht?

vg malte

markusj
18.10.2012, 20:31
Was stimmt da nicht?

Die Einrückung? Ok, im Ernst: Ich finde es erstaunlich, dass sich dein ASURO überhaupt bewegt. Du schaltest am Anfang deiner Schleife nämlich gleich Mal die Motoren aus, sie sind damit nach dem Einschalten am Ende der Schleife nur wenige Mikrosekunden an ... Und wenn du keine weiteren Zeichen sendest, sollte er dann eigentlich stehen bleiben. Hast du dir die empfangenen Zeichen Mal zurück gesendet (mit kurzer Verzögerung zwischen Empfang und Senden)?

mfG
Markus

Artemis_Simetra
25.10.2012, 17:26
So jetzt funktioniert der Asuro Teil des Projekts in der ProbeV wie gedacht.
@Markus: hattest recht, die ÜPrüfung ob zweimal das gleiche ankommt verbessert das ganze wesentlich.THX
Aber das DelphiProblem mit der ser. Schnittstelle besteht weiterhin.
vg malte