Colorduino v1.2

hola a todos, acabo de registrarme en el foro, porque ya empiezo a estar desesperado… llevo meses con una placa colorduino. antes de escribir este post he buscado y rebuscado en google y prácticamente no hay información sobre como se programa, he conseguido ejemplos, y con ello he echo lo que he podido. Mi intención es conectar la placa a un pc i desde el pc via serial controlar un punto de luz que vaya corriendo por el colorduino, no se si me explico bien, seria algo parecido a un juego de snake…

el codigo que he conseguida hacer tiene fallos, en los que la luz que se mueve va dejando rastro, por donde pasa ya se queda el led encendido, i haciendo movimientos también llega un punto en el que se ilumina toda la placa todos los leds aleatoria-mente con colores y no entiendo porque.
otra cosa que me gustaría incluir en el código es que las variables x e y solo fueran del rango del 0 al 8. y que cada orden que le envio desde el pc que solo la lea una vez, y no se como hacerlo.

Para finalizar si me podeis indicar donde puedo encontrar información, sobre como usar esta placa estaria muy agradecido. tengo el ejemplo de plasma.pde pero no entiendo como funciona…

saludos a todos y gracias por vuestra ayuda, a continuacion les dejo el codigo.

#include <Colorduino.h>



int entrada = 0;
int  x = 0;
int  y = 0;

void setup() {
        Serial.begin(9600);     // abre serial
        Colorduino.Init();
}

void control() {

        
        if (Serial.available() > 0) {
                // lee entrada
                entrada = Serial.read();
                
                                
                Serial.print("e recibido: ");
                Serial.println(entrada);
        }
        
        if (entrada == 119) { //tecla w
          x++ ;
          Serial.print("sube x");
          Serial.println (x);
          delay (500);
          
         
        }
        
          if (entrada == 115) { //tecla s
           x-- ;
          Serial.print("baja x");
          Serial.println (x);
          delay (500);
       
        }
        
        
                if (entrada == 100) {  // tecla d
          y++ ;
          Serial.print("sube y");
          Serial.println (y);
          delay (500);
        
        }
        
          if (entrada == 97) {  // tecla a
           y-- ;
          Serial.print("baja y");
          Serial.println (y);
          
          delay (500);
       
        }
        
       
}
void surtida (){
  
 Colorduino.SetPixel(x,y,0,0,255);
 Colorduino.FlipPage(); 
}
 
 void loop (){
   control();
   surtida();
 }

http://zygzax.com/2013/07/13/colorduino-mostrar-numeros/ http://123led.wordpress.com/colorduino/ http://www.instructables.com/id/Lampduino-an-8x8-RGB-Floor-Lamp/step16/Programming-the-Colorduino/

No quiero reirme pero o tienes una versión de Google vieja o no se como Maxid te encontró varios post en poco tiempo.

  1. BUeno, tu problema es programar el juego snake en el colorduino
    Viendo tu código me imagino en parte tu dilema.
    la serpiente deberías verla como de un tamaño determinado, y si dices que los leds por donde pasa quedan encendidos es porque no los apagas.
    Entonces lo que yo visualizo es que debes recordar por donde ha pasado cargando los datos en un vector, este vector tendra un tamaño que sea de tu agrado, asi que si vas cargando la nueva posición FILO FIRST IN LAST OUT lo resuelves al menos la parte que te queda encendida.
    Explico mejor. FILO es un registro de desplazamiento que incorpora datos y en este caso descarta el ultimo de la serie o el mas viejo. Tu recibes nuevas posiciones para la snake, entonces la ultima posicion debe descartarse. Tu trabajo es primero actualizar la FILO y por ultimo refrezcarla en la pantalla del COLORDUINO.
    en tu caso sera una matriz (X,Y) de N elementos donde N son los pixeles o leds que quieres que tenga de longitud tu SNAKE.

  2. Que las variables queden acotadas a 0 - 8 es muy facil, restringe los valores aceptados

#include <Colorduino.h>


#define Largo 5  //longitud de la serpiente
int entrada = 0;
unsigned int  x = 0;
unsigned int  y = 0;
byte out[Largo][2];  //uso byte porque estas restringido 0-8 y byte permite 0-255 ocupa menos memoria.

void setup() {
        Serial.begin(9600);     // abre serial
        Colorduino.Init();
}

void control() {

        
        if (Serial.available() > 0) {
                // lee entrada
                entrada = Serial.read();
                
                                
                Serial.print("e recibido: ");
                Serial.println(entrada);
        }
        
        if (entrada == 119) { //tecla w
          if (x++>8) x = 8;
          Serial.print("sube x");
          Serial.println (x);
          delay (500);
          
         
        }
        
          if (entrada == 115) { //tecla s
              if(x-- <1) x =0;
          Serial.print("baja x");
          Serial.println (x);
          delay (500);
       
        }
        
        
         if (entrada == 100) {  // tecla d
            if(y++ >8) y=8;
          Serial.print("sube y");
          Serial.println (y);
          delay (500);
        
        }
        
          if (entrada == 97) {  // tecla a
             if(y--<1) y=0;
          Serial.print("baja y");
          Serial.println (y);
          refrezcoFILO();
          out[0,0] = {x,y};
          delay (500);
       
       }
}

void refrescoFILO() {
    byte i;

    for(i=0; i<Largo; i++) {
           out[Largo-i,0] =   out[Largo-i-1,0];      
           out[Largo-i,1] =   out[Largo-i-1,1];
    }
}

void surtida (){
  
 for(i=0; i<Largo; i++) {
    Colorduino.SetPixel(out[i,0],out[i,1],0,0,255);
  } 
  Colorduino.FlipPage(); 
}
 
 void loop (){
   control();
   surtida();
 }

Fijate si funciona, casi siempre tengo que corregir algo. Tal vez la asignación del elemento 0,0 este mal.