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 :