//FUNCIONO //En esta version TARRGB6. Se combinara con Remoto Infrarrojo //Avances de Remoto10 //SE CAMBIO EL PIN 11 POR EL 6 YA QUE TENIA PROBLEMAS //PARA EL CONTROL DEL RGB //SE AGREGAN SECUENCIAS Y SENSOR DE SONIDO //Se va a llevar la seccion de analisis de la variable global (num) a una funcion //llamada analisisnum() //Se adicionara el modulo Bluetooth para control por movil Android. //--Para Bluetootth--- //A través de la librería SoftwareSerial //se pueden cambiar los pines RX y TX a otros pines //para establecer la comunicación con el Modulo Bluetooth //ya que utilizaremos el puerto serie RX TX para comunicacion //con la PC, ya sea para cargar o depurar el programa o comunicarse //via PC con Arduino #include SoftwareSerial BT(2,3); // Cambio RX | TX para conectar Modulo Bluetooth //en pines 2 y 3 (yo elijo llamarlo BT) long bps=9600; // Como comodidad para definir la velocidad de la comunicacion //--Fin para Bluetooth---- //Para tachos--------------- //Declaro variables globales int red=0,green=0,blue=0; int num; //Fin de tachos-------------- //Para infrarrojos----------- #include #include #include #include int RECV_PIN = 12; //Pin que recibe el envio infrarrojo IRrecv irrecv(RECV_PIN); decode_results results; //results contiene el valor llegado //Fin para infrarrojos------- void setup() { pinMode(5, OUTPUT); // configura ‘pin’ como salida, para visualizar //llegada de desconocido pinMode(12, INPUT);//Configura PIN12 como entrada Serial.begin(9600); //Iniciamos comunicación con el puerto serie BT.begin(bps);//Iniciar serial para Modulo BT //Para tachos------- //Paneo de canales--- analogWrite(9, 255); delay(1000); analogWrite(9, 0); analogWrite(10, 255); delay(1000); analogWrite(10, 0); analogWrite(6, 255); delay(1000); analogWrite(6, 0); //Fin paneo de colores--- //Fin para tachos----- //Para infrarrojos--- irrecv.enableIRIn(); // Empezamos la recepción //Fin para infrarrojos----- } //Funcion que muestra resultado en el Serie Monitor //Tambien manda pulso al LED testigo para saber si llego el rayo infrarrojo //Cualquier rayo infrarrojo void dump(decode_results *results) { // Dumps out the decode_results structure. // Call this after IRrecv::decode() // Serial.print("("); //Serial.print(results->bits, DEC); //Serial.print(" bits)"); if (results->decode_type == UNKNOWN) { //Serial.print("Unknown encoding: "); digitalWrite(5,HIGH );//Pulso de llegada desconocido delay(100); digitalWrite(5,LOW );//Termina pulso } //Serial.print(results->value, HEX); //Serial.print(" (HEX) , "); //Serial.print(results->value, BIN); // Serial.println(" (BIN)"); } // Fin funcion que muestra por Monitor Serial si se desea y LED testigo //Fin de funcion que muestra resultado----------- //********************************************* void(* resetFunc) (void) = 0; // esta es la funcion concreta de reseteo //********************************************* void loop() { //Para infrarrojos---------- if (irrecv.decode(&results)) { dump(&results); //irrecv.resume(); // empezamos una nueva recepción //Serial.print("LEIDO"); //Serial.print(results.value, HEX); //Serial.println(results.value); //En result.value tenemos el valor del codigo que llego por infrarrojo //A continuacion las acciones dependeran de ese codigo //Hay acciones que son exclusivas de manejo por infrarrojos //Hay algunas acciones que son llamadas por medio de funciones creadas //Esas funciones son accesibles tambien por el control desde PC. switch(results.value) { case 3238126971://Tecla 0 //Serial.print(results.value); Activarlo si se quiere ver en Monitor Serial SecuenciaA1(); break; case 3810010651://Tecla ch- Rojo //Serial.print(results.value);Activarlo si se quiere ver en Monitor Serial Color(255,0,0); break; case 5316027://Tecla ch -Verde //Serial.print(results.value);Activarlo si se quiere ver en Monitor Serial Color(0,255,0); break; case 4001918335://Tecla ch+ Azul //Serial.print(results.value); Color(0,0,255); break; case 3622325019://Tecla NEXT-Negro //Serial.print(results.value);Activarlo si se quiere ver en Monitor Serial Color(0,0,0); break; case 553536955://Tecla Play Pause - Lila //Serial.print(results.value); Color(255,0,255); break; case 1386468383://Tecla Play Pause -Amarillo //Serial.print(results.value); Color(255,255,0); break; case 3855596927://Tecla EQ -Blanco //Serial.print(results.value); Color(255,255,255); break; case 2534850111://Tecla 1 //Serial.print(results.value); SecuenciaA2(); break; case 4039382595://Tecla 200 subidas varios colores //Serial.print(results.value); SecuenciaA3(); break; case 465573243://Tecla 8 AUDIORRITMICO //Serial.print(results.value); //Entrar modo audiorritmico AUDIORITMO(); break; } //Fin de acciones determinadas por result.value irrecv.resume(); // empezamos una nueva recepción } //Fin relacion infrarrojos tachos--- //Inicio para control desde la PC con programa creado en Builder---- /* * Evaluamos el momento en el cual recibimos un caracter * a través del puerto serie */ if (Serial.available()>0) { //A continuacion acciones realizadas solo desde PC-- //Delay para favorecer la lectura de caracteres delay(22); //Se crea una variable que servirá como buffer String bufferString = ""; /* * Se le indica a Arduino que mientras haya datos * disponibles para ser leídos en el puerto serie * se mantenga concatenando los caracteres en la * variable bufferString */ while (Serial.available()>0) { bufferString += (char)Serial.read(); } num = bufferString.toInt(); analisisnum(); //Llamos funcion que analiza valores de variable num //-------------------------------------------------- } //FIN de acciones realizadas solo por control desde PC--- ordenesdemovil(); //va controlar si hay envios desde movil } //Llave final del void loop()---- //************************************************* //Funciones creadas---------------------- //Son accesibles tanto por infrrarrojos como por control por PC. void Menos_blue() { blue = blue - 5; if (blue == -5) { blue = blue + 5; } analogWrite(6, blue) ;// blue -blue PIN 11 } //-------------------- void Menos_green() { green= green - 5; if (green == -5) { green = green + 5; } analogWrite(10, green) ; // Green - Verde PIN 10 } //-------------------- void Menos_red() { red= red - 5; if (red == -5) { red= red +5; } analogWrite(9, red) ; // Rojo PIN 9 } //----------------------- void Mas_blue() { //Serial.print(num); blue = blue + 5; // Serial.print(blue); if (blue > 255) { blue = blue -5; } analogWrite(6, blue); } //-------------------- void Mas_green() { green= green + 5; if (green > 255) { green = green - 5; } analogWrite(10, green) ; // Green - Verde PIN 10 } //-------------------- void Mas_red() { red= red +5; if (red > 255) { red= red-5; } analogWrite(9, red) ; // Rojo PIN 9 } //------------------------------ void Color(int R, int G, int B) { analogWrite(9 , R) ; // Rojo analogWrite(10, G) ; // Green - Verde analogWrite(6, B) ; // blue - blue } //------------------------- void SecuenciaA1() { for (int i =0 ; i<255 ; i++) { Mas_red();//Sube a maximo rojo delay(20); Color(0, 0, 0); //negro delay(25); RESETEOINFR(); RESETEOPC(); RESETEOBT(); } Color(0, 0, 0); //negro for (int i =0 ; i<255 ; i++) { Mas_green();//Sube a maximo verde delay(20); Color(0, 0, 0); //negro delay(25); RESETEOINFR(); RESETEOPC(); RESETEOBT(); } Color(0, 0, 0); //negro for (int i =0 ; i<255 ; i++) { Mas_blue();//Sube a maximo blue delay(20); Color(0, 0, 0); //negro delay(25); RESETEOINFR(); RESETEOPC(); RESETEOBT(); } for (int i =0 ; i<25 ; i++) { Color(0, 0, 0); //negro delay (100); Color(255, 0, 0); delay (100); Color(0, 0, 255); delay (300); Color(0, 255, 0); delay (100); Color(0, 0, 0); //negro delay (200); Color(0, 255, 0); delay (100); Color(0, 0, 0); //negro RESETEOINFR(); RESETEOPC(); RESETEOBT(); } } void SecuenciaA2() { for (int i =0 ; i<25 ; i++) { Color(255, 0, 255); delay (100); Color(0, 255, 0); delay (100); Color(255, 0, 0); delay (100); Color(255, 255, 0); delay (100); Color(255, 255, 255); //blanco delay (200); Color(255, 0, 0); delay (100); Color(0, 0, 0); //negro RESETEOINFR(); RESETEOPC(); RESETEOBT(); } } void SecuenciaA3() { for (int i =0 ; i<255 ; i++) { Mas_red();//Sube a maximo rojo delay(2); Color(0, 0, 0); //negro delay(20); RESETEOINFR(); RESETEOPC(); RESETEOBT(); } Color(255, 0, 0); delay(200); Color(0, 0, 0); //negro for (int i =0 ; i<255 ; i++) { Mas_green();//Sube a maximo verde delay(2); Color(0, 0, 0); //negro delay(20); RESETEOINFR(); RESETEOPC(); RESETEOBT(); } Color(0, 255, 0); delay(200); Color(0, 0, 0); //negro for (int i =0 ; i<255 ; i++) { Mas_blue();//Sube a maximo blue delay(2); Color(0, 0, 0); //negro delay(20); RESETEOINFR(); RESETEOPC(); RESETEOBT(); } Color(0, 0, 255); delay(200); Color(0, 0, 0); //negro for (int i =0 ; i<255 ; i++) { Mas_red();//Sube red Mas_green();//Sube verde delay(2); Color(0, 0, 0); //negro delay(20); RESETEOINFR(); RESETEOPC(); RESETEOBT(); } Color(255, 255, 0); delay(200); Color(0, 0, 0); //negro for (int i =0 ; i<255 ; i++) { Mas_blue();//Sube azul Mas_red();//Sube rede delay(2); Color(0, 0, 0); //negro delay(20); RESETEOINFR(); RESETEOPC(); RESETEOBT(); } Color(255, 0,255); delay(200); Color(0, 0, 0); //negro } //Funcion reseteo infrarrojo---- void RESETEOINFR() { //Para infrarrojos---------- delay(100); if (irrecv.decode(&results)) { dump(&results); switch(results.value) { case 1053031451://Tecla 9 resetFunc(); // llamo funcion especifica de reseteo break; } } irrecv.resume(); // empezamos una nueva recepción } // Fin Funcion reseteo infrarrojo---- //Funcion audiritmico---- void AUDIORITMO() { int AUD=1;// Esta variable es para entrar a WHILE, nunca cmabia while (AUD== 1) // testea si AUD =1 { int valor; valor = analogRead(0); // asigna a valor lo que lee // en la entrada ´pin' if (valor > 526) AUDIOPICO(); if ((valor > 523) && (valor < 525 )) AUDIOMEDIO(); if ((valor > 520) && (valor < 522 )) AUDIOBAJO(); //Serial.println(valor); Activar para seguimiento diseñador RESETEOINFR(); RESETEOPC(); RESETEOBT(); Color(0,0,0); delay(20); } } //Fin funcion audioritmico //Funciones para AUDIO void AUDIOPICO() { Color(255,0,0); delay(200); Color(0,255,0); delay(200); Color(0,0,255); delay (200); Color(0,0,0); } void AUDIOMEDIO() { Color(255,255,0); delay(100); Color(255,255,0); delay(100); Color(0,0,255); delay (200); Color(255,0,0); delay (100); Color(0,0,0); } void AUDIOBAJO() { Color(255,0,0); delay(100); Color(0,0,0); } void RESETEOPC() //Funcion reseteo por PC { if (Serial.available()>0) { //Delay para favorecer la lectura de caracteres delay(22); //Se crea una variable que servirá como buffer String bufferString = ""; /* * Se le indica a Arduino que mientras haya datos * disponibles para ser leídos en el puerto serie * se mantenga concatenando los caracteres en la * variable bufferString */ while (Serial.available()>0) { bufferString += (char)Serial.read(); } num = bufferString.toInt(); //Analiza si llego orden de resetear---- if (num==999) { resetFunc(); // llamo funcion especifica de reseteo } }//Fin RESETEOPC } void analisisnum() { //Colores fijos if (num==700)//Negro { analogWrite(9, 0) ; // Rojo PIN 9 analogWrite(10, 0) ; // Green - Verde PIN 10 analogWrite(6, 0) ; // blue - blue PIN 11 red= 0; green= 0; blue= 0; } if (num==750) //Rojo { analogWrite(9, 255) ; // Rojo PIN 9 analogWrite(10, 0) ; // Green - Verde PIN 10 analogWrite(6, 0) ; // blue - blue PIN 11 red= 255; green= 0; blue= 0; } if (num==800) //Verde { analogWrite(9, 0) ; // Rojo PIN 9 analogWrite(10, 255) ; // Green - Verde PIN 10 analogWrite(6, 0) ; // blue - blue PIN 11 red= 0; green= 255; blue= 0; } if (num==850) //blue { analogWrite(9, 0) ; // Rojo PIN 9 analogWrite(10, 0) ; // Green - Verde PIN 10 analogWrite(6, 255) ; // blue - blue PIN 11 red= 0; green= 0; blue= 255; } if (num==900) //Blanco { analogWrite(9, 255) ; // Rojo PIN 9 analogWrite(10, 255) ; // Green - Verde PIN 10 analogWrite(6, 255) ; // blue - blue PIN 11 red= 255; green= 255; blue= 255; } if (num==145) //Lila (Magenta) { analogWrite(9, 255) ; // Rojo PIN 9 analogWrite(10, 0) ; // Green - Verde PIN 10 analogWrite(6, 255) ; // blue - blue PIN 11 red= 255; green= 0; blue= 255; } if (num==150) //Amarillo { analogWrite(9, 255) ; // Rojo PIN 9 analogWrite(10, 255) ; // Green - Verde PIN 10 analogWrite(6, 0) ; // blue - blue PIN 11 red= 255; green= 255; blue= 0; } if (num==155) //Celeste (Cyan) { analogWrite(9, 0) ; // Rojo PIN 9 analogWrite(10, 255) ; // Green - Verde PIN 10 analogWrite(6, 255) ; // blue - blue PIN 11 red= 0; green= 255; blue= 255; } //Secuencias --- if (num==130) { SecuenciaA1(); } if (num==135) { SecuenciaA2(); } if (num==140) { SecuenciaA3(); } //--------------------------------------------- //Se ordena el encendido de los LEDs por pasos //Va de 0 a 255 con pasos de 5 // Subiendo intensidad---------- if (num==111) { Mas_red(); } if (num ==222) { Mas_green(); } if (num ==333) { //Serial.print(num); //Serial.print(blue); Mas_blue(); } //Fin subiendo intensidad-------------- //--- Bajando intensidad de a pasos------------- if (num==444) { Menos_red(); } if (num ==555) { Menos_green(); } if (num ==666) { Menos_blue(); } //Fin bajando intensidad de a pasos----------------- if (num ==888) { AUDIORITMO(); } }//llave fina de funcion analisisnum--- //Fin funcion analisisnum--------------------------- //--Funcion que revisa ordenes provenientes de un movil void ordenesdemovil() { if(BT.available()>=1)// Me refiero a la comunicacion con Modulo BT { //Delay para favorecer la lectura de caracteres delay(22); //Se crea una variable que servirá como buffer String bufferString = ""; /* * Se le indica a Arduino que mientras haya datos * disponibles para ser leídos en el puerto serie * se mantenga concatenando los caracteres en la * variable bufferString */ while (BT.available()>0) { bufferString += (char)BT.read(); } num = bufferString.toInt(); //Se carga lo leido en la variable global num // Serial.println(num);//Muestro contenido de variable entrada analisisnum(); }//Llave final de BT.available } //Llave final de funcion ordenesmovil //---------------------------------------------------- void RESETEOBT() //Funcion reseteo por BT******************* { if (BT.available()>0) { //Delay para favorecer la lectura de caracteres delay(22); //Se crea una variable que servirá como buffer String bufferString = ""; /* * Se le indica a Arduino que mientras haya datos * disponibles para ser leídos en el puerto serie * se mantenga concatenando los caracteres en la * variable bufferString */ while (BT.available()>0) { bufferString += (char)BT.read(); } num = bufferString.toInt(); //Analiza si llego orden de resetear---- if (num==999) { resetFunc(); // llamo funcion especifica de reseteo } } }//Fin RESETEOBT