Hello, I am trying to connect my 2 Arduino Nanos BLE to each other. The current setup is Arduino(1) has a distance sensor, Arduino(2) has a button and LCD screen. I would like to be able to read the distance sensor on Arduino(1) and send the data to Arduino(2) and view the data on the LCD screen. After use a button on Arduino(2) to control a switch on Arduino(1)
Arduino(2) code
#include <ArduinoBLE.h>
BLEService customService("19B10000-E8F2-537E-4F6C-D104768A1214");
BLEUnsignedIntCharacteristic distanceSensor("19b10001-e8f2-537e-4f6c-d104768a1214", BLERead | BLEWrite);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
while(!Serial);
BLE.begin();
BLE.setLocalName("COM port7");
BLE.setAdvertisedService(customService);
customService.addCharacteristic(distanceSensor);
BLE.addService(customService);
BLE.advertise();
Serial.println("Being advertised");
Serial.println("Bluetooth® Low Energy Central - Conteol");
BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}
void loop() {
// put your main code here, to run repeatedly:
BLEDevice peripheral = BLE.available();
if (peripheral) {
Serial.print("Found ");
Serial.print(peripheral.address());
Serial.print(" '");
Serial.print(peripheral.localName());
Serial.print("' ");
Serial.print(peripheral.advertisedServiceUuid());
Serial.println();
if (peripheral.localName() != "COM port5"){
return;
}
BLE.stopScan();
controlBoard(peripheral);
BLE.scanForUuid("19b10000-e8f2-537e-4f6c-d104768a1214");
}
}
void controlBoard(BLEDevice peripheral){
Serial.println("Connecting ...");
if (peripheral.connect()){
Serial.println("Connected");
} else {
Serial.println("Failed to connect!");
return;
}
// discover peripheral attributes
Serial.println("Discovering attributes ...");
if (peripheral.discoverAttributes()) {
Serial.println("Attributes discovered");
} else {
Serial.println("Attribute discovery failed!");
peripheral.disconnect();
return;
}
BLECharacteristic distanceSensor = peripheral.characteristic("19b10001-e8f2-537e-4f6c-d104768a1214");
if (!distanceSensor) {
Serial.println("Peripheral does not have distanceSensor characteristic!");
peripheral.disconnect();
return;
} else if (!distanceSensor.canWrite()) {
Serial.println("Peripheral does not have a writable distanceSensor characteristic!");
peripheral.disconnect();
return;
}
while(peripheral.connected()){
if (distanceSensor.written()) {
unsigned int value = distanceSensor.readValue();
Serial.print("Received value: ");
Serial.println(value);
}
}
Serial.println("Peripheral disconnected");
}
Ardunio(1) code
#include <ArduinoBLE.h>
long previousMillis = 0; // last time readings were checked, in ms
unsigned int previousDistance = 0;
const float UPDATE_FREQUENCY = 2000;
int trigPin= 12;
int echoPin= 11;
float distanceToTarget;
float pingTravelTime;
float pingTravelDistance;
BLEService customService("19B10000-E8F2-537E-4F6C-D104768A1214");
BLEUnsignedIntCharacteristic BLE_distance("19b10001-e8f2-537e-4f6c-d104768a1214", BLERead | BLEWrite);
void setup() {
Serial.begin(9600);
pinMode(trigPin,OUTPUT);
pinMode(echoPin,INPUT);
while(!Serial);
if(!BLE.begin()){
Serial.println("starting Bluetooth® Low Energy module failed!");
while(1);
}
BLE.setLocalName("COM port5");
BLE.setAdvertisedService(customService);
//add what you need to send
customService.addCharacteristic(BLE_distance);
BLE.addService(customService);
BLE_distance.setValue(0);
BLE.advertise();
Serial.println("Being advertised");
}
void loop() {
// put your main code here, to run repeatedly:
BLEDevice central = BLE.central();
if (central){
Serial.print("Connected to central: ");
Serial.println(central.address());
while (central.connected()){
long currentMillis = millis();
if (currentMillis - previousMillis >= UPDATE_FREQUENCY) {
previousMillis = currentMillis;
updateReadings();
}
}
Serial.print(F("Disconnected from central: "));
Serial.println(central.address());
}
}
unsigned int getDistance() {
readValues();
return (unsigned int) (distanceToTarget);
}
void updateReadings() {
unsigned int distance = getDistance();
if (distance != previousDistance){}
Serial.print("Distance: ");
Serial.println(distance);
BLE_distance.writeValue(distance);
previousDistance = distance;
}
void readValues(){
digitalWrite(trigPin,LOW);
delayMicroseconds(10);
digitalWrite(trigPin,HIGH);
delayMicroseconds(10);
digitalWrite(trigPin,LOW);
pingTravelTime=pulseIn(echoPin,HIGH);
pingTravelDistance=(pingTravelTime*765.*5280.*12.)/(3600.*1000000.);
distanceToTarget=(pingTravelDistance/2)*100;
}