Espero que se entienda mejor con esta imagen que es lo que hago:
Arriba puse lo que es "contador LLamada" y con las flechas para arriba cuando es que suma. Por eso comienza de 1.
Si observas mi idea es que cuando esta en 1 y en 3 se de un pulso en LLAMADA, esto por que el primer pulso es para entrar a los telefonos que se llamaron ultimos, y el otro pulso es para realizar la llamada. Luego espera 20 interrupciones mas ( hasta llegar al 23 - 10 segundos ) y procede a dar un pulso de cortar.
Quedan 2 formas de agregar mas llamadas. La primera es agregar mas condiciones. Como ves puede que complique un poco las cosas.
if(ContadorLLamada < 255 )
{
if( (ContadorLLamada == 1) || (ContadorLLamada == 3) || (ACA_AGREGAR_RESTANTES))
{
xxxx
}
else if ( (ContadorLLamada == 23) || (ACA_AGREGAR_RESTANTES) )
{
xxxx
}
else
{
xxxxx
}
ContadorLLamada++;
}
else {......}
Suponiendo que quisiera 3 llamadas, separadas por 10 segundos cada una ( 20 ContadorLLamada )
La primera termina a los 23 entrada de la interrupcion. la segunda deberia comenzar a los 43 el primer pulso y 45 el segundo, y cortar a los 65. La tercera comenzar a los 85, el segundo pulso a los 87 y cortar a los 107.
Esto te dejaria el if de activar llamada asi:
if( (ContadorLLamada == 1) || (ContadorLLamada == 3) || (ContadorLLamada == 43) || (ContadorLLamada == 45) || (ContadorLLamada == 85) || (ContadorLLamada == 87))
Y el else if asi:
else if ( (ContadorLLamada == 23) || (ContadorLLamada == 65) || (ContadorLLamada == 107))
Ademas deberias cambiar el primer if:
if(ContadorLLamada < 110 )
Ese if esta para que no cuente hasta 255 y pase a 0, llamando de nuevo. A partir de 110 no entra mas hasta que alguien pone a 0 a LlamadaActiva.
¿Un poquito largos los if verdad? ¿Y que tal si quiero 4/5 o 6 ? Seria un if gigante! y malo. Hay mejor solucion, o tal ves mas practica. Creemos un ContadorVecesLlamada.
if(ContadorLLamada < 44 )
{
if( (ContadorLLamada == 1) || (ContadorLLamada == 3) ) // Primera entrada presiona LLAMAR por 0.5s
{ // Espera 0.5s y presiona LLAMAR de nuevo por 0.5s
xxxx
}
else if ( ContadorLLamada == 23 ) // Pasan 10 segundos desde que se llamo y se corta
{
xxxx
}
else if ( ContadorLLamada == 43 )
{
if(ContadorVecesLLamada < 3)
{
ContadorLLamada = 0;
}
ContadorVecesLLamada++;
}
else
{
xxxxx
}
ContadorLLamada++;
}
else {......}
Obviamente con esto hay que modificar otras partes del programa, para que cuando LLamadaActiva se ponga a 0, tambien lo haga el ContadorVecesLLamada. En resumen en la parte del if que se ejecuta cuando LLamadaActiva es 0, ponele un ContadorVecesLLamada = 0; y ya estaria funcionando ( Exactamente dentro del if de ContadorLLamada !=0 )
Cambie 2 cosas del codigo, primero aumente el rango en que ContadorLLamada va a contar, ahora llega hasta 43 ( Ultimo corte + 10 segundos mas ), Cuando llega a 43 entra al nuevo else if, y pregunta cuantas llamadas se hicieron, ahi con solo modificar 1 numero cambias cuantas veces queres que te llame. Observa que no cambie nada mas de lo otro. Solo deberia agregar la linea que dije antes, pero es para cuando se desactiva LLamadaActiva.
Intenta hacerlo ahora con eso en mente y vemos