2016/11/01

Marabunta

Marabunta es un juego de la vida programado en Processing y basado en mi Game of Life. En esta versión, todavía en una fase muy temprana de desarrollo, las formas de vida se mueven de manera aleatoria y reconecen los límites de la pantalla del juego.

2016/10/23

Ejemplo de código en Processing

Ejemplo de código en Processing
int x=0;
int y=0;

void setup(){
  //size(300,400);
  size(screenWidth,400);
  //size(screenWidth,screenHeight);
  
  /*
  screenWidth y screenHeight ya no están soportados
  en Processing 3.x pero los sketches siguen
  funcionando incrustados en el canvas de html5
  */
  
  background(255,200,0);
}

void draw(){
  //background(255,200,0);
  if(mousePressed == true){
    if(mouseX>=(width/2)){
      x=x+1;
    }else{
      x=x-1;
    }
    if(mouseY>=(height/2)){
      y=y+1;  
    }else{
      y=y-1;
    }
  }
  noStroke();
  fill(0,0,0);
  rect(x,y,5,5);  
}

2016/05/08

Arduino Robot v10 Tupperbot

Nueva versión del robot Arduino, esta vez con cuatro ruedas tractoras y con la torreta estrenada en la versión nueve.


2016/05/02

Arduino Robot v09 Tupperbot (III)

Continuamos con el tutorial de construcción y programación de nuestro robot. En esta ocasión vamos a implementar la función de control de los dos servomotores con un mando a distancia de infrarrojos. El mando en cuestión es el que aparece en el listado de materiales pero podemos usar cualquier mando que tengamos por casa. Solo tenemos que sustituir el código que aparece en las estructuras switch-case con el código de los botones de nuestro mando.

//Arduino Robot v09_02 2016/05/02
//Diseño y programación: Antonio Vallecillos, @fotovallegrafia
//Movimiento con IR

#include <IRremote.h>
// incluimos la librería para IRremote
int RECV_PIN = 12;
// definimos una variable de tipo entero llamada RECV_PIN
// con un valor 12 por defecto
IRrecv irrecv(RECV_PIN);
// el TSOP 2238 está conectado al pin 12
decode_results results;
// el código de cada tecla se almacenará en la variable results

#include <Servo.h>
// incluimos la librería para controlar los servomotores

Servo servoDER;
// creamos un objeto servo llamado servoDER
Servo servoIZQ;
// creamos un objeto servo llamado servoIZQ

void setup() {
  Serial.begin(9600);
  // iniciamos el Monitor Serial a 9600 baudios
  irrecv.enableIRIn();
  // iniciamos el receptor de infrarrojos
  
  servoDER.attach(7);
  // el servomotor de la derecha está conectado al pin 7
  servoIZQ.attach(8);
  // el servomotor de la izquierda está conectado al pin 8
  funcionStop();
  // ejecutamos el código detro de funcionStop()
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
    // imprime el código de la tecla pulsada en el
    // Monitor Serial
    switch (results.value) {
    // control de flujo mediante switch
      
      case 16615543:
      // botón Flecha Arriba
      funcionAv();
      // ejecutamos el código detro de funcionAv()
      break;

      case 16619623:
      // botón Flecha Abajo
      funcionRe();
      // ejecutamos el código detro de funcionRe()
      break;
      
      case 16607383:
      // botón Flecha Derecha
      funcionGd();
      // ejecutamos el código detro de funcionGd()
      break;
      
      case 16591063:
      // botón Flecha Izquierda
      funcionGi();
      // ejecutamos el código detro de funcionGi()
      break;
      
    }
    irrecv.resume();
    // recibe el siguiente valor
  }
  else {
    funcionStop();
    // ejecutamos el código detro de funcionStop()
  }
  delay(250);
}

// funciones de movimiento

void funcionAv() {
  Serial.println("ADELANTE");
  // imprime ADELANTE en el Monitor Serial
  servoDER.write(0);
  // el servomotor de la derecha gira en sentido horario
  // (hacia adelante) a máxima velocidad (90 es parado)
  servoIZQ.write(180);
  // el servomotor de la izquierda gira en sentido antihorario
  // (hacia adelante) a máxima velocidad (90 es parado)
}

void funcionRe() {
  Serial.println("ATRÁS");
  servoDER.write(180); 
  servoIZQ.write(0); 
}

void funcionGd() {
  Serial.println("DERECHA");
  servoDER.write(180); 
  servoIZQ.write(180); 
}

void funcionGi() {
  Serial.println("IZQUIERDA");
  servoDER.write(0); 
  servoIZQ.write(0); 
}

void funcionStop() {
  Serial.println("STOP");
  servoDER.write(90);
  // el servomotor de la derecha permanece parado 
  // (0 es la máxima velocidad en sentido horario)
  // (180 es la máxima velocidad en sentido antihorario)
  servoIZQ.write(90);
  // el servomotor de la izquierda permanece parado 
  // (0 es la máxima velocidad en sentido horario)
  // (180 es la máxima velocidad en sentido antihorario)
}