domingo, 13 de marzo de 2016

Simon dice

Ahora os vamos a enseñar a hacer el juego de simon dice que consiste en ir memorizando unas secuencias de colores
Y aquí el código
    #define LEVELS 3
    #define COLORS 3
    #define TIME_INTERVAL 1500
    #define TONO_1 1700
    #define TONO_2 1432
    #define TONO_3 956
    #define TONO_ERROR 600
    //--------------------------------------------------
    //  Variables SIMON
    //--------------------------------------------------
    double status_simon = 0; 
    int nivel = 0;
    double secuencia = 0;
    int colores_pulsados = 0;
   
    //--------------------------------------------------
    // Puertos
    //--------------------------------------------------
    // LEDS
    double led_Rojo = 13; //Declarar Pin LED Rojo
    double led_Verde = 11; //Declarar Pin LED Verde
    double led_Amarillo = 9;  //Declarar Pin LED Amarillo
   
    // PULSADORES
    double pulsador_Rojo = 12;
    double pulsador_Verde = 10;
    double pulsador_Amarillo = 8;
   
    //ZUMBADOR
    double zumbador = 7;
   
    //------------------------------------
    // Funcion principal
    //------------------------------------
    void setup() // Se ejecuta cada vez que el Arduino se inicia
    {
      Serial.begin(9600);
      randomSeed(analogRead(0));
     
      pinMode(pulsador_Rojo,INPUT); // Pulsador 1 como entrada
      pinMode(led_Rojo,OUTPUT);  //El LED 1 Rojo como salida
     
      pinMode(pulsador_Verde,INPUT); // Pulsador 2 como entrada
      pinMode(led_Verde,OUTPUT); //El LED Verde como salida
     
      pinMode(pulsador_Amarillo,INPUT); // Pulsador 3 como entrada
      pinMode(led_Amarillo,OUTPUT);  //El LED Rojo como salida
     
      pinMode(zumbador,OUTPUT); // El zumbador como salida
    }
   
    //------------------------------------
    //Funcion ciclicla
    //------------------------------------
    void loop() // Esta funcion se mantiene ejecutando
    {           //  cuando se da energia al Arduino
      if(digitalRead(pulsador_Rojo) == HIGH && digitalRead(pulsador_Verde) == HIGH && digitalRead(pulsador_Amarillo) == HIGH)
      {
        nivel = 0;
        status_simon = 0;
        delay(TIME_INTERVAL*2);
        return;
      }
      // Reproducir secuencia
      if(status_simon == 0){
        Serial.println("\n\n--------------------------\nMODO IMPRESION SEC.");
        if( nivel == 0 )
        {
          nivel = 1;
          randomSeed(analogRead(0));
          secuencia = random(1,COLORS+1);
        }
        else
        {
          nivel++;
          randomSeed(analogRead(0));
          double double_rand = random(1,COLORS+1);
          double double_exp =  (double)pow(10,nivel-1 );
          //double value = double_rand * double_exp;
          //secuencia = secuencia + value;
          secuencia = (secuencia * 10) + double_rand;
        }
        Serial.print("\nlvl: ");
        Serial.print(nivel);
        Serial.print("\n");
        Serial.print("Secu.: ");
        Serial.print(secuencia);
        Serial.print("\n");
        imprimir_secuencia();
       
        status_simon = 1;
        colores_pulsados = 0;
      }
      // Secuencia del usuario - Registro de los pulsadores
      else if(status_simon == 1){
        if(digitalRead(pulsador_Rojo) == HIGH){
          Serial.println("Rojo pulsado");
          pulsar_elemento('1');
          colores_pulsados++;
          verificar_secuencia('1');
        }
        else if(digitalRead(pulsador_Verde) == HIGH){
          Serial.println("Verde pulsado");
          pulsar_elemento('2');
          colores_pulsados++;
          verificar_secuencia('2');
        }
        else if(digitalRead(pulsador_Amarillo) == HIGH){
          Serial.println("Amarillo pulsado");
          pulsar_elemento('3');
          colores_pulsados++;
          verificar_secuencia('3');
        }
      }
    }
   
    //------------------------------------
    //Funcion Verificar secüencia
    //------------------------------------
    void verificar_secuencia(char color)
    {
      String string = String(round(secuencia) );
      Serial.print("\nColor usuario:");
      Serial.print(color);
      Serial.print(" Seq. Valor:");
      Serial.print(string[colores_pulsados-1]);
      if(string[colores_pulsados-1] == color){
        if(nivel == colores_pulsados){
          Serial.print("\nFin del lvl: ");
          Serial.print(nivel);
          status_simon = 0;
        }
        else{
          // CONTINUA MODO USUARIO
          Serial.print("\nContinuar modo usuario");
        } 
      }
      else{
        // ERROR DE USUARIO
        Serial.print("\nERROR DE USUARIO");
        status_simon = 4;
        error_usuario();
      }
    }
   
    //------------------------------------
    //Funcion Imprimir secuencia
    //------------------------------------
    void imprimir_secuencia()
    {
      String string = String(round(secuencia) );
      Serial.print("\nIMPRIMIR SERIE: ");
      Serial.print(string);
      for(int i = 0 ; i < nivel  ;i++)
      {
        delay(TIME_INTERVAL*0.5);
        pulsar_elemento(string[i]);
      }
    }
   
    //------------------------------------
    // PULSAR ELEMENTO
    // Luce el led del indicador pasádo por parámetro
    //------------------------------------
    void pulsar_elemento(char num_color)
    {
      switch(num_color){
        case '1':
          Serial.println("\nPulsador Rojo ON");
          digitalWrite(led_Rojo,HIGH);
          sonarTono(TONO_1,TIME_INTERVAL*0.5);
          digitalWrite(led_Rojo,LOW);
          Serial.println("Pulsador Rojo OFF");
        break;
        case '2':
          Serial.println("\nPulsador Verde ON");
          digitalWrite(led_Verde,HIGH);
          sonarTono(TONO_2,TIME_INTERVAL*0.5);
          digitalWrite(led_Verde,LOW);
          Serial.println("Pulsador Verde OFF");
        break;
        case '3':
          Serial.println("\nPulsador Amarillo ON");
          digitalWrite(led_Amarillo,HIGH);
          sonarTono(TONO_3,TIME_INTERVAL*0.5);
          digitalWrite(led_Amarillo,LOW);
          Serial.println("Pulsador Amarillo OFF");    
        break;
      }
    }
   
    //------------------------------------
    // ERROR USUARIO
    // Realiza una secuencia de luz y sonido diez veces seguidas para indicar que
    // el usuario ha errado al introducir la
    // secuencia
    //------------------------------------------
    void error_usuario()
    {
      for(int i=0; i<3; i++)
      {
        delay(TIME_INTERVAL*0.3);
        digitalWrite(led_Rojo, HIGH);   // turn the LED on (HIGH is the voltage level)
        digitalWrite(led_Verde, HIGH);   // turn the LED on (HIGH is the voltage level)
        digitalWrite(led_Amarillo, HIGH);   // turn the LED on (HIGH is the voltage level)
        digitalWrite(zumbador,HIGH);
       
        sonarTono(TONO_ERROR,TIME_INTERVAL);
        digitalWrite(zumbador,LOW);
        digitalWrite(led_Rojo, LOW);    // turn the LED off by making the voltage LOW
        digitalWrite(led_Verde, LOW);    // turn the LED off by making the voltage LOW
        digitalWrite(led_Amarillo, LOW);    // turn the LED off by making the voltage LOW 
      }
    }
   
    //------------------------------------
    // SONAR TONO
    //------------------------------------
    void sonarTono(int tono, int duracion)
    {
      tone(zumbador,tono,duracion);
      delay(duracion);
    }
   
    //FIN DEL PROGRAMA

Secuencia de leds al estilo tetris

miércoles, 16 de diciembre de 2015

Primer reto!!!

Para empezar os daremos unas nociones básicas sobre Arduino.
Lo primero que hay que saber es que como todo lenguaje informático es muy estricto por lo que no podemos equivocarnos al escribir por que el ordenador no lo entendería.
Estos son los primeros pasos para empezar:
Nuestro primer reto será algo muy sencillo, encender y apagar un led.
Para empezar la configuración se pone el comando void setup () y abrimos la llave{ que significa que lo que escribamos a continuacion será lo que el ordenador detecte como configuración asi que pasaremos a la siguiente línea poniendo pinMode(<nº de pin que queremos configurar>, OUTPUT[que lo configura como salida]) y despues de cerrar el paréntesis ponemos punto y coma (;) y ya que hemos acabado la configuración pasamos a la siguiente línea en la que cerraremos la llave }
Pasaremos luego a empezar el ciclo que vamos a programar asi que se escribe void loop () y se vuelve a abrir la llave {. Pasamos a la siguiente línea y ponemos digitalWrite(<el nº de pin que queremos y hayamos asignado>, HIGH[que significa encendido al igual que LOW significa apagado]) y el punto y coma no debemos olvidarlo (;). Luego en la siguiente línea deberemos darle un delay(tiempo) de encendido en este caso y el punto y coma y luego en las dos siguientes líneas hacemos lo mismo pero apagando el led para despues cerrar la llave } y así finalizar nuestra primera configuración.
void setup() {
  pinMode(2,OUTPUT);
}

void loop() {
 digitalWrite(2,HIGH);
 delay(1000);
 digitalWrite(2,LOW);
 delay(1000);
}


martes, 15 de diciembre de 2015

Último reto! Cruce de semáforos

Ahora añadiremos el comando for que sirve para definir los pines que queremos usar para ello lo que ponemos es for(n=[nº del menor pin];n<[nº del mayor pin más uno];n++) y abrimos llave{ y lo que tenemos que hacer en pinMode es sustituir los pines por n y acordarnos de cerrar la llave}. El ++ sirve para que los pines vayan de menor a mayor


int tiempolargo=10000;
int tiempocorto=2000;
int n;
void setup () {
  for(n=3;n<9;n++){
    pinMode (n,OUTPUT);
  }
}

void loop(){
  digitalWrite(3,HIGH); digitalWrite(8,HIGH); delay (tiempolargo);
  digitalWrite(3,LOW); digitalWrite(8,LOW);
  digitalWrite(3,HIGH); digitalWrite(7,HIGH); delay(tiempocorto);
  digitalWrite(3,LOW); digitalWrite(7,LOW);
  digitalWrite(5,HIGH); digitalWrite(6,HIGH); delay(tiempolargo);
  digitalWrite(5,LOW); digitalWrite(6,LOW);
  digitalWrite(4,HIGH); digitalWrite(6,HIGH); delay(tiempocorto);
  digitalWrite(4,LOW); digitalWrite(6,LOW);
}

Ponemos los digitalWrite seguidos por que el programa lo lee de arriba a bajo en bloque y barriendolo todo por así decirlo.


Y eso es todo, si habéis conseguido hacer estos retos sin fijaros demasiado en los programas ya hechos ya sabéis lo básico de arduino

Reto 3 coche fantástico!!!

En este tercer reto vamos a enseñaros a programar las luces de del coche fantástico, para ello vamos a hacer como en el anterior tutorial, voy a escribiros el codigo abajo y voy a comentarlo


int t=800; //configura que donde pongamos t será 800
int n;
void setup(){ //comienza la configuración

pinMode(4,OUTPUT); //configurar el pin 4 como salida
pinMode(5, OUTPUT);//configurar el pin 5 como salida
pinMode(6,OUTPUT);//configurar el pin 6 como salida
pinMode(7,OUTPUT);//configurar el pin 7 como salida
}
void loop(){
digitalWrite(4,HIGH); //envía 5 voltios al pin 4
delay(t); //espera 800ms
digitalWrite(4,LOW); //asigna 0 Voltios a pin 4
delay(t);
digitalWrite(5,HIGH);
delay(t);
digitalWrite(5,LOW);
delay(t);
digitalWrite(6,HIGH);
delay(t);
digitalWrite(6,LOW);
delay(t);
digitalWrite(7,HIGH);
delay(t);
digitalWrite(7,LOW);
delay(t);
digitalWrite(6,HIGH); //envía 5 voltios al pin 6
delay(t); //espera 80ms
digitalWrite(6,LOW); //asigna 0 Voltios a pin 6
delay(t);
digitalWrite(5,HIGH);
delay(t);
digitalWrite(5,LOW);
delay(t);

}

lunes, 14 de diciembre de 2015

reto 2

En este segundo reto vamos a aprender a programar un semáforo, para ello voy a escribiros el codigo abajo y voy a comentar cada paso.

int tl=5000;// el comando int sirve para darle a una letra o pala un significado en este caso tl(iniciales de tiempo largo) significaria 5000 milisengundos(no olvideis que en el lenguaje  de arduino el tiempo viene en milisegundos)

int tc=2000;//aqui vendría a ser lo mismo que en el paso aterior pero con 2000 ms

int n;// cuando metemos el comando int n significa que cuando ponemos n mas abajo estamos trabajando sobre todas las entradas conectadas(en este caso la 3, 4 y 5)
void setup() {// void setup sirve para cofigurar el programa)

  for(n=3;n<6;n++){// sinifica que vamos a usar desde el pin 3 hasta el <6 (el 5) y que estos van a ir en orden ascedente (n++)

    pinMode(n, OUTPUT);//aqui ya empezamos a programar el semaforo( no olvidemos que n signica todos pines, es decir entradas)
  }
}
void loop(){
  digitalWrite(5,HIGH);// pin 5 le llega voltaje y esta encendido
  delay(tl);// delay es el tiempo, en este caso hemos puesto tl que no olvidemos significa 5 segundos  y que HIGH significa encendido

  digitalWrite(5, LOW);// pin 5 apagado por que no le llega voltaje, no olvidemos que LOW significa apagado
  digitalWrite(4, HIGH);// pin 4 encendido, REPETIMOS EL PROCESO ANTERIOR CON CADA UNO DE LOS PINES.
  delay(tc);
  digitalWrite(4, LOW);// pin 4 apagado
  digitalWrite(3, HIGH);
  delay(tl);
  digitalWrite(3  , LOW);
}

El esquema de montaje es este:
Y el resultado este:
Esperemos que os haya funcionado, si teneis problemas acudid a Antonio o Ignacio

 
Hola somos Antonio e Ignacio del instituto IES Miguel de Cervantes, a través de este blog trataremos de enseñar a nuestros compañeros de la clase de informatica a usar Arduino.
¿Qué es Arduino?
Arduino es una plataforma de hardware libre, basada en una placa con un microontrolador y un entorno de desarollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.
Esto significa que en este blog trataremos de enseñaros a programar una placa muy simple a través de la cual podremos desarrollar diversos proyectos cuyo unico límite es vuestra imaginación.
¡¡Esperamos que os sea de ayuda!!