Hallo
Gesten bin ich auf diese Seite gestoßen und fand die Idee einen Bot über mein iPhone zu steuern ziemlich genial.
Leider ist seine Steuerung recht simpel und kann lediglich die Motoren ein oder aus schalten.
Also habe ich mich selber mal einwenig mit der Thematik auseinandergesetzt und möchte euch nun einmal meine Ergebnisse vorstellen und eine kleines „how to“ schreiben...

Das ganze basiert auf dem App TouchOSC welches Daten auf Basis des OSC-Protokolls (Open Sound Control) sendet.
Leider gibt es meines Wissens keine Library für VB.
Also habe ich mich, wie auf der Page, für Processing entschieden da es Java sehr ähnelt und es auf der Herstellerhomepage von TouchOSC einige Beispiele gibt.

Um das Ganze nun zum Laufen zu bringen muss man sich zunächst einmal TochOSC auf sein iPhone laden.
Außerdem kann man sich noch den „TouchOSCEditor“ auf den Rechner laden, mit dem sich eigene Layouts der Steuerung erstellen lassen.

Ich habe mir zu Beginn erst einmal folgendes Layout erstellt:
Bild hier  

Unter Network muss nun noch bei Host die IP des PCs eingetragen werden und für die Ports 8000 für outgoing und 9000 für incoming.
Damit ist das iPhone Bereit

Nun geht es an die Signalverarbeitung am PC.
Wie eben schon erwähnt benutze ich Processing das man hier kostenlos laden kann.
Zusätzlich braucht man noch die „oscP5- Library“ die es hier gibt.
Anschließend kann man mit dem Programmieren loslegen.
Der Programmcode ist denke ich ganz gut verständlich:

Code:
import oscP5.*;
import netP5.*;
import processing.serial.*;
Serial myPort;
OscP5 oscP5;

float v_rotary1 = 0.0f;

int X;
float Y;
int Z;
int t1;
int t2;
float xrot = 0;
float zrot = 0;
float yrot = 0;



void setup() {

  /* starte oscP5, listening port 8000 */
  oscP5 = new OscP5(this,8000);
  myPort = new Serial(this, Serial.list()[3], 9600);  //COM4 (4Position in der Liste aller verfügbaren COMs)
}

void oscEvent(OscMessage theOscMessage) {

    String addr = theOscMessage.addrPattern();    //Eingabeobjekt
    float  val  = theOscMessage.get(0).floatValue();    //Objektzustand
    
    if(addr.equals("/1/rotary1"))        { v_rotary1 = val; }      //rotary1
    if(addr.equals("/1/toggle1")){   // toggle1
      t1=int(theOscMessage.get(0).floatValue());  //aktueller Zusatnd des toggle1
    }
    if(addr.equals("/1/toggle2")){   // toggle2
      t2=int(theOscMessage.get(0).floatValue());  //aktueller Zusatnd des toggle2
    }
    
    if(theOscMessage.checkAddrPattern("/accxyz")==true) {  //Accelerometer
      xrot = (theOscMessage.get(0).floatValue()*90);    //Neigung in ° X-Achse
      zrot = (theOscMessage.get(1).floatValue()*90);    //Neigung in ° Z-Achse
      yrot = (theOscMessage.get(1).floatValue()*90);    //Neigung in ° Y-Achse
    }
}

void draw() {
    background(0);
    
    if(t2 == 0){
      X = (int)(v_rotary1*100);    //normierung der Werte auf die Servofunktion
      Y = (1.3 * X);
      Z = (int)(30 + Y);
      myPort.write(Integer.toString(Z));
      myPort.write(13);            //<CR> zum beenden der Input-Funktion in Bascom
    }
    if(t2 == 1){
      X = (int)(xrot + 90);        //normierung der Werte auf die Servofunktion
      Y = (0.722222222222 * X);
      Z = (int)(30 + Y);
      myPort.write(Integer.toString(Z));
      myPort.write(13);
    }
    
    if(t1 == 1) {
      myPort.write("255");         //255 = Led ein
      myPort.write(13);
    }
    if(t1 == 0){
      myPort.write("256");         //256 = Led aus
      myPort.write(13);
    }
}
Alle empfangen Werte werden nach der Verarbeitung über einen Serial Port an meinem mC gesandt.
Der Bascom-Code:

Code:
$prog , 255 , &B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82                                               '80
$framesize = 68                                             ' 64
$swstack = 68                                               '44
$crystal = 16000000                                         'Quarzfrequenz

Config Pind.5 = Output
Led Alias Portd.5

Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4                               'USB Buchse

Config Servos = 1 , Servo1 = Portd.4 , Reload = 10
Config Portd = Output

Enable Interrupts

Wait 2


Dim X As Integer


Do
       'Darauf warten dass irgendwas gesendet wird
      Input #4 , "" , X Noecho

      If X > 29 Then
         If X < 161 Then
                 Servo(1) = X
                 X = 0
         End If
      End If

      If X = 255 Then
         Led = 0
      End If

      If X = 256 Then
         Led = 1
      End If

      Print #4 , X
Loop
Dieser Code ist für einen RNmega2560 geschrieben und muss bei Bedarf auf den jeweils verwendeten mC umgeschrieben werden.

Mit meinem Programm lässt sich entweder über das große grüne „Poti“ oder, nach betätigen das blauen Knopfes, über die Neigung ein Servo Steuern.
Der rote Knopf schaltet eine LED an und aus.

Das Programm lässt sich auch nach Belieben erweitern wenn man erst einmal die Grundfunktion verständen hat.
Auf der Homepage des Herstellers finden sich auch einige Beispiele die ganz gut zeigen wie man die einzelnen Schalter und Steller des Programms ausliest.

YouTube

Ich hoffe ich habe damit eine Anregung geschaffen.
Bin auf andere Programme und Ideen gespant