Arduino-Auto durch Pfeiltasten vom PC steuern?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Ok das mit dem Panzer hört sich spannend an ;)

Processing kannst du auf processing.org kostenlos dowloaden falls du das noch nicht hast. Die Arduino IDE basiert auf Processing, ist also zum programmieren sehr ähnlich.

Unter> "File" >> "Examples" >> "Library" >> "Serial" finest du die Datei "SimpleWrite":

import processing.serial.*;

Serial myPort; // Create object from Serial class

int val;        // Data received from the serial port

void setup() {

  size(200, 200);

  // I know that the first port in the serial list on my mac

  // is always my  FTDI adaptor, so I open Serial.list()[0].

  // On Windows machines, this generally opens COM1.

  // Open whatever port is the one you're using.

  String portName = Serial.list()[0];

  myPort = new Serial(this, portName, 9600);

}

void draw() {

  background(255);

  if (mouseOverRect() == true) {  // If mouse is over square,

    fill(204);                    // change color and

    myPort.write('H');              // send an H to indicate mouse is over square

  } 

  else {                        // If mouse is not over square,

    fill(0);                      // change color and

    myPort.write('L');              // send an L otherwise
  }
  rect(50, 50, 100, 100);         // Draw a square
}

boolean mouseOverRect() { // Test if mouse is over square

  return ((mouseX >= 50) && (mouseX <= 150) && (mouseY >= 50) && (mouseY <= 150));

}

Dieses Programm ermöglicht die Kommunikation zwischen Arduino und PC. So sieht das Programm mit der Einlesung der Tasten aus: (das ganze draw von oben brauchst du nicht mehr, du fügst stattdessen einfach dieses hier ein)

void draw() { 

 if (keyPressed) {
   if (key == CODED) {
     if (keyCode == UP) {
     myPort.write ("u");
   }
   if (keyCode == DOWN) {
     myPort.write ("d");
 }
 if (keyCode == RIGHT) {
     myPort.write ("r");
 }
  if (keyCode == LEFT) {
     myPort.write ("l");
 }
 }
}
               }

Der Arduinocode findest du im SimpleWrite. Ich würde übrigens den PC nur die rohen "Ja/Nein-Tastendaten" übertragen lassen, das Arduino macht den Rest und rechnet die Befehle für die Motoren um.

Ich hab das Processingprogramm nicht ausprobiert es müsste aber funktionieren.

Hoffe konnte helfen...

Steglo2


Legriano 
Beitragsersteller
 24.06.2012, 17:10

vielen vielen Dank du hast mir wirklich sehr geholfen!! aber eine kleine Frage hab ich noch... es wir bei dem array "String portName = Serial.list()[0]" ein error angezeigt... die Erklärung des Urhebers ist ziemlich klar nur weis ich nicht was ich daran ändern soll oder wie ich herausfinde welcher COM ich benutze.. ich vermute mal das der COM der ist, den bei der Arduino Software angeben oder??

0
Steglo2  24.06.2012, 21:41
@Legriano

ich probiere einfach alle nummern durch bis es funktioniert, d.h. bis kein Fehler mehr angezeigt wird :D also bei Serial.list()[0] änderst du die Zahl... Bei mir ist es meistens 2 (...Serial.list()[2]...), ob das mit dem COM-Port übereinstimmt, weiss ich nicht...

Steglo2

0
Legriano 
Beitragsersteller
 26.06.2012, 15:47
@Steglo2

ich glaub langsam nerv ich dich.... aber wie kann ich jetzt die Tastenanschläge mit der arduion software auslesen und zu Funktionen zuweisen?? steh gerade iwie auf dem schlauch.... (bin zwar kein anfänger mehr aber könntest du das ziemlich detailliert machen bitte :) ) Danke :D

0
Steglo2  26.06.2012, 18:03
@Legriano

Der Arduinocode:

char val;

void setup() { 
 Serial.begin(9600);
 }

 void loop() {
 if (Serial.available()) { //Sind serielle Daten
 val = Serial.read();//verfügbar, ist val = Daten
 }
 if (val == "u") { // Taste "nach Oben"
   "Ich fahre jetzt vorwärts":
   .
   .
   .
 }

 if (val == "d") { // Taste "nach Unten"
   "Ich fahre jetzt rückwärts":
   .
   .
   .
 }

 if (val == "r") { // Taste "nach Rechts"
   "Ich fahre/drehe mich nach rechts":
   .
   .
   .
 }

 if (val == "l") { // Taste "nach links"
   "Ich fahre/drehe mich nach links":
   .
   .
   .
 }

So was?

Hoffe konnte helfen sonst einfach fragen ;)

Steglo2

0

Es müsste ein processingprogramm sein, welches die tasten ausliest und dann per USB an das Arduino ausgibt und vom arduino entsprechend ausgewertet wird... (Stichwort: Serielle Kommunikation; Es gibt bei Processing beispiele für die USB-Kommunikation, inklusive Arduinocodes) Hardware: es gibt spezielle fahrchassis mit motoren und getriebe für arduino...du müsstest dann noch einen Motortreiber haben, da der strom vom arduino (ich glaube 40mA pro kanal) nicht für die motoren ausreichen wird.

Steglo2


Steglo2  21.06.2012, 13:02

Oder meintest du ein echtes Auto??

0
Legriano 
Beitragsersteller
 23.06.2012, 21:16
@Steglo2

ist mehr ein kleiner Panzer :D mit 2 ketten damit ich die kurven einfach programmieren kann. Das mit dem Motor habe ich mit einem motorchip umgangen. funktioniert alles super! Ich will die Pfeiltastensteuerung nur als kleines extra. hättest du ein beispiel für so ein Programm?

0