Im Grunde, was ich habe, ist dies:
Ein Arduino Duemilenova welches in einem alten Band-Schließfach untergebracht ist. Der Arduino hat 2 Potentiometer verbunden. Eine darstellt, der x-Achse und der y-Achse andererseits Koordinaten. Ich klebte einige rote Sanitär Werte Griffe an den Töpfen. Wie man die Töpfe dreht, geht der Ausgang auf die analogen Pins 0 und 1. Dies ist abgebildet auf einen Wert zwischen 0 - 1023 für x und y Koordinaten.
Dann wird es an den Laptop als serieller Datenstrom gesendet, eine Verarbeitung Skizze ausgeführt hat. Körperlich ist ein USB-Kabel für den Anschluss der Arduino und den Laptop.
Diese Skizze Karten 0-1023 an eine Position auf dem Bildschirm und Grundstücke einen Punkt gibt.
ABER die Dinge sind nicht so einfach für dieses Projekt;
Ich habe 3 schaltet auf dem Arduino
(1) - auf die Zeichnung stattfinden zu lassen. Dreht man diese aus, kann man den Punkt bewegen, wo Zeichnung beginnen wird. Skizzen können getrennt werden.
(2) auf den Bildschirm zu löschen. Muss aufpassen, wenn dieser Schalter zu schlagen, wie es der Bildschirm gelöscht werden.
(3), um eine Änderung der Farbe zu ermöglichen. Eine Tabelle der Farbauswahl aufkommt. Mit der richtigen Taste auf der Tastatur kann man die Farbe ändern.
Jeder dieser Schalter sendet einen einzigartigen Charakter in der seriellen Datenstrom, wenn sie aktiviert sind.
Auch die Verarbeitung Skizze sieht für diese Zeichen und reagiert entsprechend.
Auch spielte ich mit der Bildschirmgröße für meinen Laptop, die einige Änderungen am Code verursacht.
Der Code, die ich verwendet habe ist unten: erste Arduino Code und dann die Verarbeitungscode. Der Arduino und Processinmg Code begann mit einer Kopie von einer anderen Person die ich in den Kommentaren anerkennen. Die Ardiuno ist ziemlich einfach, mit den Töpfen zu analogen Pins 0 und 1 und jeder Schalter geht an einen digitalen Stift 3,5 oder 7.
Die Verarbeitungscode wird durch mich, um die Farboptionen stark modifiziert.
Arduino:
/** Etch-a-Sketch_wswitches
*
* Ein einfaches Programm zu lesen zwei Potentiometer an analoge 0 und 1 angeschlossen, interpretieren sie als geordnetes paar (X, y)
* und über serielle Schnittstelle an den Computer senden
*
* basierend auf Grafik: http://www.arduino.cc/en/Tutorial/Graph
* 7/2011 - modifiziert von cdubois
*/
#include < Stdio.h >
für Töpfe
Int xCoord;
Int yCoord;
Char Coords [10];
für Schalter
Variablen für die Eingabe pin und Steuern LED
Eingang 7 ist Bildschirm löschen
Eingang 3 soll beginnen erneut gezeichnet
Eingang 5 ist es, Farbe zu ändern
Int digitalInput3 = 3; zeichnen
Int digitalInput5 = 5; Farbe ändern
Int digitalInput7 = 7; klar
Int-LEDpin = 13;
Variable zum Speichern des Werts
Int Wert3 = '0';
Int-Wert5 = '0';
Int value7 = '0';
void setup()
{
Pin-Modi zu erklären
pinMode(digitalInput3,OUTPUT);
pinMode(digitalInput5,OUTPUT);
pinMode(digitalInput7,OUTPUT);
pinMode(LEDpin,OUTPUT);
Serial.Begin(9600);
}
void loop()
{
Lesen Sie den Wert auf Digitaleingang
Wert3 = digitalRead(3);
Schreiben Sie diesen Wert an die Kontrolle LED pin
digitalWrite(LEDpin,value3);
Schalter zeichnen wird überprüft
Wenn die Wert6 hoch ist dann schicken Sie die Buchstaben "Y" anderes senden "N"
Serial.Print(Value3);
Wenn (Wert3) {}
Serial.Print ("Y");
}
anderes
{
Serial.Print ("N");
}
Schalter zu verfärben wird geprüft
Wenn die Wert6 hoch ist dann schicken Sie die Buchstaben "E" anderes senden "N"
Wert5 = digitalRead(5);
Wenn (Wert5) {}
Serial.Print ("E");
}
anderes
{
Serial.Print ("N");
}
value7 = digitalRead(7);
Umstellung auf Bildschirm zu löschen wird überprüft
Serial.Print (value7);
Wenn (value7) {}
Serial.Print ("C");
}
anderes
{
Serial.Print ("L");
}
xCoord = analogRead(0);
yCoord = analogRead(1);
Sprintf (Coords, "%d, %d","xCoord, yCoord);
Serial.println(coords);
Delay(5);
}
--------------------------------------------------------
--------------------------------------------------------
Verarbeitungscode
Etch-a-Sketch10
von Trevor Shannon
//
anhand der Grafik
von David A. Mellis
geändert von Cdubois 7/2011
Import processing.serial.*;
Serielle Schnittstelle;
Buff String = "";
String buff1 = "";
String buff2 = "";
String buff0 = "";
String ClearScreen = "NO";
String StopDraw = "NO";
NewColor String = "NO";
Moveit String = "NO";
Stopit String = "NO";
String Geldmarkterstmals = "YES";
Char c = 'H'; Test für das clearing
Char d = 'H'; Test für Zeichnung
Int X = 0;
Int y = 0;
Int Oldx = 0;
oldy Int = 0;
Int ein = 0;
Int Index = 0;
Int NEWLINE = 10;
Speichern Sie die letzten 10 Werte erhalten, so dass wir ihnen grafisch darstellen können.
Int [] Valuesx = new Int [10];
Int [] Valuesy = new Int [10];
Variablen für Farbe
Backg Farbe = Farbe (0, 0, 0);
farbige Linien = color(348,90,90);
void setup()
{
Size(1023,512);
frameRate(10);
Port = neue Seriennummer (dieser, "COM5", 9600);
Wenn Sie den Namen des Ports verwendet durch das Arduino-Board kennen Sie
können sie direkt wie folgt angeben.
Port = neue Seriennummer (dieser, "COM1", 9600);
Background(Backg);
}
// ----------------------------------------------------------
// ------------------------------------------------------------
void draw()
{
drawlines();
movecursor();
selectcol();
checkswitches();
(port.available() > 0)
{
serialEvent(port.read());
}
}
// ----------------------------------------------------------
Funktionen
// =========================================================
// ===========================================================
void selectcol()
{
Wenn (NewColor == "YES") {}
PFont Schrift;
Schriftart = loadFont("Serif.plain-16.vlw");
textFont(font);
Fill(255,255,255);
Text ("wählen Sie eine Farbe", 25, 25);
Fill(348,90,90);
Text ("rot - Taste R", 25, 45);
Fill(237,151,12);
Text ("Orange - press O", 25, 65);
Fill(236,237,12);
Text ("Yellow - Y betätigen", 25, 85);
Fill(12,237,28);
Text ("Grün - Presse G", 25, 105);
Fill(12,47,237);
Text ("Blue - Taste B", 25, 125);
}
Else {}
PFont Schrift;
Schriftart = loadFont("Serif.plain-16.vlw");
textFont(font);
Fill(0,0,0);
Text ("wählen Sie eine Farbe", 25, 25);
Text ("rot - Taste R", 25, 45);
Text ("Orange - press O", 25, 65);
Text ("Yellow - Y betätigen", 25, 85);
Text ("Grün - Presse G", 25, 105);
Text ("Blue - Taste B", 25, 125);
}
}
// ============================================================
// ============================================================
// ============================================================
// ============================================================
// ============================================================
// ============================================================
Jetzt haben Sie sich Töpfe so Linien zeichnen möchten
void drawlines() {}
Wenn (Stopit == "Nein") {}
für (Int ich = 0; ich < 9; i ++) {}
Stroke(Lines);
strokeWeight(4);
Smooth();
Point(x,y);
Linie (1023 - Valuesx [i], 512 - Valuesy [i], 1023-Valuesx [i + 1], 512 - Valuesy [i + 1]);
}
}
}
// ===============================================================
// ==============================================================
void serialEvent(int serial)
{
Wenn (serielle! = Zeilenumbruch) {}
Speichern Sie alle Zeichen in der Zeile.
Buff += char(serial);
}
Else {}
Am Ende jeder Zeile zeichnet sich durch zwei Zeichen, ein Wagen
Rückkehr und einen Zeilenumbruch. Wir sind hier, weil wir einen Zeilenumbruch bekommen haben,
aber wir müssen noch den Wagenrücklauf abzustreifen.
Buff = buff.substring (0, buff.length()-1);
String []-Liste = Split (Buff, ',');
Lesen Sie die Zeichenfolge
Wenn die Schaltfläche "Vollbild" gedrückt wurde, wird eine "C"
die 4. Zeichenposition
Char c = buff.charAt(4);
Wenn nicht mehr zeichnen möchten, eine "N" an erster Stelle
Char d = buff.charAt(0);
Wenn löschen möchten, eine "E" werden im 2. Char Position
Char-e = buff.charAt(2);
buff1 = List [3];
buff2 = List [4];
habe eine N müssen also Zeichnung zu stoppen
Wenn (d == ' n ') {}
StopDraw = "YES";
}
anderes
{
StopDraw = "NO";
}
Löscht den Bildschirm
habe eine C müssen also so schnell wie möglich freimachen
Wenn (c == 'C') {}
ClearScreen = "YES";
}
anderes
{
ClearScreen = "NO";
}
Farben ändern
habe eine E müssen also Text in die Ecke stellen
und warten auf Auswahl
Wenn (e == 'E') {}
NewColor = "YES";
}
anderes
{
NewColor = "NO";
}
Analysiert die Zeichenfolge in eine ganze Zahl. Wir teilen durch 4, weil
analoge Eingänge gehen von 0 bis 1023 während Farben in Bearbeitung
nur gehen von 0 bis 255.
X = Integer.parseInt (buff1) / 1;
y = Integer.parseInt (buff2) / 2;
println(x);
println(y);
Löschen Sie den Wert von "Buff"
Buff = "";
Erstellen Sie ein Array von zehn Punkten für die Linie
für (Int ich = 0; ich < 9; i ++)
{
Valuesx [i] = Valuesx [i + 1];
Valuesy [i] = Valuesy [i + 1];
}
Das Array den empfangenen Wert hinzufügen.
Valuesx [9] = X;
Valuesy [9] = y;
}
}
// ================================================
// -------------------------------------------------
void movecursor()
{
an andere Stelle verschieben möchten
wollen Sie also Punkt verschieben, aber möchte es verschwinden wie es bewegt
Wenn ((Stopit == "YES") & & (Moveit == "YES")) {}
Löschen Sie alte Punkt
If(a >0) {}
Stroke(Backg);
Punkt (Oldx, oldy);
}
für (Int ich = 0; ich < 9; i ++) {}
Stroke(255,255,255);
strokeWeight(4);
Punkt (1023 - X, 512 - y);
Speicherort für das nächste Mal gelöscht werden
//
Oldx = 1023 - X;
Oldy = 512 - y;
ein = a + 1;
}
}
// ================================================
// -------------------------------------------------
void checkswitches()
{
Jetzt ist es Zeit, Schalter Änderungen testen
Wenn ((StopDraw == "YES") & & (ClearScreen == "YES")) {}
StopIT = "YES";
Background(0);
}
Könnte hier bekommen, wenn die StopDraw eingeschaltet aber nicht ClearScreen ist
d.h. nur wollen Sie die Positionierung ohne Zeichnung
Wenn ((StopDraw == "YES") & & (ClearScreen == "Nein")) {}
StopIT = "YES";
Moveit = "YES";
}
Wenn Stopdraw nicht gewechselt haben, dann nichts tun
Wenn (StopDraw == "Nein") {}
StopIT = "NO";
Moveit = "NO";
}
}
// ================================================
// -------------------------------------------------
// ================================================
// -------------------------------------------------
void keyPressed()
{
rot
Wenn (Taste "R" == || Schlüssel == 'R') {}
Linien = color(348,90,90);
}
Orange
Wenn (Schlüssel == ' o ' || Schlüssel == ' o ') {}
Linien = color(237,151,12);
}
gelb
Wenn (Schlüssel == 'y' || Schlüssel == 'Y') {}
Linien = color(236,237,12);
}
Grün
Wenn (Taste 'g' == || Schlüssel == 'G') {}
Linien = color(12,237,28);
}
Blau
Wenn (Taste 'b' == || Schlüssel == 'B') {}
Linien = color(12,47,237);
}
}
Ein kurzes Video von ihm in Aktion folgt: