Etch-a-Sketch - w/Arduino & traitement

j’ai fait celui-ci pour aider à en savoir plus sur le traitement et comment il s’intègre avec Arduino.

Fondamentalement, ce que j’ai est la suivante :

Une Arduino Duemilenova qui se trouve dans un vieux coffre bande.   L’Arduino possède 2 potentiomètres attachés à elle.  L’un représente l’axe des x et l’autre de l’axe des y coordonnées.   J’ai collé des rouge poignées de valeurs aux pots de plomberie.  Car on tourne des pots, la sortie va vers les broches analogiques 0 et 1.  Il est mappé à une valeur comprise entre 0 - 1023 pour x et y coordonnées.

Puis il est envoyé sous forme de flux série pour l’ordinateur portable qui a un croquis de traitement en cours d’exécution.  Physiquement, il y a un câble USB reliant l’Arduino et l’ordinateur portable.

Cette esquisse mappe le 0-1023 à une position sur l’écran et trace un point là.

MAIS les choses ne sont pas aussi simple que cela pour ce projet ;

J’ai ajouté 3 interrupteurs à l’Arduino
1. - pour permettre le tirage aura lieu.  En tournant ce off, on peut déplacer le point où le dessin va commencer.  Croquis peuvent être séparés.

2. pour effacer l’écran.  Faut être prudent en frappant ce commutateur comme il effacera l’écran.

3. pour permettre un changement de couleur.  Une table de choix de couleur apparaît. En appuyant sur le bouton sur le clavier, on peut changer la couleur.

Chacun de ces commutateurs envoie un caractère unique dans le flux de série lorsqu’ils sont activés.

L’esquisse de traitement aussi cherche ces caractères et réagit en conséquence.

Aussi j’ai joué un peu avec la taille de l’écran pour mon ordinateur portable qui a causé quelques modifications du code.

Le code que j’ai utilisé est inférieur à: premier code Arduino, puis le code de traitement.  Code de l’Arduino et le Processinmg a commencé avec une copie de quelqu'un d’autre qui je reconnais dans les commentaires.   Le Ardiuno est assez simple avec les pots va des broches analogiques 0 et 1 et chaque interrupteur doit être sur une broche numérique, soit 3, 5 ou 7.

Le code de traitement est fortement modifié par moi pour obtenir les options de couleurs.

Arduino :

/*
* Etch-a-Sketch_wswitches
*
* Un programme simple pour lire les deux potentiomètres connecté à analogique 0 et 1, interpréter comme une paire ordonnée (x, y)
* et envoyez-les par série à l’ordinateur
*
* basé sur le graphique : http://www.arduino.cc/en/Tutorial/Graph
* 7/2011 - mise à jour par cdubois
*/

#include < Stdio.h >

pour pots
int xCoord ;
int yCoord ;
coords Char [10] ;

pour les interrupteurs
variables d’entrée broche et LED de contrôle
7 entrée consiste à vider l’écran
entrée n ° 3 est d’abord redessinant
entrée 5 est de changer de couleur
int digitalInput3 = 3 ;  tirage au sort
int digitalInput5 = 5 ;  changer de couleur
int digitalInput7 = 7 ;  claire
int LEDpin = 13 ;
variable pour stocker la valeur
value3 int = « 0 » ;
valeur5 int = « 0 » ;
valeur7 int = « 0 » ;

void setup()
{
déclarer les modes de broche

pinMode(digitalInput3,OUTPUT) ;
pinMode(digitalInput5,OUTPUT) ;
pinMode(digitalInput7,OUTPUT) ;
pinMode(LEDpin,OUTPUT) ;

Serial.Begin(9600) ;
}

void loop()
{
lire la valeur sur l’entrée numérique
value3 = digitalRead(3) ;

écrire cette valeur dans la broche de commande LED
digitalWrite(LEDpin,value3) ;

interrupteur à tirer est vérifiée
Si la valeur6 est élevée puis envoyer l’autre envoi de lettre « Y » « N »
Serial.Print(value3) ;
Si (value3) {}
Serial.Print ("Y") ;
}
d’autre
{
Serial.Print (« N ») ;
}

faire changer de couleur est vérifiée
Si la valeur6 est élevée puis envoyer l’autre envoi de lettre « E » « N »

valeur5 = digitalRead(5) ;
Si (valeur5) {}
Serial.Print (« E ») ;
}
d’autre
{
Serial.Print (« N ») ;
}

valeur7 = digitalRead(7) ;
commutateur pour effacer l’écran est vérifiée
Serial.Print (valeur7) ;
Si (valeur7) {}
Serial.Print ("C,") ;
}
d’autre
{
Serial.Print (« L ») ;
}


xCoord = analogRead(0) ;
yCoord = analogRead(1) ;
sprintf (coords, « %d, %d », xCoord, yCoord) ;
Serial.println(Coords) ;


Delay(5) ;

}

--------------------------------------------------------
--------------------------------------------------------

Code de traitement

Etch-a-Sketch10
par Trevor Shannon
//
basé sur le graphique
par David A. Mellis
modifié par cdubois/7/2011

Import processing.serial.* ;

Port série ;
Buff de String = "" ;
String buff1 = "" ;
String buff2 = "" ;
String buff0 = "" ;
String clearScreen = « NO » ;
String stopDraw = « NO » ;
String newColor = « NO » ;
String moveit = « NO » ;
String stopit = « NO » ;
String firsttime = « YES » ;
char c = « H » ;  test pour la compensation
char d = « H » ; test pour le dessin

int x = 0 ;
int y = 0 ;

int oldx = 0 ;
oldy int = 0 ;
int a = 0 ;

int index = 0 ;
int NEWLINE = 10 ;

Stocker les 10 dernières valeurs reçus donc nous pouvons leur graphe.
int [] valuesx = new int [10] ;
int [] valuesy = new int [10] ;

variables pour la couleur
backg de couleur = couleur (0, 0, 0) ;
lignes de couleur = color(348,90,90) ;

void setup()
{
Size(1023,512) ;
frameRate(10) ;
port = nouvelle série (this, "COM5", 9600) ;

Si vous connaissez le nom du port utilisé par la carte Arduino, vous
Il peut spécifier directement comme ça.
port = nouvelle série (this, "COM1", 9600) ;

Background(BACKG) ;
}

// ----------------------------------------------------------
// ------------------------------------------------------------

void draw()
{

DrawLines() ;
movecursor() ;
selectcol() ;

checkswitches() ;

while (port.available() > 0)
{
serialEvent(port.read()) ;
}
}

// ----------------------------------------------------------
Fonctions
// =========================================================
// ===========================================================

Sub selectcol()
{
Si (newColor == « Oui ») {}
PFont polices ;
police = loadFont("Serif.plain-16.vlw") ;
textFont(font) ;
Fill(255,255,255) ;
texte ("sélectionner une couleur", 25, 25) ;
Fill(348,90,90) ;
texte ("Red - presse R », 25, 45) ;

Fill(237,151,12) ;
texte (« Orange - Appuyez sur O », 25, 65) ;

Fill(236,237,12) ;
texte (« Jaune - Appuyez sur O », 25, 85) ;

Fill(12,237,28) ;
texte (« Green - Appuyez sur G », 25, 105) ;

Fill(12,47,237) ;
texte (« Blue - Appuyez sur B », 25, 125) ;
}
else {}
PFont polices ;
police = loadFont("Serif.plain-16.vlw") ;
textFont(font) ;
Fill(0,0,0) ;
texte ("sélectionner une couleur", 25, 25) ;
texte ("Red - presse R », 25, 45) ;
texte (« Orange - Appuyez sur O », 25, 65) ;
texte (« Jaune - Appuyez sur O », 25, 85) ;
texte (« Green - Appuyez sur G », 25, 105) ;
texte (« Blue - Appuyez sur B », 25, 125) ;
}


}
// ============================================================
// ============================================================
// ============================================================

// ============================================================
// ============================================================
// ============================================================
maintenant ont tourné pots donc envie de tracer des lignes
void drawlines() {}
Si (stopit == « NO ») {}
pour (int i = 0; i < 9; i ++) {}
Stroke(Lines) ;
strokeWeight(4) ;
Smooth() ;

point(x,y) ;
ligne (1023 - valuesx [i], 512 - valuesy [i], 1023-valuesx [i + 1], 512 - valuesy [i + 1]) ;
}
}
}

// ===============================================================
// ==============================================================

Sub serialEvent(int serial)
{
Si (série! = saut de ligne) {}
Rangez tous les caractères sur la ligne.
Buff += char(serial) ;
}
else {}
La fin de chaque ligne est marquée par deux personnages, un chariot
retour et un saut de ligne.  Nous sommes ici parce que nous avons obtenu un saut de ligne,
mais encore faut-il enlever le retour chariot.
Buff = buff.substring (0, buff.length()-1) ;


Liste de chaînes [] = split (chamois, ',') ;
lire la chaîne
Si le bouton efface l’écran a été activé, un « C » sera en
la 4e position de caractère
char c = buff.charAt(4) ;
Si n’est plus envie de dessiner, un « N » sera en première position
char d = buff.charAt(0) ;
Si souhaitez effacer, un « E » sera en 2ème postion de char
Char e = buff.charAt(2) ;

buff1 = liste [3] ;
buff2 = liste [4] ;

ont vu un N donc besoin d’arrêter le dessin
Si (d == ' n ') {}

stopDraw = « YES » ;

}
d’autre
{
stopDraw = « NO » ;
}
Effacer l’écran
ont vu un C tellement besoin d’effacer dès que possible
Si (c == « C ») {}

clearScreen = « YES » ;

}
d’autre
{
clearScreen = « NO » ;
}




changer les couleurs
ont vu un E donc besoin de mettre du texte en coin
et attendez la sélection
Si (e == « E ») {}

newColor = « YES » ;

}
d’autre
{
newColor = « NO » ;
}


Analyser la chaîne en un entier.  On divise par 4 parce que
entrées analogiques vont de 0 à 1023 tandis que les couleurs dans le traitement
seulement aller de 0 à 255.
x = Integer.parseInt (buff1) / 1 ;
y = Integer.parseInt (buff2) / 2 ;

println(x) ;
println(y) ;

Effacer la valeur du « chamois »
Buff = "" ;
créer un tableau de dix points pour la ligne
pour (int i = 0; i < 9; i ++)
{
valuesx [i] = valuesx [i + 1] ;
valuesy [i] = valuesy [i + 1] ;
}

Ajoutez la valeur reçue au tableau.
valuesx [9] = x ;
valuesy [9] = y ;

}
}

//  ================================================
// -------------------------------------------------
Sub movecursor()
{
déplacer vers l’endroit différent
Si voulez déplacer point mais il veux disparaître telle qu’elle se déplace
Si ((stopit == « Oui ») & & (moveit == « Oui »)) {}
effacer l’ancien point
if(a >0) {}
Stroke(BACKG) ;

point (oldx, oldy) ;
}



pour (int i = 0; i < 9; i ++) {}
Stroke(255,255,255) ;
strokeWeight(4) ;
point (1023 - x, 512 - y) ;
enregistrer l’emplacement à effacer la prochaine fois
//

oldx = 1023 - x ;
oldy = 512 - y ;

un = un + 1 ;

}
}

//  ================================================
// -------------------------------------------------
Sub checkswitches()
{
Il est maintenant temps de tester les modifications de l’interrupteur

Si ((stopDraw == « Oui ») & & (clearScreen == « Oui »)) {}
stopit = « YES » ;
Background(0) ;
}


Pourrait arriver si stopDraw commutateur est activé mais pas clearScreen
Je veux dire juste déplacer le positionnement sans dessin

Si ((stopDraw == « Oui ») & & (clearScreen == « N »)) {}
stopit = « YES » ;
moveit = « YES » ;
}


Si stopdraw pas sous tension, puis ne rien
Si (stopDraw == « NO ») {}
stopit = « NO » ;
moveit = « NO » ;

}

}

//  ================================================
// -------------------------------------------------
//  ================================================
// -------------------------------------------------
Sub keyPressed()
{

rouge
Si (clé == « r » || clé == « R ») {}
lignes = color(348,90,90) ;
}

orange
Si (clé == ' o ' || clé == ' o ') {}
lignes = color(237,151,12) ;
}

jaune
Si (clé == « y » || clé == « Y ») {}
lignes = color(236,237,12) ;
}

vert
Si (clé == « g » || clé == « G ») {}
lignes = color(12,237,28) ;
}
bleu
Si (clé == « b » || clé == « B ») {}
lignes = color(12,47,237) ;
}




}

S’ensuit une courte vidéo d’elle en action :

Mots clés: Arduino, USB, Traitement, Etch, Croquis

Articles Liés

Arduino basé Etch A Sketch Laser Cutter.

Arduino basé Etch A Sketch Laser Cutter.

Dans ce projet, je prends un Arduino Pro Mini Connectez-le à une coutume fait Etch A Sketch panneau et il permet de contrôler un museau noir laser cutter. Le résultat est des heures de plaisir de découpe laser fou, qui nous aura autour de la plupart
Arduino Etch-A-Sketch horloge

Arduino Etch-A-Sketch horloge

que j'ai vu différents Arduino conduit Etch-A-Sketch horloges sur le web, mais aucun avec des instructions (est-ce une sorte de secret ? Quelqu'un envisage sur rend riche sur le marché mondial de l'horloge Etch-A-Sketch?). J'ai utilisé Arduino, mais
Arduino contrôlée poche Etch A Sketch Random Walk Simulation

Arduino contrôlée poche Etch A Sketch Random Walk Simulation

ce projet est le résultat de Wal-Mart, achat d'impulsion des voies de départ de format de poche Etch A Sketch pour 3,99 $.Deux moteurs pas à pas conduire les arbres de bouton d'Etch A Sketch, et un moteur d'asservissement flips Etch A Sketch pour eff
Telecran (Etch a Sketch) + Arduino = Telecranduino !

Telecran (Etch a Sketch) + Arduino = Telecranduino !

je suis tombé sur un tas de moteurs pas à pas et je cherche depuis pour un projet à faire avec les enfants.Un vieux Telecran (Français pour Etch-a-Sketch) plus tard, nous sommes en affaires !Ce que j'ai utilisé pour ce projet :-un arduino Uno-2 moteu
EtchABot : Une CNC polyvalente Etch A Sketch

EtchABot : Une CNC polyvalente Etch A Sketch

La EtchABot utilise un Arduino pour transformer une Etch A Sketch en une effacement automatique machine à dessiner CNC (Computer Numerical Control). Il est loin d'être le premier motorisé Etch A Sketch sur l'internet. Autres projets ont utilisé des m
SK3TCH - Balance Board contrôlé Etch-A-Sketch

SK3TCH - Balance Board contrôlé Etch-A-Sketch

SK3TCHComment utiliser une Wii Balance Board pour contrôler une Etch-A-SketchWindows uniquementTable des matières :1. intro et nomenclature2. gears3. mise en place du cadre4. montage5. connexion WiiMote et Balance Board6. GlovePIE7. Arduino + contrôl
Virtuel Etch A Sketch

Virtuel Etch A Sketch

The Etch A Sketch : célèbre, créatif et unique. Malheureusement je n'ai aucune idée où celle de mon enfance est, j'ai décidé de faire mes propres virtuel ! Check it out (et mes compétences en dessin terrible) ci-dessous.Cette Etch A Sketch est tout à
Etch-a-Sketch LOGO - EASiLOGO

Etch-a-Sketch LOGO - EASiLOGO

Ce que vous obtenez lorsque vous traversez une tortue avec un Etch-a-Sketch ?Etch-A-Sketch LOGO interactif - « EASiLOGO » !C'est le premier langage de programmation conçu spécifiquement pour le jouet célèbre monde de Ohio Arts - le Etch-a-Sketch. Si
Robot de dessin de peinture murale de 100 $ (fonctionne aussi comme un géant etch-a-sketch)

Robot de dessin de peinture murale de 100 $ (fonctionne aussi comme un géant etch-a-sketch)

en vedette sur Hack-un-jour!Ce que j'aime sur les robots, c'est que vous pouvez faire une chose qui rend les autres choses.  Meta Oui !  Il utilise gcode tirage toute image que vous aimez, ou vous pouvez conduire autour comme une etch-a-sketch.  Vous
LED Etch-a-Sketch (Instructable complet)

LED Etch-a-Sketch (Instructable complet)

My LED Etch-a-Sketch est mon premier projet électronique dûment rempli. Quand je suis arrivé en Electronique, que je cherchais à commencer par un projet et Pendant que vous naviguez sur Sparkfun.com je suis tombé sur des matrices de LED et j'ai su qu
NES contrôlée Etch-A-Sketch

NES contrôlée Etch-A-Sketch

S'appuyant sur une etch-a-sketch à l'aide d'un contrôleur d'origine Nintendo. J'ai raccordé les boutons etch-a-sketch pour moteurs pas à pas, qui sont ensuite contrôlées par un microcontrôleur Arduino. Le programme Arduino, que j'ai écrit prend des s
VHDL Etch-a-Sketch

VHDL Etch-a-Sketch

Pour notre projet Final de 133 CPE à Cal Poly, San Luis Obispo, nous avons construit une Etch-a-Sketch à l'aide de VHDL sur le plateau de nexys 3 Diligant. Une planche nexys 3 qui peut construire des circuits de logique sans se soucier des interfaces
Informatisé de Etch a Sketch

Informatisé de Etch a Sketch

lorsque les seigneurs de robot prennent en charge, ils auront besoin pour utiliser nos etch-a-sketches. Voici comment faire un ordinateur attirer l'art vectoriel en utilisant votre jouet d'enfance préférés.** Que je traverse et un tas de vieux instru
Etch-i-Sketch

Etch-i-Sketch

« Nous ne pouvons pas rivaliser avec qui! »--Steve Jobs('s doppleganger)« « Zune » ?  Ce que nous avons pensé ?  C'est ce que nous avons besoin. "--Bill Gates('s likely thoughts)« Mais qui ont besoin d'une source d'alimentation de ruines le point...