In principe is wat ik heb dit:
Een Arduino Duemilenova die is gevestigd in een oude band veilige stortingsdoos. De Arduino heeft 2 potentiometers eraan verbonden zijn. Een vertegenwoordigt de x-as en de andere de y-as coördinaten. Ik gelijmd wat rode loodgieter waarden ingangen naar de potten. Zoals een de potten draait, gaat de uitvoer naar de analoge pinnen 0 en 1. Dit is toegewezen op een waarde tussen 0 - 1023 voor de x- en y-coördinaten.
Vervolgens wordt het verzonden als een seriële gegevensstroom naar de laptop wie heeft een Processing Schets uitgevoerd. Fysiek is er een usbkabel tussen de Arduino en de laptop.
Deze schets de 0-1023 wordt toegewezen aan een positie op het scherm en een punt er plots.
MAAR dingen zijn niet zo eenvoudig voor dit project;
Ik heb toegevoegd 3 schakelt over naar de Arduino
1. - om de tekening plaatsvinden. Door te draaien dit uit, kan een het punt waar tekening begint verplaatsen. Schetsen kunnen gescheiden te worden.
2. om te ontruimen het scherm. Moet voorzichtig met het slaan van deze schakeloptie als het zal het wissen van het scherm.
3. met het oog op een verandering van kleur. Een inhoudsopgave kleurselecties komt. Door de juiste knop op het toetsenbord te drukken, kan men de kleur wijzigen.
Elk van deze schakelopties stuurt een uniek karakter in de seriële stroom wanneer ze worden geactiveerd.
De Processing schets ook zoekt naar deze tekens en reageert dienovereenkomstig.
Ook speelde ik rond met de grootte van het scherm voor mijn laptop waardoor sommige wijzigingen in de code.
De code die ik heb gebruikt is hieronder: eerste de Arduino-code en vervolgens de code van de verwerking. Zowel de Arduino en de Processinmg code begon met een kopie van iemand anders die ik in de commentaren erkennen. De Ardiuno is vrij eenvoudig met de potten gaan op analoge pinnen 0 en 1 en elke switch gaat naar een digital pin, ofwel 3,5 of 7.
De verwerking code is zwaar bewerkt door mij om de opties van de kleuren te krijgen.
Arduino:
/** Etch-a-Sketch_wswitches
*
* Een eenvoudig programma te lezen van twee potentiometers aangesloten op analoge 0 en 1, geïnterpreteerd als een geordend paar (x, y)
* en stuur ze via seriële naar de computer
*
* op basis van grafiek: http://www.arduino.cc/en/Tutorial/Graph
* 7/2011 - aangepast door cdubois
*/
#include < Stdio.h >
voor POTS-doeleinden
int xCoord;
int yCoord;
char coords [10];
voor wissels en kruisingen
variabelen voor invoer pin en controle LED
input 7 is het scherm wissen
ingang 3 is om te beginnen tekening opnieuw
input 5 is het wijzigen van de kleur
int digitalInput3 = 3; loting
int digitalInput5 = 5; kleur wijzigen
int digitalInput7 = 7; wissen
int LEDpin = 13;
variabele de waarde op te slaan
int Waarde3 = "0";
int value5 = '0';
int waarde7 = "0";
VOID Setup
{
verklaren van pin modi
pinMode(digitalInput3,OUTPUT);
pinMode(digitalInput5,OUTPUT);
pinMode(digitalInput7,OUTPUT);
pinMode(LEDpin,OUTPUT);
Serial.begin(9600);
}
void loop
{
luiden naar de waarde op de digitale ingang
Waarde3 = digitalRead(3);
Schrijf deze waarde naar de controle LED pin
digitalWrite(LEDpin,value3);
overschakelen naar het tekenen wordt gecontroleerd
Als de Waarde6 hoog is stuurt u de letter "Y" anders verzenden "N"
Serial.Print(value3);
Als (Waarde3) {}
Serial.Print ("Y");
}
anders
{
Serial.Print ("N");
}
schakelaar om kleur te wijzigen is ingeschakeld
Als de Waarde6 hoog is stuurt u de letter "E" anders verzenden "N"
value5 = digitalRead(5);
Als (value5) {}
Serial.Print ("E");
}
anders
{
Serial.Print ("N");
}
waarde7 = digitalRead(7);
Switch scherm wissen wordt gecontroleerd
Serial.Print (waarde7);
Als (waarde7) {}
Serial.Print ("C");
}
anders
{
Serial.Print ("L");
}
xCoord = analogRead(0);
yCoord = analogRead(1);
sprintf (coords, "%d, %d", xCoord, yCoord);
Serial.println(Coords);
delay(5);
}
--------------------------------------------------------
--------------------------------------------------------
Verwerking van Code
Etch-a-Sketch10
door Trevor Shannon
//
op basis van grafiek
door David A. Mellis
aangepast door cdubois 7/2011
importeren van processing.serial.*;
Seriële poort;
Buff string = "";
Buff1 koord = "";
Buff2 koord = "";
Buff0 koord = "";
ClearScreen koord = "Nee";
StopDraw koord = "Nee";
NewColor koord = "Nee";
Moveit koord = "Nee";
Stopit koord = "Nee";
String firsttime = "YES";
char c = 'H'; test voor de clearing
char d = 'H'; test voor tekening
int x = 0;
int y = 0;
int oldx = 0;
int oldy = 0;
int een = 0;
int index = 0;
int NEWLINE = 10;
De laatste 10 waarden ontvangen zodat wij hen kunnen grafiek opslaan.
int [] valuesx = nieuwe int [10];
int [] valuesy = nieuwe int [10];
variabelen voor kleur
backg kleur = kleur (0, 0, 0);
kleur lijnen = color(348,90,90);
VOID Setup
{
size(1023,512);
frameRate(10);
poort = nieuwe Serial (dit, "COM5", 9600);
Als u de naam van de poort die wordt gebruikt door de Arduino board, weet u
het kunt direct als dit opgeven.
poort = nieuwe Serial (dit, "COM1", 9600);
Background(backg);
}
// ----------------------------------------------------------
// ------------------------------------------------------------
VOID draw()
{
drawlines();
movecursor();
selectcol();
checkswitches();
terwijl (port.available() > 0)
{
serialEvent(port.read());
}
}
// ----------------------------------------------------------
Functies
// =========================================================
// ===========================================================
VOID selectcol()
{
Als (newColor == "YES") {}
PFont lettertype;
lettertype = loadFont("Serif.plain-16.vlw");
textFont(font);
Fill(255,255,255);
tekst ("Kies een kleur", 25, 25);
Fill(348,90,90);
tekst ("rood - pers R", 25, 45);
Fill(237,151,12);
tekst ('Orange - druk op O', 25, 65);
Fill(236,237,12);
tekst ("Geel - drukt u op J" 25, 85);
Fill(12,237,28);
tekst ('Green - druk op G', 25, 105);
Fill(12,47,237);
tekst ("Blue - druk op B", 25, 125);
}
else {}
PFont lettertype;
lettertype = loadFont("Serif.plain-16.vlw");
textFont(font);
Fill(0,0,0);
tekst ("Kies een kleur", 25, 25);
tekst ("rood - pers R", 25, 45);
tekst ('Orange - druk op O', 25, 65);
tekst ("Geel - drukt u op J" 25, 85);
tekst ('Green - druk op G', 25, 105);
tekst ("Blue - druk op B", 25, 125);
}
}
// ============================================================
// ============================================================
// ============================================================
// ============================================================
// ============================================================
// ============================================================
nu hebben gekeerd potten zo wilt om lijnen te tekenen
ongeldig drawlines() {}
Als (stopit == "Neen") {}
for (int i = 0; ik < 9; i ++) {}
Stroke(lines);
strokeWeight(4);
Smooth();
Point(x,y);
lijn (1023 - valuesx [i], 512 - valuesy [i], 1023-valuesx [i + 1], 512 - valuesy [i + 1]);
}
}
}
// ===============================================================
// ==============================================================
VOID serialEvent(int serial)
{
Als (seriële! = NEWLINE) {}
Bewaar alle tekens op de regel.
Buff += char(serial);
}
else {}
Het einde van elke regel wordt gekenmerkt door twee tekens, een rijtuig
terugkeer en een newline. We zijn hier omdat we hebben gekregen een newline,
maar we moeten nog steeds strippen af de regelterugloop.
Buff = buff.substring (0, buff.length()-1);
Lijst met tekenreeksen [] = split (buff, ',');
lezen van de tekenreeks
Als het scherm wissen knop werd ingedrukt, zullen een "C" in
de positie van het 4de teken
char c = buff.charAt(4);
Als niet langer wil vestigen, een "N" zullen in de eerste positie
char d = buff.charAt(0);
Als wilt wissen, een "E" zal in 2de char positie
char e = buff.charAt(2);
buff1 = lijst [3];
buff2 = lijst [4];
heb een N dus moeten stoppen met tekening
Als (d == 'N') {}
stopDraw = "YES";
}
anders
{
stopDraw = "Geen";
}
Wissen van het scherm
heb een C moet dus zo snel mogelijk wissen
Als (c == 'C') {}
clearScreen = "YES";
}
anders
{
clearScreen = "Geen";
}
kleuren wijzigen
heb een E dus moet tekst zetten in hoek
en wacht tot de selectie
Als (e == "E") {}
newColor = "YES";
}
anders
{
newColor = "Geen";
}
Het ontleden van de String in een geheel getal. We delen door 4 omdat
analoge ingangen gaan van 0 tot 1023, terwijl kleuren in verwerking
alleen gaan van 0 tot 255.
x = Integer.parseInt (buff1) / 1;
y = Integer.parseInt (buff2) / 2;
println(x);
println(y);
Wis de waarde van "buff"
Buff = "";
Maak een array van tien punten voor de lijn
for (int i = 0; ik < 9; i ++)
{
valuesx [i] = valuesx [i + 1];
valuesy [i] = valuesy [i + 1];
}
De ontvangen waarde toevoegen aan de matrix.
valuesx [9] = x;
valuesy [9] = y;
}
}
// ================================================
// -------------------------------------------------
VOID movecursor()
{
naar de andere plek wilt verplaatsen
dus wilt verplaatsen maar wilt het verdwijnen als het beweegt
Als ((stopit == "Ja") & & (moveit == "Ja")) {}
wissen van oude punt
if(a >0) {}
Stroke(backg);
punt (oldx, oldy);
}
for (int i = 0; ik < 9; i ++) {}
Stroke(255,255,255);
strokeWeight(4);
Wijs (1023 - x, 512 - y);
locatie worden gewist volgende keer opslaan
//
OldX = 1023 - x;
OldY = 512 - y;
een = a + 1;
}
}
// ================================================
// -------------------------------------------------
VOID checkswitches()
{
nu is het tijd om te testen van de wijzigingen van de schakelaar
Als ((stopDraw == "Ja") & & (clearScreen == "YES")) {}
stopit = "YES";
Background(0);
}
Hier kon krijgen als stopDraw schakelaar maar niet clearScreen aanstaat
IE gewoon wilt verplaatsen de positionering zonder tekening
Als ((stopDraw == "Ja") & & (clearScreen == "Neen")) {}
stopit = "YES";
MoveIt = "YES";
}
Als stopdraw niet ingeschakeld, dan niets doen
Als (stopDraw == "Neen") {}
stopit = "Geen";
MoveIt = "Geen";
}
}
// ================================================
// -------------------------------------------------
// ================================================
// -------------------------------------------------
VOID keyPressed()
{
rood
Als (toets 'r' == || toets 'R' ==) {}
lijnen = color(348,90,90);
}
Oranje
Als (sleutel == ' o ' || sleutel == ' o ') {}
lijnen = color(237,151,12);
}
geel
Als (sleutel == 'y' || sleutel == 'Y') {}
lijnen = color(236,237,12);
}
groen
Als (sleutel == 'g' || sleutel == 'G') {}
lijnen = color(12,237,28);
}
blauw
Als (sleutel == 'b' || sleutel == 'B') {}
lijnen = color(12,47,237);
}
}
Een korte video van het in actie volgt: