Advertisement
RuiViana

MD

Jan 8th, 2018
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.50 KB | None | 0 0
  1. const int ch1 = A1, //Canal 1 do rádio instanciado à entrada digital 2
  2.           ch2 = A2, //Canal 2 do rádio instanciado à entrada digital 3
  3.           ch4 = A4, //Canal 4 do rádio instanciado à entrada digital 5
  4.           LED_RED = 6,  //LED onboard
  5.           // LED_RED = 13,  //LED onboard
  6.           LED_GRN = 9, //LED onboard
  7.           LED_BLU = 10; //LED onboard
  8.  
  9. // --- Protótipo das funções auxiliares ---
  10.  
  11. void le_canais();      //Função para leitura das entradas dos canais
  12. void testa_valores();       //Testa os valores minimos e máximos dos canais para armazeenamento
  13.  
  14. // --- Declaração de variáveis globais ---
  15.  
  16. //variáveis para os canais do rádio
  17. int med = 1500; // define um valor médio para calculo de estabilidade dos pulsos do Radio Controle
  18.  
  19. int canal_01 = 0,
  20.     ch1_min = med,
  21.     ch1_max = 0,
  22.  
  23.     canal_02 = 0,
  24.     ch2_min = med,
  25.     ch2_max = 0,
  26.  
  27.     canal_04 = 0,
  28.     ch4_min = med,
  29.     ch4_max = 0;
  30.  
  31. 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.
  32.  
  33. int V_RED = 0,
  34.     V_GRN = 0,
  35.     V_BLU = 0;
  36.  
  37. int X_RED = 0,
  38.     X_GRN = 0,
  39.     X_BLU = 0;
  40.  
  41. int flag = 0;
  42. int count = 0;
  43. //-------------------------------------------------------
  44. // --- Rotina de Interrupção ---
  45. ISR(TIMER2_OVF_vect)
  46. {
  47.   TCNT2 = 100;        // Reinicializa o registrador do Timer2
  48.   flag = 1;
  49. } //end ISR
  50. //-----------------------------
  51. void mineirin()
  52. {
  53.   if (flag == 1)
  54.   {
  55.     if (canal_01 > 0) {
  56.       if (canal_01 < ch1_min) {
  57.         ch1_min = canal_01;
  58.       }
  59.       if (canal_01 > ch1_max) {
  60.         ch1_max = canal_01;
  61.       }
  62.       analogWrite(LED_RED, V_RED); //LED inicia desligado
  63.     }
  64.     else V_RED = 0;                 //Senão muda o valor do LED vermelho para desligado.
  65.  
  66.     if (canal_02 > 0) {
  67.       if (canal_02 < ch2_min) {
  68.         ch2_min = canal_02;
  69.       }
  70.       if (canal_02 > ch2_max) {
  71.         ch2_max = canal_02;
  72.       }
  73.       analogWrite(LED_GRN, V_GRN); //LED inicia desligado
  74.     }
  75.     else V_GRN = 0;                 //Senão muda o valor do LED vermelho para desligado.
  76.  
  77.     if (canal_04 > 0) {
  78.       if (canal_04 < ch4_min) {
  79.         ch4_min = canal_04;
  80.       }
  81.       if (canal_04 > ch4_max) {
  82.         ch4_max = canal_04;
  83.       }
  84.       analogWrite(LED_BLU, V_BLU); //LED inicia desligado
  85.     }
  86.     else V_BLU = 0;                 //Senão muda o valor do LED vermelho para desligado.
  87.     flag = 0;
  88.   }
  89. }
  90.  
  91. // --- Configurações iniciais ---
  92. //----------------------------------------------
  93. void setup()
  94. {
  95.   //  Serial.begin(115200);
  96.  
  97.   // -- Direção dos I/Os --
  98.   pinMode(ch1, INPUT); //Entrada para o canal 1 do rádio
  99.   pinMode(ch2, INPUT); //Entrada para o canal 2 do rádio
  100.   pinMode(ch4, INPUT); //Entrada para o canal 4 do rádio
  101.  
  102.   pinMode(LED_RED, OUTPUT); //saída para o LED onboard
  103.   pinMode(LED_GRN, OUTPUT); //saída para o LED onboard
  104.   pinMode(LED_BLU, OUTPUT); //saída para o LED onboard
  105.  
  106.   analogWrite(LED_RED, V_RED);
  107.   analogWrite(LED_GRN, V_GRN);
  108.   analogWrite(LED_BLU, V_BLU);
  109.  
  110.   // -- Registradores de configuração do Timer2 --
  111.   TCCR2A = 0x00;   //Timer operando em modo normal
  112.   TCCR2B = 0x07;   //Prescaler 1:1024
  113.   TCNT2  = 100;    //10 ms overflow again
  114.   TIMSK2 = 0x01;   //Habilita interrupção do Timer2
  115. }
  116.  
  117. //------------------------------------------
  118. void loop()
  119. {
  120.   mineirin();
  121.   le_canais(); //Lê os 3 canais do rádio
  122.   testa_valores(); // Testa e armazena os valores mínimos e máximos dos canais
  123.   if (count < 10)
  124.   {
  125.     //    ch1_min = 0;
  126.     V_RED = map(canal_01, ch1_min, ch1_max, 0, 50);
  127.     V_RED = constrain(V_RED, 0, 255);
  128.     X_RED = X_RED + V_RED;
  129.     //    ch2_min = 0;
  130.     V_GRN = map(canal_02, ch2_min, ch2_max, 0, 50);
  131.     V_GRN = constrain(V_GRN, 0, 255);
  132.     X_GRN = X_GRN + V_GRN;
  133.     //    ch4_min = 0;
  134.     V_BLU = map(canal_04, ch4_min, ch4_max, 0, 50);
  135.     V_BLU = constrain(V_BLU, 0, 255);
  136.     X_BLU = X_BLU + V_BLU;
  137.     count ++;
  138.   }
  139.   else
  140.   {
  141.     V_RED = X_RED / 10;
  142.     V_GRN = X_GRN / 10;
  143.     V_BLU = X_BLU / 10;
  144.     /*    Serial.println(count);
  145.         Serial.println(V_RED);
  146.         Serial.println(V_GRN);
  147.         Serial.println(V_BLU);
  148.         Serial.println( );*/
  149.     X_RED = 0;
  150.     X_GRN = 0;
  151.     X_BLU = 0;
  152.     count = 0;
  153.   }
  154. }
  155. //--------------------------------------
  156. void le_canais() //Faz a leitura dos 5 primeiros canais do rádio
  157. {
  158.   canal_01 = pulseIn(ch1, HIGH, TimeOverFlow); //Lê pulso em nível alto do canal 1 e armazena na variável canal_01
  159.   canal_02 = pulseIn(ch2, HIGH, TimeOverFlow); //Lê pulso em nível alto do canal 2 e armazena na variável canal_02
  160.   canal_04 = pulseIn(ch4, HIGH, TimeOverFlow); //Lê pulso em nível alto do canal 4 e armazena na variável canal_04
  161.   //  canal_01 = 10;
  162.   //  canal_02 = 20;
  163.   //  canal_04 = 30;
  164.  
  165.   //  Serial.println(canal_01);
  166.   //  Serial.println(canal_02);
  167.   //  Serial.println(canal_04);
  168.  
  169. } //end read channels
  170. //--------------------------
  171. void testa_valores() //Faz o comparativos dos minimos e máximos dos canais do rádio
  172. {
  173.   if (canal_01 > 0 && canal_01 <= ch1_min) ch1_min = canal_01;
  174.   if (canal_01 > 0 && canal_01 >= ch1_max) ch1_max = canal_01;
  175.  
  176.   if (canal_02 > 0 && canal_02 <= ch2_min) ch2_min = canal_02;
  177.   if (canal_02 > 0 && canal_02 >= ch2_max) ch2_max = canal_02;
  178.  
  179.   if (canal_04 > 0 && canal_04 <= ch4_min) ch4_min = canal_04;
  180.   if (canal_04 > 0 && canal_04 >= ch4_max) ch4_max = canal_04;
  181.  
  182. } //fim dos comparativos min e max
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement