COMUNIDAD DE ELECTRONICOS
Hola eres nuevo,
registrate y disfruta el nuevo foro
de electronica en donde podras dar y recibir informacion de electronica,
y asi mismo hacer tus preguntas para recibir una respueta.
Recuerda que si eres tecnico,Ingeniero o estudiante hay un rango
especial para ti, es gratis solo registrate.
DISFRUTALO

Ayuda con la programación en Energía

Ver el tema anterior Ver el tema siguiente Ir abajo

Ayuda con la programación en Energía

Mensaje por Alumno34 el Miér Ene 27, 2016 6:04 pm

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

Alumno34
Principiante
Principiante

Masculino Mensajes : 1
Fecha de inscripción : 27/01/2016
Edad : 25

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.