Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. #include <BLEDevice.h>
  2.  
  3. #define ADDRESS "3c:71:bf:6b:88:9e" //Endereço do iTag, conseguido pelo próprio scan
  4. #define SCAN_INTERVAL 1000 //intervalo entre cada scan
  5. #define TARGET_RSSI -100 //RSSI limite para ligar o relê.
  6. #define MAX_MISSING_TIME 15000 //Tempo para iniciar o sistema quando o iBEACON não for encontrado
  7.  
  8. // DEFININDO OS PINOS DO LED RGB
  9. int ledRed = 16;
  10. int ledGreen = 17;
  11.  
  12. BLEScan* pBLEScan; //Variável que irá guardar o scan
  13. uint32_t lastScanTime = 0; //Quando ocorreu o último scan
  14. boolean found = false; //Se encontrou o iTag no último scan
  15. uint32_t lastFoundTime = 0; //Tempo em que encontrou o iTag pela última vez
  16. int rssi = 0;
  17.  
  18. //Callback das chamadas ao scan
  19. class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks
  20. {
  21. void onResult(BLEAdvertisedDevice advertisedDevice)
  22. {
  23. //Sempre que um dispositivo for encontrado ele é mostrado aqui
  24. Serial.print("Device found: ");
  25. Serial.println(advertisedDevice.toString().c_str());
  26.  
  27. //Se for o dispositivo que esperamos
  28. if(advertisedDevice.getAddress().toString() == ADDRESS)
  29. {
  30. //Marcamos como encontrado, paramos o scan e guardamos o rssi
  31. found = true;
  32. advertisedDevice.getScan()->stop();
  33. rssi = advertisedDevice.getRSSI();
  34. Serial.println("RSSI: " + rssi);
  35. Serial.println("ACHOU !!!");
  36. }
  37. }
  38. };
  39.  
  40. void setup()
  41. {
  42. Serial.begin(115200);
  43. //Configura o pino do led como saída e coloca como low
  44. pinMode(ledRed, OUTPUT);
  45. digitalWrite(ledRed, LOW);
  46. pinMode(ledGreen, OUTPUT);
  47. digitalWrite(ledGreen, LOW);
  48.  
  49. //Guardamos a referência e configuramos o objeto scan
  50. BLEDevice::init("");
  51. pBLEScan = BLEDevice::getScan();
  52. pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
  53. pBLEScan->setActiveScan(true);
  54. }
  55.  
  56. void loop()
  57. {
  58. uint32_t now = millis(); //Tempo em milissegundos desde o boot
  59.  
  60. if(found){ //Se econtrou o iTag no último scan
  61. lastFoundTime = millis(); //Tempo em milissegundos de quando encontrou
  62. found = false;
  63. digitalWrite(ledRed, LOW);
  64. digitalWrite(ledGreen, HIGH);
  65. if(rssi > TARGET_RSSI){ // SE ESTÁ DENTRO DO RANGE ACENDEMOS O LED VERDE E REALIZAMOS UMA MEDIÇÃO MÉDIA DE CO2
  66. /* INSERIMOS AQUI O CÓDIGO PARA INICIAR A MEDIÇÃO DO CO2 E FAZER UMA MÉDIA
  67. PARA USAR COMO PARÂMETRO APÓS O MONITORAMENTO TER SIDO INICIADO */
  68. }
  69. else{ // SE NÃO ESTIVER NO RANGE DESLIGAMOS O LED VERDE E ACENDEMOS O VERMELHO E DAMOS INÍCIO AO SISTEMA DE ALARME
  70. digitalWrite(ledGreen, LOW);
  71. digitalWrite(ledRed, HIGH);
  72. /* INSERIMOS AQUI O CÓDIGO PARA INICIAR O SISTEMA DE MONITORAMENTO DO DEVICE */
  73. }
  74. }
  75. //Se não encontrou e o tempo desde a última vez que econtrou for maior que o tempo máximo de desaparecido
  76. else if(now - lastFoundTime > MAX_MISSING_TIME) {
  77. digitalWrite(ledGreen, LOW); // APAGAMOS O LED VERDE
  78. digitalWrite(ledRed, HIGH); // ACENDEMOS O LED VERMELHO
  79. }
  80.  
  81. if(now - lastScanTime > SCAN_INTERVAL){ //Se está no tempo de fazer scan
  82. //Marca quando ocorreu o último scan e começa o scan
  83. lastScanTime = now;
  84. pBLEScan->start(1);
  85. }
  86. }
  87.  
  88.  
  89. // teste commit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement