Etch-a-Sketch - w/Arduino y Processing

hice este para ayudar a aprender sobre el proceso y cómo se integra con Arduino.

Básicamente lo que tengo es esto:

Un Arduino Duemilenova que está ubicado en una vieja caja fuerte de banda.   El Arduino tiene 2 potenciómetros conectados a él.  Uno representa el eje x y el otro el eje y coordenadas.   Pegué algunos rojo valores asas a los cacharros de plomería.  Como uno da vuelta a las ollas, la salida va a los pines analógicos 0 y 1.  Esto se asigna un valor entre 0 - 1023 para x e y coordenadas.

Luego es enviado como una corriente serial a la computadora portátil que tiene un bosquejo del proceso de funcionamiento.  Físicamente es un cable USB conectar el Arduino y el portátil.

Este esbozo 0-1023 asigna a una posición en la pantalla y traza un punto allí.

PERO las cosas no son así de sencillo para este proyecto;

He añadido 3 cambia a Arduino
1. - para permitir que el dibujo se realice.  Girando esto, uno puede mover el punto donde comenzará el dibujo.  Bocetos pueden ser separado.

2. para borrar la pantalla.  Debe tener cuidado al golpear este interruptor como se borrará la pantalla.

3. para permitir un cambio de color.  Viene una tabla de selección de colores. Pulsando el botón correcto en el teclado, uno puede cambiar el color.

Cada uno de estos interruptores envía un carácter único en la serie corriente cuando son activados.

El bosquejo del proceso también busca estos personajes y reacciona en consecuencia.

También jugué con tamaño de la pantalla de mi laptop que provocó algunos cambios en el código.

El código que he usado es a continuación: primero el código de Arduino y, a continuación, el código de procesamiento.  El código de la Arduino y Processinmg comenzó con una copia de otra persona que reconozco en los comentarios.   El Ardiuno es muy simple con las macetas van a los pines analógicos 0 y 1 y cada interruptor va a un pin digital, 3,5 o 7.

El código de procesamiento está fuertemente modificado por mi para obtener las opciones de colores.

Arduino:

/*
* Etch-a-Sketch_wswitches
*
* Un programa sencillo para leer dos potenciómetros conectados a analógico 0 y 1, interpretar como un par ordenado (x, y)
* y enviarlos vía serial a la computadora
*
* basado en gráfico: http://www.arduino.cc/en/Tutorial/Graph
* 7/2011 - modificado por cdubois
*/

#include < Stdio.h >

para macetas
parámetros CoordX int;
int CoordY;
coordenadas de Char [10];

para los interruptores
variables de entrada de pin y LED de control
entrada 7 es para borrar la pantalla
entrada 3 es para comenzar a dibujar otra vez
entrada 5 es para cambiar de color
int digitalInput3 = 3;  sorteo
int digitalInput5 = 5;  cambiar color
int digitalInput7 = 7;  claro
int LEDpin = 13;
variable para almacenar el valor
int valor3 = '0';
int value5 = '0';
int value7 = '0';

void setup()
{
declarar los modos pin

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

Serial.Begin(9600);
}

void loop()
{
leer el valor de entrada digital
valor3 = digitalRead(3);

escribir este valor en el pin de control LED
digitalWrite(LEDpin,value3);

se comprueba el interruptor para dibujar
Si el PH6 es alta entonces enviar la letra "Y" más de enviar "N"
Serial.Print(value3);
Si {} (valor3)
Serial.Print ("Y,");
}
otra cosa
{
Serial.Print ("N,");
}

interruptor para cambiar de color se comprueba
Si el PH6 es alta entonces enviar la letra "E" más de enviar "N"

value5 = digitalRead(5);
Si (value5) {}
Serial.Print ("E");
}
otra cosa
{
Serial.Print ("N,");
}

value7 = digitalRead(7);
se comprueba el interruptor para borrar la pantalla
Serial.Print (valor7);
Si (value7) {}
Serial.Print ("C,");
}
otra cosa
{
Serial.Print ("L,");
}


parámetros CoordX = analogRead(0);
CoordY = analogRead(1);
sprintf (coords, "%d, %d, parámetros CoordX, CoordY);
Serial.println(coords);


Delay(5);

}

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

Código de procesamiento

Etch-a-Sketch10
por Trevor Shannon
//
basado en gráfico
por David A. Mellis
modificado por cdubois/7/2011

Import processing.serial.*;

Puerto serial;
Buff de cadena = "";
Cadena buff1 = "";
Cadena buff2 = "";
String buff0 = "";
ClearScreen de cadena = "NO";
String stopDraw = "NO";
Cadena newColor = "NO";
Cadena moveit = "NO";
Cadena de stopit = "NO";
Cadena firsttime = "YES";
char c = 'H';  prueba para claro
d char = 'H'; prueba de dibujo

int x = 0;
int y = 0;

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

Índice de int = 0;
nueva línea de int = 10;

Almacenar los últimos 10 valores recibidos por lo que nosotros les podemos ver.
int [] valuesx = new int [10];
int [] valuesy = new int [10];

variables de color
backg de color = color (0, 0, 0);
líneas de color = color(348,90,90);

void setup()
{
Size(1023,512);
frameRate(10);
puerto = serie nueva (este, "COM5", 9600);

Si sabes el nombre del puerto que utiliza la placa Arduino,
puede especificarlo directamente como esta.
puerto = serie nueva (este, "COM1", 9600);

Background(backg);
}

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

void draw()
{

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

checkswitches();

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

// ----------------------------------------------------------
Funciones
// =========================================================
// ===========================================================

void selectcol()
{
Si (newColor == "Sí") {}
PFont fuente;
Font = loadFont("Serif.plain-16.vlw");
textFont(font);
Fill(255,255,255);
texto ("seleccionar un Color", 25, 25);
Fill(348,90,90);
texto ("rojo - pulse R", 25, 45);

Fill(237,151,12);
texto ("Naranja - O de prensa", 25, 65);

Fill(236,237,12);
texto ("Amarillo - Y de prensa", 25, 85);

Fill(12,237,28);
texto ("Verde - prensa G", 25, 105);

Fill(12,47,237);
texto ("Azul - Presione la tecla B", 25, 125);
}
Else {}
PFont fuente;
Font = loadFont("Serif.plain-16.vlw");
textFont(font);
Fill(0,0,0);
texto ("seleccionar un Color", 25, 25);
texto ("rojo - pulse R", 25, 45);
texto ("Naranja - O de prensa", 25, 65);
texto ("Amarillo - Y de prensa", 25, 85);
texto ("Verde - prensa G", 25, 105);
texto ("Azul - Presione la tecla B", 25, 125);
}


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

// ============================================================
// ============================================================
// ============================================================
Ahora tenemos ollas torneadas así quiero dibujar líneas
void drawlines() {}
Si (stopit == "NO") {}
para (int i = 0; i < 9; i ++) {}
Stroke(Lines);
strokeWeight(4);
Smooth();

Point(x,y);
línea (1023 - valuesx [i], 512 - valuesy [i], 1023-valuesx [+ 1], 512 - valuesy [+ 1]);
}
}
}

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

void serialEvent(int serial)
{
Si (serie! = nueva línea) {}
Almacenar todos los caracteres en la línea.
Buff += char(serial);
}
Else {}
Al final de cada línea está marcado por dos personajes, un carro
regreso y una nueva línea.  Estamos aquí porque hemos conseguido una nueva línea,
pero todavía tenemos que pelar apagado el retorno de carro.
Buff = buff.substring (0, buff.length()-1);


Lista de cadena [] = split (buff, ',');
leer la cadena
Si se presiona el botón de limpiar la pantalla, una "C" estará en
la 4 º posición del carácter
char c = buff.charAt(4);
Si ya no desea dibujar, una "N" será en la primera posición
d char = buff.charAt(0);
Si desea borrar, una "E" será en 2 º posición de char
char e = buff.charAt(2);

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

han visto a N tan necesario detener el dibujo
Si (d == ' n ') {}

stopDraw = "YES";

}
otra cosa
{
stopDraw = "NO";
}
Limpiar la pantalla
han visto a C tan necesario borrar tan pronto como sea posible
Si (c == 'C') {}

clearScreen = "YES";

}
otra cosa
{
clearScreen = "NO";
}




cambiar los colores
han visto una E así hay que poner texto en esquina
y espera para la selección
Si (e == 'E') {}

newColor = "YES";

}
otra cosa
{
newColor = "NO";
}


Analizar la cadena en un entero.  Dividimos por 4, porque
entradas analógicas van desde 0 hasta 1023 y colores en el proceso de
sólo van de 0 a 255.
x = Integer.parseInt (buff1) / 1;
y = Integer.parseInt (buff2) / 2;

println(x);
println(y);

Borrar el valor de "buff"
Buff = "";
crear una matriz de diez puntos para la línea de
para (int i = 0; i < 9; i ++)
{
valuesx [i] = valuesx [i + 1];
valuesy [i] = valuesy [i + 1];
}

Agregue el valor recibido en la matriz.
valuesx [9] = x;
valuesy [9] = y;

}
}

//  ================================================
// -------------------------------------------------
void movecursor()
{
desea mover a diferentes puntos
así quiere mover punto pero lo quiere desaparecer como se mueve
Si ((stopit == "Sí") & & (moveit == "YES")) {}
borrar punto viejo
if(a >0) {}
Stroke(backg);

punto (oldx, oldy);
}



para (int i = 0; i < 9; i ++) {}
Stroke(255,255,255);
strokeWeight(4);
punto (1023 - x 512 - y);
guardar ubicación para borrarse la próxima vez
//

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

a = a + 1;

}
}

//  ================================================
// -------------------------------------------------
void checkswitches()
{
ahora es tiempo de cambios de interruptor de prueba

Si ((stopDraw == "Sí") & & (clearScreen == "YES")) {}
stopit = "YES";
Background(0);
}


Podría llegar si stopDraw interruptor está encendido pero no clearScreen
es decir solo quiero mover el posicionamiento sin dibujo

Si ((stopDraw == "Sí") & & (clearScreen == "NO")) {}
stopit = "YES";
MoveIT = "YES";
}


Si stopdraw no cambia, entonces no
Si (stopDraw == "NO") {}
stopit = "NO";
MoveIT = "NO";

}

}

//  ================================================
// -------------------------------------------------
//  ================================================
// -------------------------------------------------
keyPressed() vacío
{

rojo
Si (clave == 'r' || clave == 'R') {}
líneas = color(348,90,90);
}

naranja
Si (clave == ' o ' || clave == ' o ') {}
líneas = color(237,151,12);
}

amarillo
Si (clave == 'y' || clave == 'Y') {}
líneas = color(236,237,12);
}

verde
Si (clave == 'g' || clave == 'G') {}
líneas = color(12,237,28);
}
azul
Si (clave == 'b' || clave == 'B') {}
líneas = color(12,47,237);
}




}

A continuación un pequeño video de ella en acción:

Artículos Relacionados

Controlado por Arduino bolsillo Etch A Sketch paseo aleatorio simulación

Controlado por Arduino bolsillo Etch A Sketch paseo aleatorio simulación

este proyecto es el resultado de Wal-Mart compra por impulso salida carril de Etch A Sketch de bolsillo por $3.99.Dos motores paso a paso conducen los ejes de mando de Etch A Sketch, y un motor servo gira Etch A Sketch para borrar la pantalla.  Uso a
Cortador del Laser del Etch A Sketch basados en Arduino.

Cortador del Laser del Etch A Sketch basados en Arduino.

En este proyecto tomo un Arduino Mini Pro conectarlo a un encargo hecho Etch A Sketch panel y utilizarlo para controlar un cortador del laser amarillo. El resultado es horas de diversión de corte láser loco, que nos va a tomar alrededor de la mayoría
Telecran (Etch a Sketch) + Arduino = Telecranduino!

Telecran (Etch a Sketch) + Arduino = Telecranduino!

me encontré con un montón de motores paso a paso y desde entonces he estado buscando para que un proyecto para hacer con los niños.Un viejo Telecran (Francés para Etch-a-Sketch) más tarde, estamos en el negocio!Lo que utilicé para este proyecto:-un a
Reloj de Arduino Etch-A-Sketch

Reloj de Arduino Etch-A-Sketch

he visto varios Arduino por Etch-A-Sketch relojes en la web, pero ninguno con las instrucciones (¿es algún tipo de secreto? Es alguien pensando en hacer rico en el mercado global de reloj Etch-A-Sketch?). He usado Arduino, pero nunca utilizar motores
SK3TCH - tablero de equilibrio controlado de Etch-A-Sketch

SK3TCH - tablero de equilibrio controlado de Etch-A-Sketch

SK3TCHCómo usar una Wii Balance Board para controlar un Etch-A-SketchSólo para WindowsContenido:1. intro y partes de la lista2. engranajes3. construir el marco4. Asamblea5. conectar el WiiMote y Balance Board6. GlovePIE7. Arduino + Control del Motor8
Robot dibujo mural de $100 (también funciona como un gigante etch-a-sketch)

Robot dibujo mural de $100 (también funciona como un gigante etch-a-sketch)

en Hack-a-day!Lo que me encanta de robots es que usted puede hacer una cosa que hace otras cosas.  Meta así!  Utiliza gcode dibujar cualquier imagen que te gusta, o usted puede conducirlo alrededor como un etch-a-sketch.  Puede escalar este robot has
Etch-a-Sketch LOGO - EASiLOGO

Etch-a-Sketch LOGO - EASiLOGO

¿Qué obtienes cuando cruzas una tortuga con un Etch-a-Sketch?LOGO interactivo de Etch-A-Sketch - 'EASiLOGO'!Este es el primer lenguaje de programación diseñado específicamente para el juguete famoso mundo de las artes de Ohio - Etch-a-Sketch. Si nunc
Virtual Etch A Sketch

Virtual Etch A Sketch

The Etch A Sketch: famoso, creativo y único. Lamentablemente no tengo ninguna pista donde uno desde mi infancia es, por lo que decidí hacer mi propio virtual! Compruebe hacia fuera (y mis habilidades de dibujo horrible) a continuación.Este Telesketch
NES controladas Etch-A-Sketch

NES controladas Etch-A-Sketch

Dibujo de un etch a sketch utilizando un controlador original de Nintendo. Conecté las perillas de etch a sketch a motores paso a paso, que luego son controlados por un microcontrolador Arduino. El programa de Arduino que escribí lleva las señales de
Etch a Sketch alimentación

Etch a Sketch alimentación

Como alguien que le gusta desarmar cosas electrónicas, que con frecuencia tirar cosas como LED, motores, perillas y cambia de trastos viejos con planes para reutilizarlas más tarde. Este instructable es no sólo un ejemplo de esa reutilización, pero t
Computarizado de Etch a Sketch

Computarizado de Etch a Sketch

al apoderarse de los soberanos de robot, necesitará utilizar nuestros etch-a-sketches. Aquí es cómo hacer un ordenador dibujar arte de vector con su juguete favorito de la infancia.** Que estoy atravesando y no acabado una serie de instructables viej
Etch a Sketch de LED

Etch a Sketch de LED

mi LED Etch-a-Sketch es mi primer proyecto de electrónica completamente terminada. Estoy usando cuatro 8 x 8 matrices de LED para hacer una matriz de LED de 16 x 16 superficie de dibujo. Dos potenciómetros permiten entrada de usuario para el movimien
Electroluminiscente Etch A Sketch

Electroluminiscente Etch A Sketch

Hi, aftergetting algunas cosas electroluminiscente para un ejercicio para http://hci.rwth-aachen.de/mcp1314 a jugar, que es mi (primer) intentan construir una EAS electroluminiscente (y hacer un Instructable):He utilizado:-un Telesketch (obvio :-)-lá
Cómo establecer un permanente Etch A Sketch (como profesionales)

Cómo establecer un permanente Etch A Sketch (como profesionales)

como un grabado A Sketchist yo mismo, siento que lo peor que cualquier artista EAS puede hacer por sí mismos es también conseguir conectado a uno de sus "obras de bosquejo". He visto esto suceder antes y artistas han vuelto locos tratando de pro