Steuerung der Motoraktivität vom PC aus
(EN google-translate)
(PL google-translate)
Das Programm aus dem vorangehenden Kapitel wird so ergänzt, dass serielle Daten vom PC zur Steuerung des Motors dienen.
Mittels gtkterm (in Konsole eingeben) kann das Arduino-Programm getestet werden:
|
|
Um den Motor besser vom PC aus steuern zu können, wird ausserdem ein Programm mit Processing realisiert. Damit dieses funktioniert, muss der bei Anschluß des Boards entstehende Fileeintrag in /dev, nämlich /dev/ttyACM0 auf einen als serielles Device erkennbaren gelegt werden. Dies kann mit einem symbolischen Link erfolgen:
|
Nach Ausführen dieses Konsolenbefehls, kann das Arduinoboard sowohl über /dev/ttyACM0 als auch über /dev/ttyS80 angesprochen werden.
Arduino-Quelltext
int zaehler = 0; int xPWM = 20; //0..40 int yPWM = 20; //0..20 void setup() { // put your setup code here, to run once: pinMode(9,OUTPUT); //Ard. oben4=OutPin D9 ---- L293 Pin 15 Input4 pinMode(4, OUTPUT); //Ard. oben9=OutPin D4 ---- L293 Pin 10 Input3 pinMode(3, OUTPUT); //Ard. oben10=OutPin D3 ---- L293 Pin 10 Enable2, PWM pinMode(13, OUTPUT); //Board LED //Eine Richtung festlegen und PWM aus: digitalWrite(4,HIGH); digitalWrite(9,LOW); digitalWrite(3,LOW); //LED aus digitalWrite(13,LOW); Serial.begin(9600); } void loop() { yPWM = xPWM-20; if(yPWM<0) yPWM=-yPWM; digitalWrite(3,HIGH); //20 Ticks == 0,02 Sekunden entspricht 50Hz delay(yPWM); digitalWrite(3,LOW); delay(20-yPWM); if(zaehler==0) digitalWrite(13,HIGH); else if(zaehler==25) digitalWrite(13,LOW); while(Serial.available()) //..damit immer der aktuellste==letzte Wert genommen wird. xPWM = (int)Serial.read(); //0..40 PWM-=20 => -20..20 Serial.write('A'); if(xPWM>20) { digitalWrite(4,HIGH); digitalWrite(9,LOW); } else { digitalWrite(4,LOW); digitalWrite(9,HIGH); } zaehler++; zaehler%=50; //eine Sekunde == 50 PWM-Perioden }
Code 0-1: Arduino-Programm: Steuerung des Motors über seriell empfangene Daten.
Processing-Quelltext
import processing.serial.*; import processing.core.*; import fullscreen.*; //um im Vollbildmodus starten zu können. import codeanticode.gsvideo.*; Serial myPort; // Create object from Serial class GSCapture webcam; void setup() { size(displayWidth, displayHeight); //Vorher symbolischen Link erzeugen: //ln -s /dev/ttyACM0 /dev/ttyS80 //ev. ändert sich der Port: //ln -s /dev/ttyACM1 /dev/ttyS81 //Lockdatei ev. von hand löschen: //sudo rm -f /var/lock/LCK..ttyS81 //delay(2000); myPort = new Serial(this,"/dev/ttyS81", 9600); webcam = new GSCapture(this,640,480,"/dev/video0"); //delay(2000); if(webcam!=null) webcam.start(); //delay(2000); frameRate(10); (new FullScreen(this)).enter(); } void draw() { clear(); //background(0); fill(0); rect(0, 0, displayWidth, displayHeight); if ( myPort.available() >= 1) { int PWM = (mouseX*40)/displayWidth; myPort.write(PWM); stroke(0,255,0); fill(0,255,0); text("PWM="+(PWM-20),20,displayHeight/2); } else { fill(0,0,255); stroke(0,0,255); } if(webcam!=null && webcam.available()) { webcam.read(); set(displayWidth-640,displayHeight-480,webcam); } line(mouseX,displayHeight/2,mouseX,displayHeight); }
Code 0-2: Processing-Programm: Über die horizontale Mausposition wird bestimmt, was gesendet wird.

Aufgabe (mit Processing)
|