Advertisement
Guest User

CODGO RESUMIDO

a guest
Jul 30th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.61 KB | None | 0 0
  1. #define irLedPin 2 // Ir Led neste pino############################# siguinifica do outro codgo#####################
  2. #define irSensorPin 11 // Sensor IR neste pino#########################
  3. #include <PinChangeInt.h>
  4. #include <Servo.h>
  5. // Assign your channel in pins
  6. #define THROTTLE_IN_PIN 8
  7. #define AUX_IN_PIN 10
  8. // Assign your channel out pins
  9. #define THROTTLE_OUT_PIN 5
  10. #define AUX_OUT_PIN 7
  11. // Os objetos Servo geram os sinais esperados pelos Controladores e Servos de Velocidade Eletrônicos
  12. // Usaremos os objetos para produzir os sinais que lemos
  13. // este código de exemplo fornece uma passagem direta do sinal sem processamento personalizado
  14. Servo servoThrottle;
  15. Servo servoAux;
  16. // Esses sinalizadores de bits são definidos em bUpdateFlagsShared para indicar qual
  17. // canais têm novos sinais
  18. #define THROTTLE_FLAG 1
  19. #define AUX_FLAG 4
  20. // contém as bandeiras de atualização definidas acima
  21. volatile uint8_t bUpdateFlagsShared;
  22. // variáveis compartilhadas são atualizadas pelo ISR e lidas por loop.
  23. // Em loop, imediatamente pegamos cópias locais para que o ISR possa manter a propriedade do
  24. // compartilhados. Para acessar estes no loop
  25. // primeiro desligamos as interrupções com não Interrupções
  26. // tiramos uma cópia para usar no loop e as interrupções de volta de volta
  27. // o mais rápido possível, isso garante que sempre possamos receber novos sinais
  28. volatile uint16_t unThrottleInShared;
  29. volatile uint16_t unAuxInShared;
  30. // Estes são usados para registrar a margem ascendente de um pulso nas funções calcInput
  31. // Eles não precisam ser voláteis, pois são usados apenas no ISR. Se quiséssemos
  32. // para se referir a estes em loop e ao ISR, eles deveriam ser declarados voláteis
  33. uint32_t ulThrottleStart;
  34. uint32_t ulAuxStart;
  35. void setup()
  36. {
  37. pinMode(irSensorPin, INPUT);//#######################################
  38. pinMode(irLedPin, OUTPUT); // ######################################
  39. Serial.begin(9600);
  40. Serial.println("multiChannels");
  41. servoThrottle.attach(THROTTLE_OUT_PIN);
  42. servoAux.attach(AUX_OUT_PIN);
  43. // using the PinChangeInt library, attach the interrupts
  44. // used to read the channels
  45. PCintPort::attachInterrupt(THROTTLE_IN_PIN, calcThrottle,CHANGE);
  46. PCintPort::attachInterrupt(AUX_IN_PIN, calcAux,CHANGE);
  47. }
  48. void loop()
  49. {
  50. //Serial.println(irRead(irSensorPin, irLedPin)); // exibe os resultados######################################################
  51. // criar variáveis locais para armazenar cópias locais das entradas de canal
  52. // Estes são declarados estáticos para que seus valores sejam mantidos
  53. // between calls to loop.
  54. static uint16_t unThrottleIn;
  55. static uint16_t unAuxIn;
  56. local copy of update flags
  57. static uint8_t bUpdateFlags;
  58. int irRead(int readPin, int triggerPin)//######################################################################################
  59. {
  60. int halfPeriod = 13; // um período de 38.5khZ é de aproximadamente 26 microssegundos#########################################
  61. int cycles = 38; // 26 microseconds * 38 é mais ou menos 1 milissegundo########################################################
  62. int i; // ########################################################################
  63. for (i=0; i <=cycles; i++) // ###########################################################################
  64. {
  65. digitalWrite(triggerPin, HIGH); //################################################################################
  66. delayMicroseconds(halfPeriod);//##########################################################################
  67. digitalWrite(triggerPin, LOW);// ########################################################################
  68. delayMicroseconds(halfPeriod - 1); // - 1 para compensar DigitaWrite sobrecarga#####################################
  69. }
  70. return digitalRead(readPin);//########################################################################################
  71. //}
  72. // check shared update flags to see if any channels have a new signal
  73. if(bUpdateFlagsShared)
  74. {
  75. noInterrupts(); // Desliga-se rapidamente enquanto tomamos cópias locais das variáveis compartilhadas
  76.  
  77. // Pegue uma cópia local de quais canais foram atualizados caso precisamos usar isso no resto do loop
  78. bUpdateFlags = bUpdateFlagsShared;
  79.  
  80. // No código atual, os valores compartilhados são sempre preenchidos
  81. // Para que possamos copiá-los sem testar as bandeiras
  82. // No entanto, no futuro isso pode mudar, então vamos
  83. // Apenas copie quando as bandeiras nos dizem que podemos.
  84.  
  85. if(bUpdateFlags & THROTTLE_FLAG)
  86. {
  87. unThrottleIn = unThrottleInShared;
  88. }
  89.  
  90. if(bUpdateFlags & AUX_FLAG)
  91. {
  92. unAuxIn = unAuxInShared;
  93. }
  94.  
  95. // Limpe a cópia compartilhada de sinalizadores atualizados, já que já tomamos as atualizações
  96. // Ainda temos uma cópia local se precisarmos usá-la em bUpdateFlags
  97. bUpdateFlagsShared = 0;
  98.  
  99. interrupts(); //Nós temos cópias locais das entradas, então agora podemos fazer as interrupções de volta
  100. // Assim que as interrupções estiverem de volta, não podemos mais usar as cópias compartilhadas, a interrupção
  101. // As rotinas de serviços possuem essas e podem atualizá-las a qualquer momento. Durante a atualização, o
  102. // As cópias compartilhadas podem conter lixo. Felizmente, temos nossas cópias locais para trabalhar com :-)
  103. }
  104.  
  105. // Faça qualquer processamento a partir daqui em diante
  106. // Use apenas valores locais unAuxIn, unThrottleIn e unSteeringIn, o compartilhado
  107. //Variáveis unAuxInShared, unThrottleInShared, unSteeringInShared são sempre propriedade de
  108. // As rotinas de interrupção e não devem ser usadas em loop
  109. // O código a seguir fornece passagem simples
  110. // Este é um bom teste inicial, o Arduino irá passar
  111. // Entrada do receptor como se o Arduino não estivesse lá.
  112. // Isso deve ser usado para confirmar o circuito e a alimentação
  113. // Antes de tentar qualquer processamento personalizado em um projeto.
  114. // Estamos verificando se o valor do canal mudou, isto é indicado
  115. // Pelas bandeiras. Para o simples passe, realmente não precisamos deste cheque,
  116. // Mas para um projeto mais complexo, onde um novo sinal requer um processamento significativo
  117. // Isso nos permite apenas calcular novos valores quando temos novas entradas, em vez de
  118. // Em todos os ciclos.
  119. if(bUpdateFlags & THROTTLE_FLAG)
  120. {
  121. if(servoThrottle.readMicroseconds() != unThrottleIn)
  122. {
  123. servoThrottle.writeMicroseconds(unThrottleIn);
  124. }
  125. }
  126. if(bUpdateFlags & AUX_FLAG)
  127. {
  128. if(servoAux.readMicroseconds() != unAuxIn)
  129. {
  130. servoAux.writeMicroseconds(unAuxIn);
  131. }
  132. }
  133.  
  134. bUpdateFlags = 0;
  135. }
  136. // Rotina de serviço de interrupção simples
  137. void calcThrottle()
  138. {
  139. // Se o pino estiver alto, é uma margem ascendente do pulso do sinal, de modo a registrar seu valor
  140. if(digitalRead(THROTTLE_IN_PIN) == HIGH)
  141. {
  142. ulThrottleStart = micros();
  143. }
  144. else
  145. {
  146. // Senão deve ser uma borda descendente, então vamos dar o tempo e subtrair o tempo da margem ascendente
  147. // Isso dá uso do tempo entre os limites ascendente e descendente, isto é, a duração do pulso.
  148. unThrottleInShared = (uint16_t)(micros() - ulThrottleStart);
  149. // Use set the throttle flag para indicar que um novo sinal de aceleração foi recebido
  150. bUpdateFlagsShared |= THROTTLE_FLAG;
  151. }
  152. }
  153. void calcAux()
  154. {
  155. if(digitalRead(AUX_IN_PIN) == HIGH)
  156. {
  157. ulAuxStart = micros();
  158. }
  159. else
  160. {
  161. unAuxInShared = (uint16_t)(micros() - ulAuxStart);
  162. bUpdateFlagsShared |= AUX_FLAG;
  163. }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement