Arduino-Auto durch Pfeiltasten vom PC steuern?
hallo, ist es möglich ein Auto mit einer Arduino Steuerung durch die Pfeiltasten am PC zu steuern. Natürlich ist es mit dem Pc verkabelt..... also kein blutooth oder so :D danke im vorraus :D
2 Antworten
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
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
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
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
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
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?
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??