Bygga en robot som följer muspekaren (3 / 35 steg)
import processing.serial.*;
De uppgifter som var las skickade till arduino:
int _LastSent_MouseX;
int _LastSent_MouseY;
int _LastSent_PenUp;
Mest aktuella värden för muspositionen och penna upp/ned-läge:
int _Current_MouseX;
int _Current_MouseY;
booleska _Current_PenUp;
Egenskaper för ritningsfönstret:
int _WindowWidth;
int _WindowHeight;
Port för kommunikation med arduino
Seriella _SerialPort;
//////////////////////////////////////////////////////
Konfigurera bearbetning duken
void setup() {
_WindowWidth = 1600;
_WindowHeight = 800;
storlek (_WindowWidth, _WindowHeight);
strokeWeight (8).
Öppna den seriella porten för kommunikation med Arduino
Kontrollera att COM-porten är samma som den som används av arduino (Verktyg > Serial Port-menyn)
_SerialPort = ny följetong (här, "COM7", 9600);
_SerialPort.bufferUntil('\n');
}
//////////////////////////////////////////////////////
Dra fönstret på datorskärmen
void draw() {
Fyll duk grå
bakgrund (100);
Ställa in stroke färg till vitt
stroke(255);
Rita en cirkel på musen plats
ellips (_Current_MouseX, _Current_MouseY, 8, 8);
}
//////////////////////////////////////////////////////
Uppdaterar muspositionen mest aktuella status och skickar denna information till arduino
void mouseMoved() {
_Current_MouseX = mouseX;
_Current_MouseY = mouseY;
SendToArduino();
}
Uppdaterar den mest aktuella delstaten penna upp/ned-läge och skickar denna information till arduino
void mousePressed() {
_Current_PenUp =! _Current_PenUp;
SendToArduino();
}
//////////////////////////////////////////////////////
void SendToArduino() {
Det är mer prestanda att skicka enkla ints över den seriella porten till arduino styrelsen
Det är dock svårt att garantera att data tas emot i rätt ordning på arduino sida
för att undvika feltolkning skickas data via seriell anslutning, använder vi följande regel:
X-position kommer att skickas som som int av värde 0..127
Y-position kommer att skickas som en int av värde 127..255
Upp/ned stat kommer att skickas som en int av värdet 100 eller 200
int new_MouseX = round (karta (_Current_MouseX, 0, _WindowWidth, 0., 127.));
int new_MouseY = round (karta (_Current_MouseY, 0, _WindowHeight, 255., 127.));
int new_PenUp = _Current_PenUp? 100: 200; //
Vi kommer endast att skicka data över till arduino om ett av värdena ändras
om (new_MouseX! = _LastSent_MouseX || new_MouseY! = _LastSent_MouseY || new_PenUp! = _LastSent_PenUp) {
_LastSent_MouseX = new_MouseX;
_LastSent_MouseY = new_MouseY;
_LastSent_PenUp = new_PenUp;
_SerialPort.write((byte)new_MouseX);
_SerialPort.write((byte)new_MouseY);
_SerialPort.write((byte)new_PenUp);
}
}
//////////////////////////////////////////////////////
Detta är användbart att visa meddelanden som skickas från arduino styrelsen över den seriella porten
för debug ändamål
void serialEvent(Serial myPort)
{
String myString = myPort.readStringUntil('\n');
println(myString);
}