Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <BLEDevice.h>
- #define ADDRESS "3c:71:bf:6b:88:9e" //Endereço do iTag, conseguido pelo próprio scan
- #define SCAN_INTERVAL 1000 //intervalo entre cada scan
- #define TARGET_RSSI -100 //RSSI limite para ligar o relê.
- #define MAX_MISSING_TIME 15000 //Tempo para iniciar o sistema quando o iBEACON não for encontrado
- // DEFININDO OS PINOS DO LED RGB
- int ledRed = 16;
- int ledGreen = 17;
- BLEScan* pBLEScan; //Variável que irá guardar o scan
- uint32_t lastScanTime = 0; //Quando ocorreu o último scan
- boolean found = false; //Se encontrou o iTag no último scan
- uint32_t lastFoundTime = 0; //Tempo em que encontrou o iTag pela última vez
- int rssi = 0;
- //Callback das chamadas ao scan
- class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks
- {
- void onResult(BLEAdvertisedDevice advertisedDevice)
- {
- //Sempre que um dispositivo for encontrado ele é mostrado aqui
- Serial.print("Device found: ");
- Serial.println(advertisedDevice.toString().c_str());
- //Se for o dispositivo que esperamos
- if(advertisedDevice.getAddress().toString() == ADDRESS)
- {
- //Marcamos como encontrado, paramos o scan e guardamos o rssi
- found = true;
- advertisedDevice.getScan()->stop();
- rssi = advertisedDevice.getRSSI();
- Serial.println("RSSI: " + rssi);
- Serial.println("ACHOU !!!");
- }
- }
- };
- void setup()
- {
- Serial.begin(115200);
- //Configura o pino do led como saída e coloca como low
- pinMode(ledRed, OUTPUT);
- digitalWrite(ledRed, LOW);
- pinMode(ledGreen, OUTPUT);
- digitalWrite(ledGreen, LOW);
- //Guardamos a referência e configuramos o objeto scan
- BLEDevice::init("");
- pBLEScan = BLEDevice::getScan();
- pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
- pBLEScan->setActiveScan(true);
- }
- void loop()
- {
- uint32_t now = millis(); //Tempo em milissegundos desde o boot
- if(found){ //Se econtrou o iTag no último scan
- lastFoundTime = millis(); //Tempo em milissegundos de quando encontrou
- found = false;
- digitalWrite(ledRed, LOW);
- digitalWrite(ledGreen, HIGH);
- if(rssi > TARGET_RSSI){ // SE ESTÁ DENTRO DO RANGE ACENDEMOS O LED VERDE E REALIZAMOS UMA MEDIÇÃO MÉDIA DE CO2
- /* INSERIMOS AQUI O CÓDIGO PARA INICIAR A MEDIÇÃO DO CO2 E FAZER UMA MÉDIA
- PARA USAR COMO PARÂMETRO APÓS O MONITORAMENTO TER SIDO INICIADO */
- }
- else{ // SE NÃO ESTIVER NO RANGE DESLIGAMOS O LED VERDE E ACENDEMOS O VERMELHO E DAMOS INÍCIO AO SISTEMA DE ALARME
- digitalWrite(ledGreen, LOW);
- digitalWrite(ledRed, HIGH);
- /* INSERIMOS AQUI O CÓDIGO PARA INICIAR O SISTEMA DE MONITORAMENTO DO DEVICE */
- }
- }
- //Se não encontrou e o tempo desde a última vez que econtrou for maior que o tempo máximo de desaparecido
- else if(now - lastFoundTime > MAX_MISSING_TIME) {
- digitalWrite(ledGreen, LOW); // APAGAMOS O LED VERDE
- digitalWrite(ledRed, HIGH); // ACENDEMOS O LED VERMELHO
- }
- if(now - lastScanTime > SCAN_INTERVAL){ //Se está no tempo de fazer scan
- //Marca quando ocorreu o último scan e começa o scan
- lastScanTime = now;
- pBLEScan->start(1);
- }
- }
- // teste commit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement