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.



|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


Arduino Forum > International > Deutsch (Moderator: uwefed) > RC-Heli über MX-12 mit X-Box Controller steuern


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial