Paso 2: Programacion
Lo primero realizaremos es la programación de nuestro arduino UNO, el de dejamos de al final de este paso enlace de los bocetos para su descarga
CÓDIGO de ARDUINO: (Meño)
//Se declaran todas las variables que se utilizaran. char A; int d; float a,c; int b; void setup(){ //Se inicializará el monitor serial. Serial.begin(9600); //Se declaran los pines 12 y 13 como salida para prender y apagar bi led. pinMode(12, OUTPUT); pinMode(13, OUTPUT); void loop (){ //Se valida si hay algo en en monitor serial. if (Serial.available()>0) { //Se guarda en la variable el contenido que se este enviando desde el monitor serial. A=Serial.read(); //Se valida el contenido de la variable. if (A=='A'){ //Se lee el valor que se obtiene del pin analógico 0. a=analogRead(0); //Se realiza una regla de 3 y algunos cálculos aritméticos. c=float (a*5/1024); b=float(1000*(5-c)/c); //Se utiliza para DEPURACIÓN. //Serial.println(b);//Se valida el valor obtenido de los cálculos aritméticos con los rangos aproximados que tiene cada una de las resistencias. //#RESISTENCIA 1K if (b>1500 && b<2100) { Serial.println(110); } //#RESISTENCIA 4.7 K if (b>5200 && b<7200) { Serial.println(470); } //#RESISTENCIA 100 OHMS if (b>800 && b<1100) { Serial.println(100); } delay(1000); } if (A=='D'){ digitalWrite(13,LOW); digitalWrite(12,LOW); }<br> if (A=='B'){ digitalWrite(13,LOW); digitalWrite(12,HIGH); } if (A=='C'){ digitalWrite(12,LOW); digitalWrite(13,HIGH); } }
Ahora debemos empezar con la parte gráfica de nuestro juego en esta ocasión elegido hacerlo con procesamiento debido a se pueden realizar prototipos muy rápido y debido al poco tiempo tenemos en la BuildNigh es perfecto para reflejar lo queremos realizar.
Lo primero debemos hacer es descargar unas cuantas capturas de pantalla del videojuego original patio Mho podemos encontrar en Google. Con Inkscape o algún otro editor de imágenes podemos editar las imágenes para borrar el marcador de tiempo y valor de resistencia y colocar los nuestros.
Procesamiento de at de la todo "poner debemos después de eso ahora"
El código en proceso es el siguiente:
//Mho PlayGround Circuit Scribe //Bajo una Licencia Creative Commons 4.0 //Andres Sabas Enero 2015 //BuildNight Instrutable PImage screen; PImage gameover; PImage win; PImage play; boolean start00 = false; boolean control = false; int score, valor; float tiempo; color colorVerde = color (0, 255, 0);; color colorAzul=color(0,0,255);; String value; PFont font; int time; String timeString = "20", item; int initialTime, m; int interval = 1000; int totalTime = 22000; StringList resistencias; StringList resistencias2; int index; import processing.serial.*; Serial mySerial; void setup() {size(320, 568); resistencias = new StringList(); resistencias.append("100"); resistencias.append("1000"); resistencias.append("4700"); resistencias2 = new StringList(); resistencias2.append("100"); resistencias2.append("110"); resistencias2.append("470"); background(0); // black background screen = loadImage("mho.png"); gameover = loadImage("error.png"); win = loadImage("mhowin.png"); play = loadImage("mhoplay.png"); //start1 = loadFont("Bim.ttf"); start00 = true; control = true; fill(0); mySerial = new Serial( this, "COM14", 9600 ); mySerial.buffer(3); mySerial.write(68); // Print "D" } void draw() { if (start00 == true) { image(screen, 0, 0); fill(0, 90, 90); textSize(32); text("Circuit Scribe", width * 0.15, height * 0.36); fill(0, 90, 190); textSize(22); text("start", width * 0.4, height * 0.41); textSize(14); text("Diseñado por Sabas y Meño", width * 0.2, height * 0.48); text("The Inventor's House", width * 0.2, height * 0.51); textSize(22);<br> text("Build Night Circuit Scribe", width * 0.1, height * 0.59); index = int (random(3)); } if(start00 ==false && control == true){ m=millis()-initialTime; background(play); if (millis() - m > interval) { time = int(21-(millis()/1000)); timeString = nf(time, 2); m = millis(); } fill(colorAzul); item = resistencias.get(index); text(item, width * 0.4, height * 0.13); fill(colorVerde); textSize(30); text(timeString + " sec", width * 0.8, height * 0.13); if (millis() > totalTime) { mySerial.write(65); // Print "A" control = false; } } } void mousePressed() { if (start00 == true && (mouseX > ((width * 0.4) - 200)) && (mouseX < ((width * 0.4) + 200)) && (mouseY > ((height * 0.35)-40 ) && (mouseY < ((height * 0.35) + 40)))) { initialTime = millis(); start00 = false; } } void serialEvent(Serial port) { // Data from the Serial port is read in serialEvent() using the read() function and assigned to the global variable: val value = mySerial.readString(); item = resistencias2.get(index); // For debugging<br> println( "Raw Input:" + value); println( "Valor resistencias:" + item); if (value.equals(item)){ background(win); mySerial.write(66); } else{ background(gameover); mySerial.write(67); } }
Imágenes y código desde el siguiente enlace de puedes descargar las: archivos arduino y procesamiento