Buenas tardes, somos un grupo de alumnos que estamos realizando un proyecto para una asignatura de la universidad bastante sencillo para alguien experto, pero complicado para nuestros conocimientos. Trata de un dado electrónico, que mediante una señal analógica emitida por un acelerómetro y posteriormente acondicionada a digital, enciende 7 leds de forma aleatoria hasta pararse. Quedándose encendido un "número" hasta que el acelerómetro no reciba de nuevo una señal. De forma resumida, queremos simular la tirada de un dado.
El problema viene, que al cargar el programa adjunto en el launchpad MSP430, la salida que obtenemos es únicamente, que se enciendan dichos leds en forma de número aleatoriamente, pero sin pararse y sin que interprete ninguna señal del acelerómetro.
Por favor, pido toda la ayuda que sea posible con el programa. Estaremos enormemente agradecidos.
Adjunto el código:
void setup()
{
// Configurar salidas de los LEDS (falta asignar a los numeros de pines concretos
// Hay que cambiar los numeros de las salidas y entradas según vayan a ser los nuestros
pinMode (2, OUTPUT);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
pinMode (6, OUTPUT);
pinMode (7, OUTPUT);
pinMode (15, INPUT);
pinMode (14, OUTPUT);
//Inicializa el generador de numeros aleatorios, esto genera un ruido aleatorio
//en función de la entrada analógica
randomSeed(analogRead(0));
//Apaga todos los leds
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (4, LOW);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
digitalWrite (7, LOW);
digitalWrite (14, LOW);
}
void escribe_dado (char num) {
//Escribe numero en el dado (igual que al principio, falta definir
//que pines son cada LED para encenderlos apropiadamente)
switch (num) {
case 1: //Muestra el numero 1
digitalWrite (2, HIGH);
digitalWrite (3, LOW);
digitalWrite (4, LOW);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
digitalWrite (7, LOW);
digitalWrite (14, LOW);
break;
case 2: //Muestra el numero 2
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (4, HIGH);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
digitalWrite (7, LOW);
digitalWrite (14, HIGH);
break;
case 3: //Muestra el numero 3
digitalWrite (2, HIGH);
digitalWrite (3, LOW);
digitalWrite (4, HIGH);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
digitalWrite (7, LOW);
digitalWrite (14, HIGH);
break;
case 4: //Muestra el numero 4
digitalWrite (2, LOW);
digitalWrite (3, HIGH);
digitalWrite (4, HIGH);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
digitalWrite (7, HIGH);
digitalWrite (14, HIGH);
break;
case 5: //Muestra el numero 5
digitalWrite (2, HIGH);
digitalWrite (3, HIGH);
digitalWrite (4, HIGH);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
digitalWrite (7, HIGH);
digitalWrite (14, HIGH);
break;
case 6: //Muestra el numero 6
digitalWrite (2, LOW);
digitalWrite (3, HIGH);
digitalWrite (4, HIGH);
digitalWrite (5, HIGH);
digitalWrite (6, HIGH);
digitalWrite (7, HIGH);
digitalWrite (14, HIGH);
break;
default:
case 0: //Apagar todos los leds
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (4, LOW);
digitalWrite (5, LOW);
digitalWrite (6, LOW);
digitalWrite (7, LOW);
digitalWrite (14, LOW);
break;
}
}
void loop()
{
//No hace nada hasta que la señal de entrada que viene del acelerómetro ya filtrada
//pase un cierto umbral de activación (señal analogica entre 0 y 1023)
while (analogRead(0)<510);
// tiempo de espera
int waitTime=1;
int espera=1;
//Definimos el tiempo de espera inicial
waitTime=2;
// Bucle que simula la oscilación del dado antes de quedarse en
//un número fijo cuando movemos el sensor, imita "tirar el dado"
while(waitTime<1000)
{
int valor; // definimos una variable valor
valor=random(0,6); //le damos un valor aleatorio
escribe_dado (valor); //llamando a la función escribe dado que he definido antes
//muestra la cara del dado en función del número que haya salido
waitTime=waitTime*2; //incrementamos el valor de tiempo de espera
// esto es para que en cierto momento salga del bucle cuando pase un cierto tiempo
}
delay(waitTime);//controla que la variación de la cara se vea durante unas decimas de segundo
}
//RESUMEN: Falta asignar que va en cada pin, eso es mirando simplemente el conexionado
//del launchpad, comprobar también como poner la señal de activación para que empiece a funcionar