Etch-a-Sketch - w/Arduino & verwerking


ik heb dit een om te helpen leren over verwerking en hoe het integreert met Arduino.

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:

Gerelateerde Artikelen

Arduino gecontroleerd Pocket Etch A Sketch toevalsbeweging simulatie

Arduino gecontroleerd Pocket Etch A Sketch toevalsbeweging simulatie

dit project is het resultaat van Wal-Mart uitchecken lane impuls aankoop van zakformaat Etch A Sketch voor 3,99 dollar.Twee stappenmotoren aandrijving Etch A Sketch knop assen, en een servomotor gespiegeld Etch A Sketch om te wissen van het scherm. 
Arduino gebaseerd Etch A Sketch Laser Cutter.

Arduino gebaseerd Etch A Sketch Laser Cutter.

In dit project neem ik een Arduino Mini Pro sluit hem aan op een op maat gemaakt Etch A Sketch paneel en gebruiken om te bepalen een Blacknose laser cutter. Het resultaat is uren gek laser snijden plezier, die we ronde allermeest naar de UK Maker Fai
Arduino Etch-A-Sketch Klok

Arduino Etch-A-Sketch Klok

ik heb gezien verschillende Arduino aangedreven etsen-A-schets klokken op het web, maar niets met instructies (is het een soort van geheim? Is iemand van plan op het maken van het rijk in de mondiale markt van Etch-A-Sketch Klok?). Ik heb gebruikt Ar
SK3TCH - Balance Board gecontroleerde Etch-A-Sketch

SK3TCH - Balance Board gecontroleerde Etch-A-Sketch

SK3TCHHet gebruik van een Wii Balance Board om te controleren van een etsen-A-schetsAlleen WindowsInhoud:1. intro en onderdelen lijst2. gears3. opbouw van het Frame4. assemblage5. aansluiten van de WiiMote en Balance Board6. GlovePIE7. Arduino + moto
Virtuele Etch A Sketch

Virtuele Etch A Sketch

de Etch A Sketch: beroemde, creatieve en unieke. Helaas heb ik geen idee waar de ene uit mijn jeugd is, dus heb ik besloten om mijn eigen virtuele ervaring! Check it out (en mijn vreselijke tekenen vaardigheden) hieronder.Deze Etch A Sketch is heel g
EtchABot: Een veelzijdige CNC Etch een Sketch

EtchABot: Een veelzijdige CNC Etch een Sketch

De EtchABot maakt gebruik van een Arduino om te zetten van een Etch A Sketch in een machine voor het tekenen van CNC (Computer Numerical Control) zelf wissen. Het is verre van de eerste gemotoriseerde Etch A Sketch op het internet. Andere projecten z
Etch een Sketch Power Supply

Etch een Sketch Power Supply

Als iemand wie houdt uit elkaar te halen elektronische dingen, ik vaak trekken dingen zoals LED's, motoren, knoppen, en schakelt uit oude rommel met plannen om later opnieuw gebruiken. Dit instructable is niet alleen een voorbeeld van dat hergebruik,
Geautomatiseerd Etch een Sketch

Geautomatiseerd Etch een Sketch

wanneer de robot opperheren overneemt, zij moet gebruik maken van onze etch-a-schetsen. Hier is hoe om te laten een computer tekenen van vector kunst met behulp van uw favoriete jeugd speelgoed.** Ik ben doorlopen en afwerking van een hele reeks oude
Reuze Etch een Sketch kostuum

Reuze Etch een Sketch kostuum

dit instructable detailleert de stappen die ik ging door naar de reus Etch een Sketch kostuum voor Halloween 2008 maken. Zie het afgewerkte kostuum hieronder.Elk jaar, onze familie doet een thema kostuum, en dit jaar hebben we besloten om klassieke s
Electroluminescente Etch A Sketch

Electroluminescente Etch A Sketch

Hi, aftergetting sommige Electroluminescente spullen voor een oefening voor http://hci.rwth-aachen.de/mcp1314 te spelen, dat is mijn (eerste) probeert te bouwen een elektroluminescente EAS (en dat van een Instructable:-):Ik gebruikte:-een Etch A Sket
Hoe Set A permanente Etch A Sketch (zoals Pros)

Hoe Set A permanente Etch A Sketch (zoals Pros)

als an Etch A Sketchist mezelf, ik denk dat het ergste wat een EAS kunstenaar voor zichzelf doen kan te krijgen gehecht aan één van hun "Sketch werken". Ik heb dit gebeuren vóór en kunstenaars hebben gek proberen te beschermen hun kunstwerk. Nee
Etch een Sketch kostuum (functionele!)

Etch een Sketch kostuum (functionele!)

Hier is een tweede video met dichter tot schoten van de bedrading van de Etch een Sketch kostuum.
Aflevering 15: Hack een Etch-A-Sketch te tekenen cirkels

Aflevering 15: Hack een Etch-A-Sketch te tekenen cirkels

We hier op stomme uitvindingen hou de etsen-A-schets, maar we missen het artistieke talent om te tekenen iets goeds op het klassieke speelgoed.Dus we kwamen met een goedkope en gemakkelijke manier voor kappen van de etsen-A-schets zodat niet alleen k
Arduino / verwerking seriële LED knipperen Tutorial

Arduino / verwerking seriële LED knipperen Tutorial

seriële communicatie gebruiken voor het bijhouden van LED knipperen frequentie bij de programmering van Arduino verwerking om te knipperen van LED voor een aantal keren en het aantal cycli van opdracht ontvangen!Bezoek http://retardokiddo.blogspot.co