Supprimer la page de wiki "Emcontroller Code" ne peut être annulé. Continuer ?
#include <BLEDevice.h> #include <BLEServer.h> #include <BLEUtils.h> #include <BLE2902.h>
const int pwmPin = 16; const int dirPin = 17; const int doorSensorPin = 13; float i; String Command; int repCount; bool deviceConnected = false; bool doorWasClosed = false; int doorState; String temp; String repCountStr;
const String serviceUuid = “12345678-1234-1234-1234-123456789abc”; const String weightcharacteristicUuid = “abcd1234-1234-1234-1234-123456789abc”; //(weight) const String repscharacteristicUuid = “abcd5678-1234-1234-1234-123456789abc”; //(repeation) const String resetCharacteristicUuid = “abcd9101-1234-1234-1234-123456789abc”; //(reset)
BLEServer* pServer = NULL; BLECharacteristic* pRepCountCharacteristic = NULL; BLECharacteristic* pWeightCharacteristic = NULL; BLECharacteristic* pStringCharacteristic = NULL;
class MyServerCallbacks : public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; Serial.println(“Device connected”); }
void onDisconnect(BLEServer* pServer) { deviceConnected = false; repCount = 0; Command = “reset”; Serial.println(“Device disconnected”); BLEDevice::startAdvertising(); // Restart advertising } };
class MyCallbacks : public BLECharacteristicCallbacks { void onWrite(BLECharacteristic* pCharacteristic) { std::string value = pCharacteristic->getValue().c_str(); temp = String(value.c_str());
// Check which characteristic received data
if (pCharacteristic->getUUID().equals(BLEUUID(weightcharacteristicUuid))) {
Serial.println("Received Weight Command: " + temp);
Command = temp;
// Set PWM value based on the received command using switch-case
switch (Command.toInt()) {
case 0: i = 0; break;
case 5: i = 1; break;
case 10: i = 6; break;
case 15: i = 10; break;
case 20: i = 15; break;
case 25: i = 16.12; break;
case 30: i = 19; break;
case 35: i =23 ; break;
case 40: i = 28; break;
// Equivalent to OFF
default: i = 0; break;
}
Serial.print("Received Command: ");
Serial.println(Command);
// Echo the command back to the app
pWeightCharacteristic->setValue((unsigned char*)value.c_str(), value.length());
pWeightCharacteristic->notify();
pRepCountCharacteristic->setValue(repCountStr.c_str());
pRepCountCharacteristic->notify();
} else if (pCharacteristic->getUUID().equals(BLEUUID(resetCharacteristicUuid))) {
// Handle the string data received from the app
Serial.println("Received String from APK: " + temp);
// Process the received string as needed
if (temp == "reset") {
repCount = 0;
i = 0;
Command = "0";
}
}
} };
//pWeightCharacteristic->setValue((unsigned char*)value.c_str(), value.length()); void setup() {
Serial.begin(115200);
pinMode(pwmPin, OUTPUT); pinMode(dirPin, OUTPUT); pinMode(doorSensorPin, INPUT);
digitalWrite(dirPin, HIGH);
BLEDevice::init(“FlexiFitPro”); pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); BLEService* Service = pServer->createService(BLEUUID(serviceUuid));
// Repetition Count Service pRepCountCharacteristic = Service->createCharacteristic( BLEUUID(repscharacteristicUuid), BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_NOTIFY); pRepCountCharacteristic->addDescriptor(new BLE2902());
pWeightCharacteristic = Service->createCharacteristic( BLEUUID(weightcharacteristicUuid), BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_READ); pWeightCharacteristic->setCallbacks(new MyCallbacks()); Service->start();
pStringCharacteristic = Service->createCharacteristic( BLEUUID(resetCharacteristicUuid), BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_READ); pStringCharacteristic->setCallbacks(new MyCallbacks()); Service->start();
BLEAdvertising* pAdvertising = BLEDevice::getAdvertising(); pAdvertising->addServiceUUID(BLEUUID(serviceUuid)); pAdvertising->start();
Serial.println(“BLE services are defined and advertising."); }
void loop() { doorState = digitalRead(doorSensorPin);
int doorState = digitalRead(doorSensorPin);
// Check if the door is closed if (doorState == LOW) { if (!doorWasClosed) { // Transition from open to closed circuit repCount++; doorWasClosed = true; // Update the flag delay(1000); // Add a 1-second delay to debounce or prevent multiple counts } } else { // Door is open doorWasClosed = false; // Reset the flag }
// Send rep count over BLE
if (deviceConnected) { repCountStr = String(repCount); pRepCountCharacteristic->setValue(repCountStr.c_str()); pWeightCharacteristic->setValue(Command.c_str()); pRepCountCharacteristic->notify(); pWeightCharacteristic->notify(); //Serial.println(” hi apk “); }
Serial.print(“command received :"); Serial.println(temp); Serial.print(“PWM value: “); Serial.println(i); Serial.print(“Rep Count: “); Serial.println(repCount);
analogWrite(pwmPin, i); delay(10); }
Supprimer la page de wiki "Emcontroller Code" ne peut être annulé. Continuer ?