tiempo de programación en AVR

0

Tengo una placa que tiene 3 relés. Tengo 3 funciones para configurar / restablecer / alternar un relé que obtiene un número de relé especial y hago lo siguiente:

void SetRelay(byte RelayNo) //index 1
{
    switch (RelayNo) {
        case 0:
        S_R1;
        break;
        case 1:
        S_R2;
        break;
        case 2:
        S_R3;
        break;
    }
}

void ResetRelay(byte RelayNo)//index 2
{
    switch (RelayNo) {
        case 0:
        R_R1;
        break;
        case 1:
        R_R2;
        break;
        case 2:
        R_R3;
        break;
    }
}

void ToggleRelay(byte RelayNo)//index 3
{
    switch (RelayNo) {
        case 0:
        T_R1;
        break;
        case 1:
        T_R2;
        break;
        case 2:
        T_R3;
        break;
    }
}

Envío un paquete para abordar algo como:

Índicederetransmisión:índiceparaactivarunreléespecial.

Nombredelafunción:sedebeejecutaruníndiceparalafuncióndebrujaparaelíndicederetransmisiónespecial.

Tiempodeprogramación:esuntiempoenmilisegundosqueunafuncióndebeactivarseparauníndicederetransmisiónespecial.

Unpaquetedemuestra:

Eso significa que el tablero debe estar activo

  • El índice de retransmisión 1 debe activarse en la función número 3 ( ToggleRelay ) en 2000 milisegundos
  • El índice de retransmisión 3 debe activarse en la función número 1 ( SetRelay ) en 1000 milisegundos
  • El índice de retransmisión 1 debe activarse en la función número 2 ( ResetRelay ) en 2200 milisegundos

Si solo quieres disparar un relé con una , debe funcionar con sistema temporizador , PERO alguien tiene alguna sugerencia sobre cómo hacerlo. con más de una función?

    
pregunta combo_ci

1 respuesta

-1

Bastante fácil.

Tiempo1 = milis ()   Si (time1minus time0 es más que timeelapsed0) procesa relay0

Y repítalo para otros dos relés.

Time0 se actualiza cada vez que se recibe un nuevo paquete.

    
respondido por el dannyf

Lea otras preguntas en las etiquetas