potřebovala bych poradit. Mám Arduino nano 33 ble a potřebuji na dálku měřit zrychlení. Využívám spojení Bluetooth a mobilní aplikace nRF Connect.
Jenže
1) rozsah akcelerometru je v knihovně LSM9DS1 nastaven na 4g a nevím, jak a kde ho změnit na 16g.
2) Zjistila jsem, že deska se mi v aplikaci zobrazí jako připojená až když zapnu na PC sériový monitor. Já ale budu měřit na dálku, deska bude napájena z jiné baterie (piny VIN a GND) a nevím, jak zařídit, aby se deska dokázala připojit k telefonu bez pomoci PC.
Zde přikládám kód.
Děkuji za pomoc.
Kód: Vybrat vše
#include <Arduino_LSM9DS1.h>
#include <ArduinoBLE.h>
BLEService sensorService("16150f38-e7a9-4fe1-ae08-48464baf25b2");
BLEStringCharacteristic xSensorLevel ("ff99948c-18ff-4ed8-942e-512b9b24b6da",
BLERead | BLENotify,15);
BLEStringCharacteristic ySensorLevel ("8084aa6b-6cae-461f-9540-e1a5768de49d",
BLERead | BLENotify,15);
BLEStringCharacteristic zSensorLevel ("ab80cb77-fe74-40d8-9757-96f8a54c16d9",
BLERead | BLENotify,15);
float oldXLevel = 0;
float oldYLevel = 0;
float oldZLevel = 0;
long previousMillis = 0;
void setup() {
IMU.begin();
Serial.begin(115200);
while (!Serial);
if (!IMU.begin()) {
Serial.println("Failed to initialize IMU!");
while (1);}
int setAccelFS(uint8_t = 8);
pinMode(LED_BUILTIN, OUTPUT);
if (!BLE.begin()){
Serial.println("Starting BLE failed");
while(1);}
BLE.setLocalName("Akcelerometr");
BLE.setAdvertisedService(sensorService);
sensorService.addCharacteristic(xSensorLevel);
sensorService.addCharacteristic(ySensorLevel);
sensorService.addCharacteristic(zSensorLevel);
BLE.addService(sensorService);
xSensorLevel.writeValue(String(0));
ySensorLevel.writeValue(String(0));
zSensorLevel.writeValue(String(0));
BLE.advertise();
Serial.println("Bluetooth device active, waiting for connection...");
}
void loop() {
BLEDevice central = BLE.central();
if (central){
Serial.print ("connected to central");
Serial.println(central.address());
digitalWrite(LED_BUILTIN, HIGH);
while(central.connected()) {
updateAccelerationLevel();
delay(300);}
digitalWrite(LED_BUILTIN, LOW);
Serial.print("Disconnected from central: ");
Serial.println(central.address());
}
}
void updateAccelerationLevel() {
float x, y, z;
if(IMU.accelerationAvailable ()) {
IMU.readAcceleration(x, y, z);
if (x != oldXLevel) {
xSensorLevel.writeValue(String(x));
oldXLevel = x;}
if (x !=oldYLevel) {
ySensorLevel.writeValue(String(y));
oldYLevel = y;}
if (z !=oldZLevel) {
zSensorLevel.writeValue(String(z));
oldZLevel = z;}
Serial.print(x);
Serial.print(y);
Serial.println(z);
}
}