Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int ch1 = A1, //Canal 1 do rádio instanciado à entrada digital 2
- ch2 = A2, //Canal 2 do rádio instanciado à entrada digital 3
- ch4 = A4, //Canal 4 do rádio instanciado à entrada digital 5
- LED_RED = 6, //LED onboard
- // LED_RED = 13, //LED onboard
- LED_GRN = 9, //LED onboard
- LED_BLU = 10; //LED onboard
- // --- Protótipo das funções auxiliares ---
- void le_canais(); //Função para leitura das entradas dos canais
- void testa_valores(); //Testa os valores minimos e máximos dos canais para armazeenamento
- // --- Declaração de variáveis globais ---
- //variáveis para os canais do rádio
- int med = 1500; // define um valor médio para calculo de estabilidade dos pulsos do Radio Controle
- int canal_01 = 0,
- ch1_min = med,
- ch1_max = 0,
- canal_02 = 0,
- ch2_min = med,
- ch2_max = 0,
- canal_04 = 0,
- ch4_min = med,
- ch4_max = 0;
- long TimeOverFlow = 40000; // Time Out da PulseIN. Define um tempo limite em microsegundos de leitura (OverFlow) de cada canal. Padrão 50000. Quato maior, mais estável.
- int V_RED = 0,
- V_GRN = 0,
- V_BLU = 0;
- int X_RED = 0,
- X_GRN = 0,
- X_BLU = 0;
- int flag = 0;
- int count = 0;
- //-------------------------------------------------------
- // --- Rotina de Interrupção ---
- ISR(TIMER2_OVF_vect)
- {
- TCNT2 = 100; // Reinicializa o registrador do Timer2
- flag = 1;
- } //end ISR
- //-----------------------------
- void mineirin()
- {
- if (flag == 1)
- {
- if (canal_01 > 0) {
- if (canal_01 < ch1_min) {
- ch1_min = canal_01;
- }
- if (canal_01 > ch1_max) {
- ch1_max = canal_01;
- }
- analogWrite(LED_RED, V_RED); //LED inicia desligado
- }
- else V_RED = 0; //Senão muda o valor do LED vermelho para desligado.
- if (canal_02 > 0) {
- if (canal_02 < ch2_min) {
- ch2_min = canal_02;
- }
- if (canal_02 > ch2_max) {
- ch2_max = canal_02;
- }
- analogWrite(LED_GRN, V_GRN); //LED inicia desligado
- }
- else V_GRN = 0; //Senão muda o valor do LED vermelho para desligado.
- if (canal_04 > 0) {
- if (canal_04 < ch4_min) {
- ch4_min = canal_04;
- }
- if (canal_04 > ch4_max) {
- ch4_max = canal_04;
- }
- analogWrite(LED_BLU, V_BLU); //LED inicia desligado
- }
- else V_BLU = 0; //Senão muda o valor do LED vermelho para desligado.
- flag = 0;
- }
- }
- // --- Configurações iniciais ---
- //----------------------------------------------
- void setup()
- {
- // Serial.begin(115200);
- // -- Direção dos I/Os --
- pinMode(ch1, INPUT); //Entrada para o canal 1 do rádio
- pinMode(ch2, INPUT); //Entrada para o canal 2 do rádio
- pinMode(ch4, INPUT); //Entrada para o canal 4 do rádio
- pinMode(LED_RED, OUTPUT); //saída para o LED onboard
- pinMode(LED_GRN, OUTPUT); //saída para o LED onboard
- pinMode(LED_BLU, OUTPUT); //saída para o LED onboard
- analogWrite(LED_RED, V_RED);
- analogWrite(LED_GRN, V_GRN);
- analogWrite(LED_BLU, V_BLU);
- // -- Registradores de configuração do Timer2 --
- TCCR2A = 0x00; //Timer operando em modo normal
- TCCR2B = 0x07; //Prescaler 1:1024
- TCNT2 = 100; //10 ms overflow again
- TIMSK2 = 0x01; //Habilita interrupção do Timer2
- }
- //------------------------------------------
- void loop()
- {
- mineirin();
- le_canais(); //Lê os 3 canais do rádio
- testa_valores(); // Testa e armazena os valores mínimos e máximos dos canais
- if (count < 10)
- {
- // ch1_min = 0;
- V_RED = map(canal_01, ch1_min, ch1_max, 0, 50);
- V_RED = constrain(V_RED, 0, 255);
- X_RED = X_RED + V_RED;
- // ch2_min = 0;
- V_GRN = map(canal_02, ch2_min, ch2_max, 0, 50);
- V_GRN = constrain(V_GRN, 0, 255);
- X_GRN = X_GRN + V_GRN;
- // ch4_min = 0;
- V_BLU = map(canal_04, ch4_min, ch4_max, 0, 50);
- V_BLU = constrain(V_BLU, 0, 255);
- X_BLU = X_BLU + V_BLU;
- count ++;
- }
- else
- {
- V_RED = X_RED / 10;
- V_GRN = X_GRN / 10;
- V_BLU = X_BLU / 10;
- /* Serial.println(count);
- Serial.println(V_RED);
- Serial.println(V_GRN);
- Serial.println(V_BLU);
- Serial.println( );*/
- X_RED = 0;
- X_GRN = 0;
- X_BLU = 0;
- count = 0;
- }
- }
- //--------------------------------------
- void le_canais() //Faz a leitura dos 5 primeiros canais do rádio
- {
- canal_01 = pulseIn(ch1, HIGH, TimeOverFlow); //Lê pulso em nível alto do canal 1 e armazena na variável canal_01
- canal_02 = pulseIn(ch2, HIGH, TimeOverFlow); //Lê pulso em nível alto do canal 2 e armazena na variável canal_02
- canal_04 = pulseIn(ch4, HIGH, TimeOverFlow); //Lê pulso em nível alto do canal 4 e armazena na variável canal_04
- // canal_01 = 10;
- // canal_02 = 20;
- // canal_04 = 30;
- // Serial.println(canal_01);
- // Serial.println(canal_02);
- // Serial.println(canal_04);
- } //end read channels
- //--------------------------
- void testa_valores() //Faz o comparativos dos minimos e máximos dos canais do rádio
- {
- if (canal_01 > 0 && canal_01 <= ch1_min) ch1_min = canal_01;
- if (canal_01 > 0 && canal_01 >= ch1_max) ch1_max = canal_01;
- if (canal_02 > 0 && canal_02 <= ch2_min) ch2_min = canal_02;
- if (canal_02 > 0 && canal_02 >= ch2_max) ch2_max = canal_02;
- if (canal_04 > 0 && canal_04 <= ch4_min) ch4_min = canal_04;
- if (canal_04 > 0 && canal_04 >= ch4_max) ch4_max = canal_04;
- } //fim dos comparativos min e max
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement