Stack OverFlow error

Not necessarily, but the BLE extension manages some internal state about what devices it knows about. You may want to try out this how-to about setting up an app to connect to a BLE device:

Why? My Samsung has Bluetooth internally. It is how I communicate and pair with my Bluetooth devices. Have you tried it to pair with your Arduino? Your S21 probably has the same feature as my A13. It can also be accessed using system settings.

When I attempt to pair to the S21 it tells me that it is unable to pair and to check settings for the device and try again. i am assuming that has something to do with the code i wrote to program. It does connect on the other app though. So I am really not sure what is going on

Thank you for this. I am going to review this and make some changes and see what I can do!

Will this work with the Nano 33 BLE. It says its specific to the iot

(added to FAQ)

@O245 check these links out. Let me know if these help with our bluetooth situation

@ewpatton do you know if the setup of our blocks are correct? Do they have to be in a specific order?

The BLE extension's logic is that you:

  1. Scan for nearby devices--internally this populates the BLE's device list
  2. Connect to a device at a given index--usually you'd do this by populating a list view with the BLE's device list and then let the user choose.
  3. Send/receive data with the connected device

As I previously mentioned, I don't see how you're informing the user of the list of nearby devices and that's likely getting you into trouble since the device list may not be populated yet depending on the scan frequency, etc. of the device

Ok thank you. I will make some changes and see what I can do

As I mentioned already, it might be good to go through the tutorial I linked just to get a basic connection going. Once you know that works, then you can take what you've learned and translate it into your existing app.

Yes I will do that. Thank you

I am trying to establish just a bluetooth connection to my phone and I keep getting an error code ErrorError 9101 and I removed all the other blocks just get the connection. Is there something with the way I am trying to establish a connection based on these blocks?

@ewpatton So the exact error message is Error 3300: Error 9101 extension BluetoothLE: Expected device index between 1 and 0. Any idea based on the blocks send what it could be?

Build the APK, upload it to Google Drive and post the link (or post the aia).

@O245 want to read these and see if they help?

@Anke i was able to locate my device with the dummy application you provided. Now can I add those blocks to my previous app and it will work the same?

@Anke could you review my code and tell why I cant connect my Galaxy S21 to the ARduino without using a third party app to connect it?

#include <Arduino_LSM9DS1.h> //This is the library for the gyroscope

#include <ArduinoBLE.h> //The bluetooth library

#include <Arduino_APDS9960.h>

float X,Y,Z;//Float variable to be used in the gyroscope

#define LED 13//defines LED as pin 13

///Establishes GUUID along wiith the three characteristics

const  char * UUID_RepTrackservice =  "84582cd0-3df0-4e73-9496-29010d7445dd" ;

const  char * UUID_repCharacteristic =  "84582cd1-3df0-4e73-9496-29010d7445dd" ;

const  char * UUID_targetCharacteristic =  "84582cd2-3df0-4e73-9496-29010d7445dd" ;

const  char * UUID_resetCharacteristic =  "84582cd3-3df0-4e73-9496-29010d7445dd" ;

//Establishes the service along with defining the characteristics as a float

BLEService RepTrackservice ( UUID_RepTrackservice );

BLEIntCharacteristic repCharacteristic( UUID_repCharacteristic, BLERead | BLENotify );

BLEIntCharacteristic targetCharacteristic ( UUID_targetCharacteristic, BLEWrite | BLENotify );

BLEIntCharacteristic resetCharacteristic( UUID_resetCharacteristic, BLERead | BLENotify );

int presetValue = 5;// max value for z axis to detect rep count

int currentValue = 0;//Current z axis value

int repAmount=0;//variable used to hold rep amount sent to app commented out for troubleshooting

int repTarget=0;//variable used to hold repetitions wanted sent from app commented out for troubleshooting

int reset=0;//Variable to reset the count sent from app commented out for troubleshooting

//Setting up the arduinos outputs

void setup ()

{

  Serial.begin(115200);//begin the bluetooth

  uint32_t t=millis();

  while (!Serial) // delay 5sec connection

  {

    if ((millis()-t) > 5000) break;

  }

  bool err=false;

  if (!IMU.begin())

    {

    Serial.println("IMU: failed");

    err=true;

    }

  Serial.println("IMU: ok");

  // init BLE

  if (!BLE.begin())

    {

    Serial.println("BLE: failed");

    err=true;

    }

  Serial.println("BLE: ok");

  // error: flash led forever

  if (err)

    {

    Serial.println("Init error. System halted");

    }

  BLE.setLocalName("RepTrack2.0");//sets the local name

  BLE.setDeviceName("RepTrack");

  BLE.setAdvertisedService (RepTrackservice);//setting the service to be advertised

  //Adds services to their own charcteristics

  RepTrackservice.addCharacteristic ( repCharacteristic ) ;

  RepTrackservice.addCharacteristic ( targetCharacteristic ) ;

  RepTrackservice.addCharacteristic ( resetCharacteristic ) ;

  BLE.addService ( RepTrackservice);//service is added to he BLE

  //Sets values so that they do not transmit random values

  repCharacteristic.writeValue ( 0 );

  targetCharacteristic.writeValue ( 0 );

  resetCharacteristic.writeValue ( 0 );

  BLE.advertise();//Publishes the service to start

 

  pinMode (LED, OUTPUT);//sets LED as an output

  digitalWrite(LED, LOW);//turns off LED in case it was on

 

}

void loop()

{

  static long preMillis = 0;

  int command=0;

  // looks for BLE central devices

  BLEDevice central = BLE.central();

  // Checks for connection

  if (central)

    {

    Serial.print("Connected to central: ");

    Serial.println(central.address()); // prints address

   

    // Loop while connected

    while (central.connected())

      {

   

      if (targetCharacteristic.written())

        {

        command = targetCharacteristic.value(); // retrieve value from app

        repTarget=command;

        Serial.print(F("commmand value:  "));

        Serial.println(command);

        }

     

      long curMillis = millis();

      if (preMillis>curMillis) preMillis=0;

      if (curMillis - preMillis >= 10) // check values every 10mS

        {

        preMillis = curMillis;

        updateApp(); // Calls function to send values to app

        }

      }

    // To disconnect

    Serial.print(F("Disconnected from central: "));

    Serial.println(central.address());

    }

}

//Updating the app function

void updateApp()

{

  //Starting the scan to monitor the gyroscope

  //Checking to see if the Gyro is online and then Reads all 3 axis

   if (IMU.gyroscopeAvailable())

    {

    IMU.readGyroscope(X, Y, Z);

  currentValue =Z;//sets current value to the value of Z from the gryo

   }

   //Comparison that is the current value of z is greater than or equal to the preset, then you increase the rep amount. This means a rep was done

  if (currentValue >= presetValue)

  {

    repAmount=repAmount+1;

    repCharacteristic.writeValue(repAmount);//updates the live value

  }

  //If it was not greater then the repamount stays the same

  else

  {

    //repAmount=repAmount;

    repAmount=repAmount;

  }

  //displays values for visual purpose

  Serial.print("Z:");

  Serial.print(Z);

  Serial.print("Current Value:");

 // Serial.println(currentValue);

 // Serial.println(repAmount);//Sends repamout to app

  Serial.println();

  delay(100);

  //Checks to see if the repAmount is greater than or equal to the rep target, if yes then the LED will light up

   if (repAmount >= repTarget)

  {

    digitalWrite(LED, HIGH);

  }

  //If not then LED stays off

  else

  {

    digitalWrite(LED, LOW);

  }

  delay(1000);// Delay to keep the system from readding two reps within a second

  //Reset for the rep amount, recieved from the app

  if (reset==1)

  {

    digitalWrite(LED,LOW);

    repAmount=0;

    targetCharacteristic.writeValue(repAmount);

   

  }

 

}