Problema doble sketch

Gente, necesito ayuda.
He diseñado una app en app inventor la cual posee 34 comandos.
16 encienden un módulo de relés, otros 16 los desconectan y además tengo 2 botones para seleccionar qué sketch va a correr arduino.
En el botón de la foto pretendo que ponga en modo secuencia el módulo. (Solo en 12 canales )
Tengo un sketch que simplemente recibe estos 32 mensajes activando y desactivando relés.
P
robado y funcionando perfecto, salvo por un detalle que no entiendo por-qué pasa. (Los relés arrancan energizados todos )

Tengo otro sketch que pone en modo secuencial los mismos relés, solo necesito que secuencien 12.
Probado y funcionando perfecto también.
Siendo muy novato en esto, he intentado con hacer funcionar ambos sketch mediante la selección con esos dos botones pero sin éxito.
H
e aquí con if pero de la misma manera lo hice con if else, aunque leyendo, quizás sea mejor con switch case, pero no sé manejarlo tampoco.
T
ambién probé llamando subrutinas, pero se ve que no estoy diagramando de forma correcta las órdenes.

P
ara comenzar, no sé si estoy eligiendo bien cómo hacerlo.

Este es el control remoto bt:
C++:
int rele1=6;

int rele2=A4;

int rele3=7;

int rele4=A3;

int rele5=8;

int rele6=A2;

int rele7=9;

int rele8=A1;

int rele9=10;

int rele10=2;

int rele11=11;

int rele12=3;

int rele13=12;

int rele14=4;

int rele15=13;

int rele16=5;


int estado=0;


void setup() {

  Serial.begin(9600);

  pinMode(13, OUTPUT);

  pinMode(12, OUTPUT);

  pinMode(11, OUTPUT);

  pinMode(10, OUTPUT);

  pinMode(9, OUTPUT);

  pinMode(8, OUTPUT);

  pinMode(7, OUTPUT);

  pinMode(6, OUTPUT);

  pinMode(5, OUTPUT);

  pinMode(4, OUTPUT);

  pinMode(3, OUTPUT);

  pinMode(2, OUTPUT);

  pinMode(A1, OUTPUT);

  pinMode(A2, OUTPUT);

  pinMode(A3, OUTPUT);

  pinMode(A4, OUTPUT);



}


void loop() {

 

  if (Serial.available()>0){

    estado=Serial.read();

  

  if (estado == 'a'){

  digitalWrite(rele1,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'b'){

  digitalWrite(rele1,HIGH);

  }

  if (estado == 'c'){

  digitalWrite(rele2,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'd'){

  digitalWrite(rele2,HIGH);

  }

  if (estado == 'e'){

  digitalWrite(rele3,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'f'){

  digitalWrite(rele3,HIGH);

  }

  if (estado == 'g'){

  digitalWrite(rele4,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'h'){

  digitalWrite(rele4,HIGH);

  }

  if (estado == 'i'){

  digitalWrite(rele5,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'j'){

  digitalWrite(rele5,HIGH);

  }

  if (estado == 'k'){

  digitalWrite(rele6,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'l'){

  digitalWrite(rele6,HIGH);

  }

  if (estado == 'm'){

  digitalWrite(rele7,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'n'){

  digitalWrite(rele7,HIGH);

  }

  if (estado == 'o'){

  digitalWrite(rele8,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'p'){

  digitalWrite(rele8,HIGH);

  }

  if (estado == 'q'){

  digitalWrite(rele9,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'r'){

  digitalWrite(rele9,HIGH);

  }

  if (estado == 's'){

  digitalWrite(rele10,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 't'){

  digitalWrite(rele10,HIGH);

  }

  if (estado == 'u'){

  digitalWrite(rele11,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'v'){

  digitalWrite(rele11,HIGH);

  }

  if (estado == 'w'){

  digitalWrite(rele12,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'x'){

  digitalWrite(rele12,HIGH);

  }

  if (estado == 'y'){

  digitalWrite(rele13,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'z'){

  digitalWrite(rele13,HIGH);

  }

  if (estado == '1'){

  digitalWrite(rele14,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == '2'){

  digitalWrite(rele14,HIGH);

  }

  if (estado == '3'){

  digitalWrite(rele15,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == '4'){

  digitalWrite(rele15,HIGH);

  }

  if (estado == '5'){

  digitalWrite(rele16,LOW);

  digitalWrite(rele1,HIGH);

  digitalWrite(rele2,HIGH);

  digitalWrite(rele3,HIGH);

  digitalWrite(rele4,HIGH);

  digitalWrite(rele5,HIGH);

  digitalWrite(rele6,HIGH);

  digitalWrite(rele7,HIGH);

  digitalWrite(rele8,HIGH);

  digitalWrite(rele9,HIGH);

  digitalWrite(rele10,HIGH);

  digitalWrite(rele11,HIGH);

  digitalWrite(rele12,HIGH);

  digitalWrite(rele13,HIGH);

  digitalWrite(rele14,HIGH);

  digitalWrite(rele15,HIGH);


  }

  if (estado == '6'){

    digitalWrite(rele16,HIGH);

  }

  }

  }
Este es el secuenciador:
C++:
int rele1=6;

int rele2=A4;

int rele3=7;

int rele4=A3;

int rele5=8;

int rele6=A2;

int rele7=9;

int rele8=A1;

int rele9=10;

int rele10=2;

int rele11=11;

int rele12=3;

int rele13=12;

int rele14=4;

int rele15=13;

int rele16=5;


void setup()

{

    pinMode(rele1, OUTPUT);

    pinMode(rele2, OUTPUT);

    pinMode(rele3, OUTPUT);

    pinMode(rele4, OUTPUT);

    pinMode(rele5, OUTPUT);

    pinMode(rele6, OUTPUT);

    pinMode(rele7, OUTPUT);

    pinMode(rele8, OUTPUT);

    pinMode(rele9, OUTPUT);

    pinMode(rele10, OUTPUT);

    pinMode(rele11, OUTPUT);

    pinMode(rele12, OUTPUT);

    pinMode(rele13, OUTPUT);

    pinMode(rele14, OUTPUT);

    pinMode(rele15, OUTPUT);

    pinMode(rele16, OUTPUT);

 

}


void loop(){



      digitalWrite(rele1,HIGH);

            delay(60);

      digitalWrite(rele2,HIGH);

            delay(60);

      digitalWrite(rele3,HIGH);

            delay(60);

      digitalWrite(rele4,HIGH);

            delay(60);

      digitalWrite(rele5,HIGH);

            delay(60);

      digitalWrite(rele6,HIGH);

            delay(60);

      digitalWrite(rele7,HIGH);

            delay(60);

      digitalWrite(rele8,HIGH);

            delay(60);

      digitalWrite(rele9,HIGH);

            delay(60);

      digitalWrite(rele10,HIGH);

            delay(60);

      digitalWrite(rele11,HIGH);

            delay(60);

      digitalWrite(rele12,HIGH);

            delay(60);

      digitalWrite(rele13,HIGH);

      digitalWrite(rele14,HIGH);

      digitalWrite(rele15,HIGH);

      digitalWrite(rele16,HIGH);


      digitalWrite(rele1, HIGH);                 

      delay(60);

      digitalWrite(rele1, LOW);

      delay(60);

      digitalWrite(rele2, HIGH);

      delay(60);

      digitalWrite(rele2, LOW);

      delay(60);

      digitalWrite(rele3, HIGH);

      delay(60);

      digitalWrite(rele3, LOW);

      delay(60);

      digitalWrite(rele4, HIGH);

      delay(60);

      digitalWrite(rele4, LOW);

      delay(60);

      digitalWrite(rele5, HIGH);

      delay(60);

      digitalWrite(rele5, LOW);

      delay(60);

      digitalWrite(rele6, HIGH);

      delay(60);

      digitalWrite(rele6, LOW);

      delay(60);

      digitalWrite(rele7, HIGH);

      delay(60);

      digitalWrite(rele7, LOW);

      delay(60);

      digitalWrite(rele8, HIGH);

      delay(60);

      digitalWrite(rele8, LOW);

      delay(60);

      digitalWrite(rele9, HIGH);

      delay(60);

      digitalWrite(rele9, LOW);

      delay(60);

      digitalWrite(rele10, HIGH);

      delay(60);

      digitalWrite(rele10, LOW);

      delay(60);

      digitalWrite(rele11, HIGH);

      delay(60);

      digitalWrite(rele11, LOW);

      delay(60);

      digitalWrite(rele12, HIGH);

      delay(60);

      digitalWrite(rele12, LOW);

      delay(60);

  }
Este es mi doble sketch:
El botón de secuencia manda un "7" y el botón del control remoto manda un "8"
C++:
int rele1=6;

int rele2=A4;

int rele3=7;

int rele4=A3;

int rele5=8;

int rele6=A2;

int rele7=9;

int rele8=A1;

int rele9=10;

int rele10=2;

int rele11=11;

int rele12=3;

int rele13=12;

int rele14=4;

int rele15=13;

int rele16=5;


int estado=0;


void setup()

{

    pinMode(rele1, OUTPUT);

    pinMode(rele2, OUTPUT);

    pinMode(rele3, OUTPUT);

    pinMode(rele4, OUTPUT);

    pinMode(rele5, OUTPUT);

    pinMode(rele6, OUTPUT);

    pinMode(rele7, OUTPUT);

    pinMode(rele8, OUTPUT);

    pinMode(rele9, OUTPUT);

    pinMode(rele10, OUTPUT);

    pinMode(rele11, OUTPUT);

    pinMode(rele12, OUTPUT);

    pinMode(rele13, OUTPUT);

    pinMode(rele14, OUTPUT);

    pinMode(rele15, OUTPUT);

    pinMode(rele16, OUTPUT);

    delay(10000);

}


void loop() {

  if (Serial.available()>0){

    estado=Serial.read();

  }

  if (estado == '7'){                                       //AQUI SELECCIONO SECUENCIA


        digitalWrite(rele1,HIGH);

            delay(60);

      digitalWrite(rele2,HIGH);

            delay(60);

      digitalWrite(rele3,HIGH);

            delay(60);

      digitalWrite(rele4,HIGH);

            delay(60);

      digitalWrite(rele5,HIGH);

            delay(60);

      digitalWrite(rele6,HIGH);

            delay(60);

      digitalWrite(rele7,HIGH);

            delay(60);

      digitalWrite(rele8,HIGH);

            delay(60);

      digitalWrite(rele9,HIGH);

            delay(60);

      digitalWrite(rele10,HIGH);

            delay(60);

      digitalWrite(rele11,HIGH);

            delay(60);

      digitalWrite(rele12,HIGH);

            delay(60);

      digitalWrite(rele13,HIGH);

      digitalWrite(rele14,HIGH);

      digitalWrite(rele15,HIGH);

      digitalWrite(rele16,HIGH);


      digitalWrite(rele1, HIGH);             

      delay(60);

      digitalWrite(rele1, LOW);

      delay(60);

      digitalWrite(rele2, HIGH);

      delay(60);

      digitalWrite(rele2, LOW);

      delay(60);

      digitalWrite(rele3, HIGH);

      delay(60);

      digitalWrite(rele3, LOW);

      delay(60);

      digitalWrite(rele4, HIGH);

      delay(60);

      digitalWrite(rele4, LOW);

      delay(60);

      digitalWrite(rele5, HIGH);

      delay(60);

      digitalWrite(rele5, LOW);

      delay(60);

      digitalWrite(rele6, HIGH);

      delay(60);

      digitalWrite(rele6, LOW);

      delay(60);

      digitalWrite(rele7, HIGH);

      delay(60);

      digitalWrite(rele7, LOW);

      delay(60);

      digitalWrite(rele8, HIGH);

      delay(60);

      digitalWrite(rele8, LOW);

      delay(60);

      digitalWrite(rele9, HIGH);

      delay(60);

      digitalWrite(rele9, LOW);

      delay(60);

      digitalWrite(rele10, HIGH);

      delay(60);

      digitalWrite(rele10, LOW);

      delay(60);

      digitalWrite(rele11, HIGH);

      delay(60);

      digitalWrite(rele11, LOW);

      delay(60);

      digitalWrite(rele12, HIGH);

      delay(60);

      digitalWrite(rele12, LOW);

      delay(60);

  }

   if (estado == '8'){                        //AQUI SELECCIONO CONTROL REMOTO

    if (estado == 'a'){

  digitalWrite(rele1,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'b'){

  digitalWrite(rele1,HIGH);

  }

  if (estado == 'c'){

  digitalWrite(rele2,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'd'){

  digitalWrite(rele2,HIGH);

  }

  if (estado == 'e'){

  digitalWrite(rele3,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'f'){

  digitalWrite(rele3,HIGH);

  }

  if (estado == 'g'){

  digitalWrite(rele4,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'h'){

  digitalWrite(rele4,HIGH);

  }

  if (estado == 'i'){

  digitalWrite(rele5,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'j'){

  digitalWrite(rele5,HIGH);

  }

  if (estado == 'k'){

  digitalWrite(rele6,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'l'){

  digitalWrite(rele6,HIGH);

  }

  if (estado == 'm'){

  digitalWrite(rele7,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'n'){

  digitalWrite(rele7,HIGH);

  }

  if (estado == 'o'){

  digitalWrite(rele8,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'p'){

  digitalWrite(rele8,HIGH);

  }

  if (estado == 'q'){

  digitalWrite(rele9,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'r'){

  digitalWrite(rele9,HIGH);

  }

  if (estado == 's'){

  digitalWrite(rele10,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 't'){

  digitalWrite(rele10,HIGH);

  }

  if (estado == 'u'){

  digitalWrite(rele11,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'v'){

  digitalWrite(rele11,HIGH);

  }

  if (estado == 'w'){

  digitalWrite(rele12,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'x'){

  digitalWrite(rele12,HIGH);

  }

  if (estado == 'y'){

  digitalWrite(rele13,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == 'z'){

  digitalWrite(rele13,HIGH);

  }

  if (estado == '1'){

  digitalWrite(rele14,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == '2'){

  digitalWrite(rele14,HIGH);

  }

  if (estado == '3'){

  digitalWrite(rele15,LOW);

  digitalWrite(rele16,HIGH);

  }

  if (estado == '4'){

  digitalWrite(rele15,HIGH);

  }

  if (estado == '5'){

  digitalWrite(rele16,LOW);

  digitalWrite(rele1,HIGH);

  digitalWrite(rele2,HIGH);

  digitalWrite(rele3,HIGH);

  digitalWrite(rele4,HIGH);

  digitalWrite(rele5,HIGH);

  digitalWrite(rele6,HIGH);

  digitalWrite(rele7,HIGH);

  digitalWrite(rele8,HIGH);

  digitalWrite(rele9,HIGH);

  digitalWrite(rele10,HIGH);

  digitalWrite(rele11,HIGH);

  digitalWrite(rele12,HIGH);

  digitalWrite(rele13,HIGH);

  digitalWrite(rele14,HIGH);

  digitalWrite(rele15,HIGH);


  }

  if (estado == '6'){

    digitalWrite(rele16,HIGH);

  }

  }
}
 

Adjuntos

  • app inventor.jpg
    app inventor.jpg
    40.3 KB · Visitas: 13
Ese código es espantoso e ilegible!!!!
No podías repetir más código....
Yo que vos, primero estudiaría programación y luego intentaría hacer ese programa con mas conocimiento de las capacidades del lenguaje.
 
Ese código es espantoso e ilegible!!!!
No podías repetir más código....
Yo que vos, primero estudiaría programación y luego intentaría hacer ese programa con mas conocimiento de las capacidades del lenguaje.
Estoy tratando de aprender amigo¡ , por eso pregunte , de nada me sirve que me digan que ese codigo es un asco y se puede mejorar de mil formas ¡ eso ya lo se ¡¡¡ y espero poder mejorar este y otros codigos futuros ¡ por esto es que pregunte cual seria la mejor forma de ENCAMINAR este proyecto (mi cabeza de 47 años y 2 meses de ver videos y leer manuales de arduino aun no logra discernir cual es la mejor forma de encararlo ) , no estoy pidiendo que me lo hagan , necesito una guia ¡ , y lo estoy haciendo mas por necesidad ¡¡¡ no por hacer un proyectito de leds que se guarda en un cajon ...le quiero dar un uso real y tangible .
He logrado hacerlo funcionar en modo control y que al mandar mensaje 7 (boton 33) el sketch comience la secuencia , pero solo hasta que termine la misma recien puedo relaizar algun control manual de los reles , necesito poder salir en cualquier momento que lo desee del ciclo secuencial
Código:
int rele1=6;
int rele2=A4;
int rele3=7;
int rele4=A3;

int estado=0;

void setup() {
    Serial.begin(9600);
    pinMode(6, OUTPUT);
    pinMode(A4, OUTPUT);
    pinMode(7, OUTPUT);
    pinMode(A3, OUTPUT);
}

void secuencia() {   

      digitalWrite(rele1, HIGH);                 
      delay(600);
      digitalWrite(rele1, LOW);
      delay(600);
      digitalWrite(rele2, HIGH);
      delay(600);
      digitalWrite(rele2, LOW);
      delay(600);
      digitalWrite(rele1, HIGH);                 
      delay(600);
      digitalWrite(rele1, LOW);
      delay(600);
      digitalWrite(rele2, HIGH);
      delay(600);
      digitalWrite(rele2, LOW);
      delay(600);
      digitalWrite(rele1, HIGH);                 
      delay(600);
      digitalWrite(rele1, LOW);
      delay(600);
      digitalWrite(rele2, HIGH);
      delay(600);
      digitalWrite(rele2, LOW);
      delay(600);
      digitalWrite(rele1, HIGH);                 
      delay(600);
      digitalWrite(rele1, LOW);
      delay(600);
      digitalWrite(rele2, HIGH);
      delay(600);
      digitalWrite(rele2, LOW);
      delay(600);

}
 
void loop() {
    if (Serial.available()>0){
    estado=Serial.read();
  if (estado == '7'){
     secuencia();}
else {
  if (estado == 'a'){
  digitalWrite(rele1,LOW);
  }
  if (estado == 'b'){
  digitalWrite(rele1,HIGH);
  }
  if (estado == 'c'){
  digitalWrite(rele2,LOW);
  }
  if (estado == 'd'){
  digitalWrite(rele2,HIGH);
  }   
  if (estado == 'e'){
  digitalWrite(rele3,LOW);
  }
  if (estado == 'f'){
    digitalWrite(rele3,HIGH);
  }
  if (estado == 'g'){
  digitalWrite(rele4,LOW);
  }
  if (estado == 'h'){
    digitalWrite(rele4,HIGH);
 
  }
 
  }
  }
  }
 
Ok. Primero estudiá "arreglos" por que te a ayudar a compactar esa tonelada de código repetido.
En segundo lugar, el problema que tenés se debe al uso de delay() en vez de interrupciones...así que también estudiá interrupciones.

Y cuando limpies el código vas a poder ver una solucion alternativa a las interrupciones para salir "casi" en cualquier momento...que no es la mejor pero ahora deberías escribirla un par de millones de veces
 
Ok. Primero estudiá "arreglos" por que te a ayudar a compactar esa tonelada de código repetido.
En segundo lugar, el problema que tenés se debe al uso de delay() en vez de interrupciones...así que también estudiá interrupciones.

Y cuando limpies el código vas a poder ver una solucion alternativa a las interrupciones para salir "casi" en cualquier momento...que no es la mejor pero ahora deberías escribirla un par de millones de veces
ok gracias ¡ eso es lo que necesito ¡ me imaginaba cuando leia algo de arrays que deberia ser la mejor forma de secuenciar , tambien habia leido acerca de los millis en lugar de los delays . Cuando dices un par de millones de veces tambien pensaba en que con este sistema horroroso que estoy armando deberia preguntar en cada linea si querria salir de aqui ? de alguna forma .
Ahora al leerme te das cuenta que recien estoy comenzando ? he tratado de contactar a algun profe particular que me de clases porque ver videos y leer inicios de arduino no me estarian ayudando todo lo que necesito (pero la cuarentena lo impide por ahora) ....gracias valoro tu ayuda y sigo con lo que me decis
 
ok hoy limpie el comienzo del codigo usando ciclos , esta buenisimo , aunque es solo a nivel de practica , sigo usando delays (comence a estudiar los millis y es relamente complicado ,para alguien que no piensa como programador mientras lo estudio se me ocurre pensar que es como que idearon un sistema para tapar un bache que no tuvieron en cuenta al comienzo) ...
Recien aprendo que el arduino no puede hacer dos cosas a la vez ,pero que al ser tan rapido ,se aprovecha para simular dos o mas tareas al mismo tiempo .
Debo aclarar que el secuenciador que hice antes o este no es un tipico secuenciador de luces , lo que quiero hacer es un simulador de presencia(asi es que no estara encendida 1 sola luminaria en cada momento , quizas haya hasta 10 en simultaneo ¡ ) pero en si es una secuencia que supongo demorara 20 o 30 minutos todo el ciclo ).... y aparte el control remoto desde el celular , con lo cual si o si necesito salir de ese bucle tan largo en cualquier momento si asi lo desea el cliente
tengo una duda desde que comence a usar este modulo de 16 reles , al energizar el arduino el modulo enciende todos los reles , y si el codigo comienza con el encendido de 1 rele por pulso en el primer ciclo se encarga de apagar de auno estos , es decir el high es apagado y el low es encendido ¡¡¡¡ por eso tuve que meter esa linea donde primero desenergiza los reles antes de comenzar la secuencia

Código:
int reles[16] = {6, A4, 7, A3, 8, A2, 9, A1, 10, 2, 11, 3, 12, 4, 13, 5};
int tiempos[] = {100};
int i;
int estado=0;
int m=4;

void setup() {

  for (i=0; i<16; i++)
  {pinMode (reles[i],OUTPUT);
  }
}

void loop() {
  for (i=0; i<16; i++){
  digitalWrite(reles[i],HIGH);  
int reles[16] = {6, A4, 7, A3, 8, A2, 9, A1, 10, 2, 11, 3, 12, 4, 13, 5};
int tiempos[] = {100};
int i;
int estado=0;
int m=4;

void setup() {

  for (i=0; i<16; i++)
  {pinMode (reles[i],OUTPUT);
  }
}

void loop() {
  for (i=0; i<16; i++){
  digitalWrite(reles[i],HIGH);       // tengo que hacer esto para comenzar "apagando todos los reles "
  }
  for (i=0; i<12; i++){
  digitalWrite(reles[i],LOW);  
  delay (tiempos[i]);
  digitalWrite(reles[i],HIGH);
  }
  
  }
  }
  for (i=0; i<12; i++){
  digitalWrite(reles[i],LOW);  
  delay (tiempos[i]);
  digitalWrite(reles[i],HIGH);
  }

  }
 

Adjuntos

  • modulo 16.jpg
    modulo 16.jpg
    69.2 KB · Visitas: 3
Código:
int rele1 =6;
int rele2 =A4;
int rele3=7;
int rele4=A3;
int rele5=8;
int rele6=A2;
int rele7=9;
int rele8=A1;
int rele9=10;
int rele10=2;
int rele11=11;
int rele12=3;
int rele13=12;
int rele14=4;
int rele15=13;
int rele16=5;

int blinkLEDState1 = LOW;
int blinkLEDState2 = LOW;
int blinkLEDState3 = LOW;
int blinkLEDState4 = LOW;
int blinkLEDState5 = LOW;
int blinkLEDState6 = LOW;
int blinkLEDState7 = LOW;
int blinkLEDState8 = LOW;
int blinkLEDState9 = LOW;
int blinkLEDState10 = LOW;
int blinkLEDState11 = LOW;
int blinkLEDState12 = LOW;
int blinkLEDState13 = LOW;
int blinkLEDState14 = LOW;
int blinkLEDState15 = LOW;
int blinkLEDState16 = LOW;

unsigned long previousMillis1 =  0;   
unsigned long previousMillis2 =  0;
unsigned long previousMillis3 =  0;
unsigned long previousMillis4 =  0;
unsigned long previousMillis5 =  0;
unsigned long previousMillis6 =  0;
unsigned long previousMillis7 =  0;
unsigned long previousMillis8 =  0;
unsigned long previousMillis9 =  0;
unsigned long previousMillis10 = 0;
unsigned long previousMillis11 = 0;
unsigned long previousMillis12 = 0;
unsigned long previousMillis13 = 0;
unsigned long previousMillis14 = 0;
unsigned long previousMillis15 = 0;
unsigned long previousMillis16 = 0;

long OnTime1 = 100;      //tiempo de encendido
long OnTime2 = 200;
long OnTime3 = 300;
long OnTime4 = 400;
long OnTime5 = 500;
long OnTime6 = 600;
long OnTime7 = 700;
long OnTime8 = 800;
long OnTime9 = 800;
long OnTime10 = 700;
long OnTime11 = 600;
long OnTime12 = 500;
long OnTime13 = 400;
long OnTime14 = 300;
long OnTime15 = 200;
long OnTime16 = 100;

long OffTime1 = 100;      //tiempo de apagado
long OffTime2 = 200;
long OffTime3 = 300;
long OffTime4 = 400;
long OffTime5 = 500;
long OffTime6 = 600;
long OffTime7 = 700;
long OffTime8 = 800;
long OffTime9 = 800;
long OffTime10 = 700;
long OffTime11 = 600;
long OffTime12 = 500;
long OffTime13 = 400;
long OffTime14 = 300;
long OffTime15 = 200;
long OffTime16 = 100;

int estado=0;

void setup() {
    Serial.begin(9600);
    
  pinMode(rele1, OUTPUT);      //declaracion de pines
  pinMode(rele2, OUTPUT);
  pinMode(rele3, OUTPUT);     
  pinMode(rele4, OUTPUT);
  pinMode(rele5, OUTPUT);     
  pinMode(rele6, OUTPUT);
  pinMode(rele7, OUTPUT);     
  pinMode(rele8, OUTPUT);
  pinMode(rele9, OUTPUT);     
  pinMode(rele10, OUTPUT);
  pinMode(rele11, OUTPUT);     
  pinMode(rele12, OUTPUT);
  pinMode(rele13, OUTPUT);     
  pinMode(rele14, OUTPUT);
  pinMode(rele15, OUTPUT);     
  pinMode(rele16, OUTPUT);     
}
void secuencer (){           //SUBRUTINA SECUENCIADOR
 
 unsigned long currentMillis = millis();

 //AQUI COMIENZA EL RELE 1

 /*si el estado del led es encendido y la diferencia entre el t corriendo y el t desde inicio
  * es mayor o igual al tiempo presetablecido de encendido {apaga el led} y ahi vuelve a grabar un nuevo t corriendo
  * en el previous millis, apartir de ahi hace lo mismo para encenderlo midiendo el t de offtime
  */
  if((blinkLEDState1 == HIGH) && (currentMillis - previousMillis1 >= OnTime1))
  {
    blinkLEDState1 = LOW;
    previousMillis1 = currentMillis;
    digitalWrite(rele1, blinkLEDState1);
  }
  else if ((blinkLEDState1 == LOW) && (currentMillis - previousMillis1 >= OffTime1))
  {
    blinkLEDState1 = HIGH;
    previousMillis1 = currentMillis;
    digitalWrite(rele1, blinkLEDState1);
  }
  //AQUI COMIENZA EL RELE 2
  if((blinkLEDState2 == HIGH) && (currentMillis - previousMillis2 >= OnTime2))
  {
    blinkLEDState2 = LOW;
    previousMillis2 = currentMillis;
    digitalWrite(rele2, blinkLEDState2);
  }
  else if ((blinkLEDState2 == LOW) && (currentMillis - previousMillis2 >= OffTime2))
  {
    blinkLEDState2 = HIGH;
    previousMillis2 = currentMillis;
    digitalWrite(rele2, blinkLEDState2);
  }
   //AQUI COMIENZA EL RELE 3
  if((blinkLEDState3 == HIGH) && (currentMillis - previousMillis3 >= OnTime3))
  {
    blinkLEDState3 = LOW;
    previousMillis3 = currentMillis;
    digitalWrite(rele3, blinkLEDState3);
  }
  else if ((blinkLEDState3 == LOW) && (currentMillis - previousMillis3 >= OffTime3))
  {
    blinkLEDState3 = HIGH;
    previousMillis3 = currentMillis;
    digitalWrite(rele3, blinkLEDState3);
  }
  //AQUI COMIENZA EL RELE 4
  if((blinkLEDState4 == HIGH) && (currentMillis - previousMillis4 >= OnTime4))
  {
    blinkLEDState4 = LOW;
    previousMillis4 = currentMillis;
    digitalWrite(rele4, blinkLEDState4);
  }
  else if ((blinkLEDState4 == LOW) && (currentMillis - previousMillis4 >= OffTime4))
  {
    blinkLEDState4 = HIGH;
    previousMillis4 = currentMillis;
    digitalWrite(rele4, blinkLEDState4);
  }
   //AQUI COMIENZA EL RELE 5
  if((blinkLEDState5 == HIGH) && (currentMillis - previousMillis5 >= OnTime5))
  {
    blinkLEDState5 = LOW;
    previousMillis5 = currentMillis;
    digitalWrite(rele5, blinkLEDState5);
  }
  else if ((blinkLEDState5 == LOW) && (currentMillis - previousMillis5 >= OffTime5))
  {
    blinkLEDState5 = HIGH;
    previousMillis5 = currentMillis;
    digitalWrite(rele5, blinkLEDState5);
  }
  //AQUI COMIENZA EL RELE 6
  if((blinkLEDState6 == HIGH) && (currentMillis - previousMillis6 >= OnTime6))
  {
    blinkLEDState6 = LOW;
    previousMillis6 = currentMillis;
    digitalWrite(rele6, blinkLEDState6);
  }
  else if ((blinkLEDState6 == LOW) && (currentMillis - previousMillis6 >= OffTime6))
  {
    blinkLEDState6 = HIGH;
    previousMillis6 = currentMillis;
    digitalWrite(rele6, blinkLEDState6);
  }
   //AQUI COMIENZA EL RELE 7
  if((blinkLEDState7 == HIGH) && (currentMillis - previousMillis7 >= OnTime7))
  {
    blinkLEDState7 = LOW;
    previousMillis7 = currentMillis;
    digitalWrite(rele7, blinkLEDState7);
  }
  else if ((blinkLEDState7 == LOW) && (currentMillis - previousMillis7 >= OffTime7))
  {
    blinkLEDState7 = HIGH;
    previousMillis7 = currentMillis;
    digitalWrite(rele7, blinkLEDState7);
  }
  //AQUI COMIENZA EL RELE 8
  if((blinkLEDState8 == HIGH) && (currentMillis - previousMillis8 >= OnTime8))
  {
    blinkLEDState8 = LOW;
    previousMillis8 = currentMillis;
    digitalWrite(rele8, blinkLEDState8);
  }
  else if ((blinkLEDState8 == LOW) && (currentMillis - previousMillis8 >= OffTime8))
  {
    blinkLEDState8 = HIGH;
    previousMillis8 = currentMillis;
    digitalWrite(rele8, blinkLEDState8);
  }
   //AQUI COMIENZA EL RELE 9
  if((blinkLEDState9 == HIGH) && (currentMillis - previousMillis9 >= OnTime9))
  {
    blinkLEDState9 = LOW;
    previousMillis9 = currentMillis;
    digitalWrite(rele9, blinkLEDState9);
  }
  else if ((blinkLEDState9 == LOW) && (currentMillis - previousMillis9 >= OffTime9))
  {
    blinkLEDState9 = HIGH;
    previousMillis9 = currentMillis;
    digitalWrite(rele9, blinkLEDState9);
  }
  //AQUI COMIENZA EL RELE 10
  if((blinkLEDState10 == HIGH) && (currentMillis - previousMillis10 >= OnTime10))
  {
    blinkLEDState10 = LOW;
    previousMillis10 = currentMillis;
    digitalWrite(rele10, blinkLEDState10);
  }
  else if ((blinkLEDState10 == LOW) && (currentMillis - previousMillis10 >= OffTime10))
  {
    blinkLEDState10 = HIGH;
    previousMillis10 = currentMillis;
    digitalWrite(rele10, blinkLEDState10);
  }
   //AQUI COMIENZA EL RELE 11
  if((blinkLEDState11 == HIGH) && (currentMillis - previousMillis11 >= OnTime11))
  {
    blinkLEDState11 = LOW;
    previousMillis11 = currentMillis;
    digitalWrite(rele11, blinkLEDState11);
  }
  else if ((blinkLEDState11 == LOW) && (currentMillis - previousMillis11 >= OffTime11))
  {
    blinkLEDState11 = HIGH;
    previousMillis11 = currentMillis;
    digitalWrite(rele11, blinkLEDState11);
  }
  //AQUI COMIENZA EL RELE 12
  if((blinkLEDState12 == HIGH) && (currentMillis - previousMillis12 >= OnTime12))
  {
    blinkLEDState12 = LOW;
    previousMillis12 = currentMillis;
    digitalWrite(rele12, blinkLEDState12);
  }
  else if ((blinkLEDState12 == LOW) && (currentMillis - previousMillis12 >= OffTime12))
  {
    blinkLEDState12 = HIGH;
    previousMillis12 = currentMillis;
    digitalWrite(rele12, blinkLEDState12);
  }
   //AQUI COMIENZA EL RELE 13
  if((blinkLEDState13 == HIGH) && (currentMillis - previousMillis13 >= OnTime13))
  {
    blinkLEDState13 = LOW;
    previousMillis13 = currentMillis;
    digitalWrite(rele13, blinkLEDState13);
  }
  else if ((blinkLEDState13 == LOW) && (currentMillis - previousMillis13 >= OffTime13))
  {
    blinkLEDState13 = HIGH;
    previousMillis13 = currentMillis;
    digitalWrite(rele13, blinkLEDState13);
  }
  //AQUI COMIENZA EL RELE 14
  if((blinkLEDState14 == HIGH) && (currentMillis - previousMillis14 >= OnTime14))
  {
    blinkLEDState14 = LOW;
    previousMillis14 = currentMillis;
    digitalWrite(rele14, blinkLEDState14);
  }
  else if ((blinkLEDState14 == LOW) && (currentMillis - previousMillis14 >= OffTime14))
  {
    blinkLEDState14 = HIGH;
    previousMillis14 = currentMillis;
    digitalWrite(rele14, blinkLEDState14);
  }
   //AQUI COMIENZA EL RELE 15
  if((blinkLEDState15 == HIGH) && (currentMillis - previousMillis15 >= OnTime15))
  {
    blinkLEDState15 = LOW;
    previousMillis15 = currentMillis;
    digitalWrite(rele15, blinkLEDState15);
  }
  else if ((blinkLEDState15 == LOW) && (currentMillis - previousMillis15 >= OffTime15))
  {
    blinkLEDState15 = HIGH;
    previousMillis15 = currentMillis;
    digitalWrite(rele15, blinkLEDState15);
  }
  //AQUI COMIENZA EL RELE 16
  if((blinkLEDState16 == HIGH) && (currentMillis - previousMillis16 >= OnTime16))
  {
    blinkLEDState16 = LOW;
    previousMillis16 = currentMillis;
    digitalWrite(rele16, blinkLEDState16);
  }
  else if ((blinkLEDState16 == LOW) && (currentMillis - previousMillis16 >= OffTime16))
  {
    blinkLEDState16 = HIGH;
    previousMillis16 = currentMillis;
    digitalWrite(rele16, blinkLEDState16);
}
}
void control () {                          //SUBRUTINA CONTROL REMOTO
  if (Serial.available()>0){
  estado=Serial.read();
 
  if (estado == 'a'){
  digitalWrite(rele1,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'b'){
  digitalWrite(rele1,HIGH);
  }
  if (estado == 'c'){
  digitalWrite(rele2,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'd'){
  digitalWrite(rele2,HIGH);
  }
  if (estado == 'e'){
  digitalWrite(rele3,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'f'){
  digitalWrite(rele3,HIGH);
  }
  if (estado == 'g'){
  digitalWrite(rele4,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'h'){
  digitalWrite(rele4,HIGH);
  }
  if (estado == 'i'){
  digitalWrite(rele5,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'j'){
  digitalWrite(rele5,HIGH);
  }
  if (estado == 'k'){
  digitalWrite(rele6,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'l'){
  digitalWrite(rele6,HIGH);
  }
  if (estado == 'm'){
  digitalWrite(rele7,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'n'){
  digitalWrite(rele7,HIGH);
  }
  if (estado == 'o'){
  digitalWrite(rele8,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'p'){
  digitalWrite(rele8,HIGH);
  }
  if (estado == 'q'){
  digitalWrite(rele9,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'r'){
  digitalWrite(rele9,HIGH);
  }
  if (estado == 's'){
  digitalWrite(rele10,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 't'){
  digitalWrite(rele10,HIGH);
  }
  if (estado == 'u'){
  digitalWrite(rele11,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'v'){
  digitalWrite(rele11,HIGH);
  }
  if (estado == 'w'){
  digitalWrite(rele12,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'x'){
  digitalWrite(rele12,HIGH);
  }
  if (estado == 'y'){
  digitalWrite(rele13,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == 'z'){
  digitalWrite(rele13,HIGH);
  }
  if (estado == '1'){
  digitalWrite(rele14,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == '2'){
  digitalWrite(rele14,HIGH);
  }
  if (estado == '3'){
  digitalWrite(rele15,LOW);
  digitalWrite(rele16,HIGH);
  }
  if (estado == '4'){
  digitalWrite(rele15,HIGH);
  }
  if (estado == '5'){
  digitalWrite(rele16,LOW);
  digitalWrite(rele1,HIGH);
  digitalWrite(rele2,HIGH);
  digitalWrite(rele3,HIGH);
  digitalWrite(rele4,HIGH);
  digitalWrite(rele5,HIGH);
  digitalWrite(rele6,HIGH);
  digitalWrite(rele7,HIGH);
  digitalWrite(rele8,HIGH);
  digitalWrite(rele9,HIGH);
  digitalWrite(rele10,HIGH);
  digitalWrite(rele11,HIGH);
  digitalWrite(rele12,HIGH);
  digitalWrite(rele13,HIGH);
  digitalWrite(rele14,HIGH);
  digitalWrite(rele15,HIGH);

  }
  if (estado == '6'){
    digitalWrite(rele16,HIGH);
  }
  }
  }
void loop(){
  if (Serial.available()>0){
    estado=Serial.read();
  }
  if (estado == '8'){
  control ();
  }
  else if (estado == '7'){
  secuencer () ;
  }
  }
OK ,segui estudiando un poco y realice el secuenciador con millis , averigue que el modulo de rele de arduino funciona con logica inversa , por eso lo de low encendido y high apagado , logre poder salir con millis del bucle del secuenciador , probe de esta forma y al enviar un mensaje bt entra en la subrutina secuencer y al presionar la tecla del sketch de control remoto el comportamiento es erratico , lo seguro es que luego de entrar en el modo control remoto de los reles solo me obedece una sola ves (al tocar cualquiera de los 32 botones con suerte me respondera una sola vez ¡) si quiero activar o desactivar cualquier otro rele debo tocar de nuevo la tecla control , he aqui el codigo :
 
Atrás
Arriba