RC-Heli über MX-12 mit X-Box Controller steuern
hallo,
ich möchte meinen rc-modellhelikopter über meine fernsteuerung (graupner mx-12) mit meinem x-box controller steuern können.
die steuerung mit dem x-box controller funktioniert sogar teilweise schon aber leider sehr zeitverzögert (ca. 0,5 sec). :~ der x-box controller ist per usb meinem pc angeschlossen. ein vb.net programm liest die achsenpositionen des controllers aus und sende diese den arduino uno per serieller schnittstelle. der arduino uno erzeugt dann ein ppm-signal (puls-pausen-modulation), welches von der fernsteuerung verarbeitet werden kann. dieses ppm-signal wird über die lehrer-schüler-schnittstelle der fernsteuerung übermittelt. die fernsteuerung steuert dann den rc-heli.
hier mein vb.net code zum auslesen und senden der x-box controller achsen:
hier mein arduino-code zur erzeugung des ppm-signals:
habt ihr eine idee wie ich die oben beschriebene zeitverzögerung minimieren kann?
danke vorab für eure ideen und schönen gruß
,
christoph
ich möchte meinen rc-modellhelikopter über meine fernsteuerung (graupner mx-12) mit meinem x-box controller steuern können.
|x-box controller| --usb--> |pc| --com--> |arduino uno rev.3| --ppm--> |mx-12| --funk--> |rc-heli|
die steuerung mit dem x-box controller funktioniert sogar teilweise schon aber leider sehr zeitverzögert (ca. 0,5 sec). :~ der x-box controller ist per usb meinem pc angeschlossen. ein vb.net programm liest die achsenpositionen des controllers aus und sende diese den arduino uno per serieller schnittstelle. der arduino uno erzeugt dann ein ppm-signal (puls-pausen-modulation), welches von der fernsteuerung verarbeitet werden kann. dieses ppm-signal wird über die lehrer-schüler-schnittstelle der fernsteuerung übermittelt. die fernsteuerung steuert dann den rc-heli.
hier mein vb.net code zum auslesen und senden der x-box controller achsen:
code: [select]
imports system.io.ports 'com-port
imports system
public class form1
dim jinfo joyinfo
public shared indata string
public s new serialport
private declare function joygetpos lib "winmm.dll" (byval ujoyid integer, byref pji joyinfo) integer
private structure joyinfo
dim x integer
dim y integer
dim z integer
dim buttons integer
end structure
private sub form1_load(byval sender system.object, byval e system.eventargs) handles mybase.load
s.close()
s.portname = "com3" 'will need change port number
s.baudrate = 9600
s.databits = 8
s.parity = parity.none
s.stopbits = stopbits.one
s.handshake = handshake.none
s.encoding = system.text.encoding.default 'very important!
s.open()
s.rtsenable = true
addhandler s.datareceived, addressof datareceviedhandler
end sub
private sub timer1_tick(byval sender system.object, byval e system.eventargs) handles timer1.tick
dim x, y, z, b integer
joygetpos(0, jinfo) 'joystick 0
b = str$(jinfo.buttons)
x = math.round(str$(jinfo.x) / 65525 * 255, 0)
y = math.round(str$(jinfo.y) / 65525 * 255, 0)
z = math.round(str$(jinfo.z) / 65525 * 255, 0)
textbox1.text = b
textbox2.text = x
textbox3.text = y
textbox4.text = z
s.write(chr(x))
's.write(chr(y))
's.write(chr(z))
end sub
private shared sub datareceviedhandler(byval sender object, byval e serialdatareceivedeventargs)
dim sp serialport = ctype(sender, serialport)
indata = sp.readline
end sub
end class
hier mein arduino-code zur erzeugung des ppm-signals:
code: [select]
int pin = 3; // ppm input pin
unsigned int duration1 = 1000;
unsigned int duration2 = 1000;
unsigned int duration3 = 1000;
void setup()
{
serial.begin(9600);
pinmode(pin, output);
}
void loop()
{
digitalwrite(3, low);
delaymicroseconds(350);
digitalwrite(3, high);
delaymicroseconds(1000);
digitalwrite(3, low);
delaymicroseconds(400);
digitalwrite(3, high);
delaymicroseconds(duration1);
digitalwrite(3, low);
delaymicroseconds(400);
digitalwrite(3, high);
delaymicroseconds(1000);
digitalwrite(3, low);
delaymicroseconds(400);
digitalwrite(3, high);
delaymicroseconds(1000);
digitalwrite(3, low);
delaymicroseconds(400);
digitalwrite(3, high);
delaymicroseconds(1000);
digitalwrite(3, low);
delaymicroseconds(400);
digitalwrite(3, high);
delaymicroseconds(1000);
digitalwrite(3, low);
delaymicroseconds(400);
digitalwrite(3, high);
delaymicroseconds(20000 - (400*7) - (1000*5) - duration1);
}
void serialevent(){
duration1 = map(serial.read(), 0, 255, 700, 1500);
}
habt ihr eine idee wie ich die oben beschriebene zeitverzögerung minimieren kann?
danke vorab für eure ideen und schönen gruß
,christoph
ich dachte die ppm impulse von fernsteuerungen dauern von 1000 bis 2000µs und nicht von 700 bis 1500µs.
der arduino-sketch verzögert gar nichts, da er keine eingabe von der seriellen schnittstelle bekommt und nur konstante werte sendet.
vieleicht solltest du den richtigen setch uns geben.
grüße uwe
der arduino-sketch verzögert gar nichts, da er keine eingabe von der seriellen schnittstelle bekommt und nur konstante werte sendet.
vieleicht solltest du den richtigen setch uns geben.
grüße uwe
Arduino Forum > International > Deutsch (Moderator: uwefed) > RC-Heli über MX-12 mit X-Box Controller steuern
arduino
Comments
Post a Comment