Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <TimerOne.h> // Biblioteca do timer1
- int sortValues[4] = { 5000, 1500, 4000, 6000 }; // Valores para disparo dos Triacs
- //int a[4]; // Backup dos valors de disparo
- int Aa; // Backup dos valores de disparo
- int Ab;
- int Ac;
- int Ad;
- int flag = 0; // Flag para controle de rodagem
- byte Diac = 0; // Variavel para definir sequencia de disparo
- # define Canais 4 // Numero de canais de Triacs
- byte TriacPort[Canais] = {4, 5, 6, 7}; // Ports para cada canal (triac)
- byte c = 0; // Variavel para os ports dos Triacs
- byte DispAa = 0; // Controle de diparo
- byte DispAb = 0;
- byte DispAc = 0;
- byte DispAd = 0;
- //-------------------------
- void setup()
- {
- for ( byte c = 0; c < Canais; c++ ) // Loop para definir port modes
- {
- pinMode(TriacPort[c], OUTPUT); // Define o prot de disparo do Triac como output
- }
- Serial.begin(9600);
- Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
- }
- //------------------------
- void loop()
- {
- if (flag == 0) // Só executa ao modificar valores
- {
- sort(sortValues, 4); // Chama rotina que sequencia tempos de disparo
- SequenciadorDeDisparo(); // Chama rotina que determina sequencia de disparo
- }
- }
- //----------------------------
- void sort(int a[], int size) // Sequencia tempos de disparo
- {
- Salva(); // chama rotina que salva valores na ordem original
- for (int i = 0; i < (size - 1); i++)
- {
- for (int j = 0; j < (size - (i + 1)); j++)
- {
- if (a[j] > a[j + 1])
- {
- int t = a[j];
- a[j] = a[j + 1];
- a[j + 1] = t;
- }
- }
- }
- }
- //--------------------------------
- void Salva() // Salva valores na ordem original
- {
- if (flag == 0) // Só executa ao modificar valores
- {
- Aa = sortValues[0];
- Ab = sortValues[1];
- Ac = sortValues[2];
- Ad = sortValues[3];
- flag = 1; // Informa que já rodu uma vez
- }
- }
- //----------------------------------
- void callback() // Dispara Triac. Cada vez que "estoura" o timer 1 chama esta rotina
- {
- digitalWrite(TriacPort[c], HIGH); // Dispara triac definido em c
- delayMicroseconds(50); // Tempo minimo para disparo em useg
- digitalWrite(TriacPort[c], LOW); // Corta disparo
- Timer1.stop(); // Para Timer1
- Diac++; // Incrementa seaquenciador de Disparo
- if (Diac >= 4) Diac = 0; // Se sequenciador > 4 zera
- SequenciadorDeDisparo(); // Chama rotina que determina sequencia de disparo
- }
- //----------------------------
- void SequenciadorDeDisparo() // Rotina que determina sequencia de disparo
- {
- if (DispAa == 0) // Se Triac 0 ainda não disparou
- {
- if (sortValues[Diac] == Aa) // Se o valor referenciado for o igual ao primeiro
- {
- Timer1.initialize(sortValues[Diac]); // Carrega valor no Timer1
- c = 0; // Informa que é o Triac 0 a ser disparado
- DispAa = 1; // Informa que já disparou o Triac 0
- DispAb = 0; // Prepara para disparar o Triac 1
- }
- }
- if (DispAb == 0) // Se Triac 1 ainda não disparou
- {
- if (sortValues[Diac] == Ab) // Se o valor referenciado for o igual ao segundo
- {
- Timer1.initialize(sortValues[Diac]); // Carrega valor no Timer1
- c = 1; // Informa que é o Triac 1 a ser disparado
- DispAb = 1; // Informa que já disparou o Triac 1
- DispAc = 0; // Prepara para disparar o Triac 2
- }
- }
- if (DispAc == 0) // Se Triac 2 ainda não disparou
- {
- if (sortValues[Diac] == Ac) // Se o valor referenciado for o igual ao terceiro
- {
- Timer1.initialize(sortValues[Diac]); // Carrega valor no Timer1
- c = 2; // Informa que é o Triac 2 a ser disparado
- DispAc = 1; // Informa que já disparou o Triac 3
- DispAd = 0; // Prepara para disparar o Triac 3
- }
- }
- if (DispAd == 0) // Se Triac 3 ainda não disparou
- {
- if (sortValues[Diac] == Ad) // Se o valor referenciado for o igual ao quarto
- {
- Timer1.initialize(sortValues[Diac]); // Carrega valor no Timer1
- c = 3; // Informa que é o Triac 3 a ser disparado
- DispAd = 1; // Informa que já disparou o Triac 3
- DispAa = 0; // Prepara para disparar o Triac 0 (proximo Ciclo)
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement