//TachoEsclavo1B //Se agrega SecuenciaA4 que son A1 y A3 en loop-- //Se va a llevar la seccion de analisis de la variable global (num) a una funcion //llamada analisisnum() //Se agrega la funcion selectacho() encargada de dirigir los datos al tacho elegido /*Se asigna un numero de 3 digitos a cada tacho (idtacho) *Un valor determinado que llega a todos los tachos fija la variable -tacho- *Datoenviado variable: tacho Accion en tacho idetacho TACHO *230 125 sigue ordenes 125 1 *235 0 deja de seguir ordenes 125 1 *240 127 sigue ordenes 127 2 *245 0 deja de seguir ordenes 127 2 *250 12 sigue ordenes 129 3 *255 0 deja de seguir ordenes 129 3 * *El cambio de tacho se admite por 3 formas de control (si no hay incompatibilidad) */ //---Para Modulos RF-------------------- //Vamos a enviar la variable num de 3 digitos por medio de Modulo RF------- #include RCSwitch myRF = RCSwitch(); // Asignamos el nombre a la libreria para el uso //de las funciones que esta nos permite, yo la //he llamado myRF -Es solo un cambio de nombre //---Fin Modulos RF -------------------- //Para tachos--------------- //Declaro variables globales int red=0,green=0,blue=0; int num; int idetacho= 127; //Esta variable identifica al tacho - NUNCA CAMBIA- int tacho = 0 ; //Este tacho es el TACHO 2 arranca NO aceptando ordenes //En los demas tacho asegurarse de fijar a 0 (cero)-- //La variable tacho controla si el tacho debe seguir las //ordenes o no. //Si tacho = idtacho sigue ordenes---Si tacho = 0 no sigue. int datob; // variable para el tamaños del dato a recibir por RF //Fin de tachos-------------- void setup() { //Para tachos------- //Paneo de canales--- analogWrite(5, 255); delay(1000); analogWrite(5, 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 Modulos RF--------------- Serial.begin(9600); //Iniciamos comunicación con el puerto serie myRF.enableReceive(0); /* Habilitamos el receptor en la interrupción 0 => Pin 2 Digital(Para Arduino UNO) */ } //********************************************* void(* resetFunc) (void) = 0; // esta es la funcion concreta de reseteo //********************************************* void loop() { if (myRF.available()) { datob = myRF.getReceivedBitlength(); //Mediante esta función leemos el //tamaño del paquete que estamos //recibiendo y lo almacenamos en //la variable datob, de esta forma //hacemos una criba de los paquetes //recibidos en función de su //tamaño. En este caso es 10 Bits. if(datob==10) { num =myRF.getReceivedValue(); // almacenamos en la variable num el dato recibido } //Serial.println(num); //Muestra dato que llego por Monitor Serie myRF.resetAvailable(); // para terminar resepcion hacemos un reset selectacho(); // analisisnum(); //Llamos funcion que analiza valores de variable num //-------------------------------------------------- } } //Llave final del void loop()---- //************************************************* //Funciones creadas---------------------- void Menos_blue() { blue = blue - 5; if (blue == -5) { blue = blue + 5; } analogWrite(6, blue) ;// blue -blue PIN 6 } //-------------------- 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(5, red) ; // Rojo PIN 5 } //----------------------- 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(5, red) ; // Rojo PIN 5 } //------------------------------ void Color(int R, int G, int B) { analogWrite(5 , 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); RESETEOTACHO(); } 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); RESETEOTACHO(); } 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); RESETEOTACHO(); } 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 RESETEOTACHO(); } } 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 RESETEOTACHO(); } } void SecuenciaA3() { for (int i =0 ; i<255 ; i++) { Mas_red();//Sube a maximo rojo delay(2); Color(0, 0, 0); //negro delay(20); RESETEOTACHO(); } 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); RESETEOTACHO(); } 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); RESETEOTACHO(); } 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); RESETEOTACHO(); } 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); RESETEOTACHO(); } Color(255, 0,255); delay(200); Color(0, 0, 0); //negro } //---Fin SecuenciaA3------- //---Secuenica A4--------Se activa con num=142------ void SecuenciaA4() { do { SecuenciaA2(); SecuenciaA1(); } while (num >0); } //--Fin secuencia A4---------------- //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 RESETEOTACHO(); 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 analisisnum() { //Colores fijos if (num==700)//Negro { analogWrite(5, 0) ; // Rojo PIN 5 analogWrite(10, 0) ; // Green - Verde PIN 10 analogWrite(6, 0) ; // blue - blue PIN 6 red= 0; green= 0; blue= 0; } if (num==750) //Rojo { analogWrite(5, 255) ; // Rojo PIN 5 analogWrite(10, 0) ; // Green - Verde PIN 10 analogWrite(6, 0) ; // blue - blue PIN 6 red= 255; green= 0; blue= 0; } if (num==800) //Verde { analogWrite(5, 0) ; // Rojo PIN 5 analogWrite(10, 255) ; // Green - Verde PIN 10 analogWrite(6, 0) ; // blue - blue PIN 6 red= 0; green= 255; blue= 0; } if (num==850) //blue { analogWrite(5, 0) ; // Rojo PIN 5 analogWrite(10, 0) ; // Green - Verde PIN 10 analogWrite(6, 255) ; // blue - blue PIN 6 red= 0; green= 0; blue= 255; } if (num==900) //Blanco { analogWrite(5, 255) ; // Rojo PIN 5 analogWrite(10, 255) ; // Green - Verde PIN 10 analogWrite(6, 255) ; // blue - blue PIN 6 red= 255; green= 255; blue= 255; } if (num==145) //Lila (Magenta) { analogWrite(5, 255) ; // Rojo PIN 5 analogWrite(10, 0) ; // Green - Verde PIN 10 analogWrite(6, 255) ; // blue - blue PIN 6 red= 255; green= 0; blue= 255; } if (num==150) //Amarillo { analogWrite(5, 255) ; // Rojo PIN 5 analogWrite(10, 255) ; // Green - Verde PIN 10 analogWrite(6, 0) ; // blue - blue PIN 6 red= 255; green= 255; blue= 0; } if (num==155) //Celeste (Cyan) { analogWrite(5, 0) ; // Rojo PIN 5 analogWrite(10, 255) ; // Green - Verde PIN 10 analogWrite(6, 255) ; // blue - blue PIN 6 red= 0; green= 255; blue= 255; } //Secuencias --- if (num==130) { SecuenciaA1(); } if (num==135) { SecuenciaA2(); } if (num==140) { SecuenciaA3(); } if (num==142) { SecuenciaA4(); } //--------------------------------------------- //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 selectacho()----------- void selectacho() { //Activa o Desactiva el tacho-------- if(num== 240) tacho=127; if(num== 245) tacho=0; if(tacho == idetacho) { //Llama la funcion analisisnum----- analisisnum(); } } //---------FIN Funcion selectacho()-------- void RESETEOTACHO() //Funcion reseteo por orden numerica { if (myRF.available()) { datob = myRF.getReceivedBitlength(); //Mediante esta función leemos el //tamaño del paquete que estamos //recibiendo y lo almacenamos en //la variable datob, de esta forma //hacemos una criba de los paquetes //recibidos en función de su //tamaño. En este caso es 10 Bits. if(datob==10) { num =myRF.getReceivedValue(); // almacenamos en la variable num el dato recibido } //Serial.println(num); //Muestra dato que llego por Monitor Serie myRF.resetAvailable(); // para terminar resepcion hacemos un reset //Analiza si llego orden de resetear---- if (num==999) { resetFunc(); // llamo funcion especifica de reseteo } }//Fin RESETEOTACHO }