324Hz
March 19, 2022, 3:17pm
1
Hello there,
Background:
I am making a project which uses an Arduino Nano with a HM-10 LE Bluetooth module and I am using a Samsung S21
Problem:
When I try to send the number "4" as a byte over to the Arduino Nano, when I press for example the left button, my app crashes and shows up with a crash information box that just says MIT App Inventor has stopped working. I have tried using other methods of transmitting a byte over in the BluetoothLE library but every single one of them shows up with that error
The code for the app is below
1 Like
Hello 324Hz
Just seeing your button click Block is not enough, we need to see what the rest of your code does - for example, before attempting to send, you have no verification of a connection. Note that the Byte values need to be a List, even if the List contains only one value. You could write integers instead (with the Write Integers Block).
We would also need to see your Sketch, since the App and The Arduino work together.
324Hz
March 20, 2022, 9:30pm
3
Hello ChrisWard
I will try out the Write Interger block but here is the code that I have for both the Arduino and application side
Here is the whole code for the application side
and here is the Arduino code
#include <SoftwareSerial.h>
#include <AccelStepper.h>
SoftwareSerial Bluetooth(A7, 13);
AccelStepper LeftBackWheel(1, 12, 11);
AccelStepper LeftFrontWheel(1, 9, 8);
AccelStepper RightBackWheel(1, 7, 6);
AccelStepper RightFrontWheel(1, 4, 3);
#define led 14
int wheelSpeed = 1500;
int dataIn, m;
int lbw[50], lfw[50], rbw[50], rfw[50];
int index = 0;
void setup() {
LeftFrontWheel.setMaxSpeed(3000);
LeftBackWheel.setMaxSpeed(3000);
RightFrontWheel.setMaxSpeed(3000);
RightBackWheel.setMaxSpeed(3000);
Serial.begin(38400);
Bluetooth.begin(9600);
pinMode(led, OUTPUT);
}
void loop() {
if (Bluetooth.available() > 0) {
dataIn = Bluetooth.read();
if (dataIn == 0) {
m = 0;
Serial.println("m0");
}
if (dataIn == 2) {
m = 2;
Serial.println("m2");
}
if (dataIn == 7) {
m = 7;
Serial.println("m7");
}
if (dataIn == 9) {
m = 9;
Serial.println("m9");
}
if (dataIn == 10) {
m = 10;
Serial.println("m10");
}
if (dataIn == 5) {
m = 5;
Serial.println("m5");
}
if (dataIn == 4) {
m = 4;
Serial.println("m4");
}
if (dataIn >= 16) {
wheelSpeed = dataIn * 10;
Serial.println(wheelSpeed);
}
}
if (m == 2) {
moveForward();
}
if (m == 7) {
moveBackward();
}
if (m == 9) {
rotateLeft();
}
if (m == 10) {
rotateRight();
}
if (m == 0) {
stopMoving();
}
if (m == 5) {
moveSidewaysRight();
}
if (m == 4) {
moveSidewaysLeft();
}
if (m == 12) {
if (index == 0) {
LeftBackWheel.setCurrentPosition(0);
LeftFrontWheel.setCurrentPosition(0);
RightBackWheel.setCurrentPosition(0);
RightFrontWheel.setCurrentPosition(0);
}
lbw[index] = LeftBackWheel.currentPosition();
lfw[index] = LeftFrontWheel.currentPosition();
rbw[index] = RightBackWheel.currentPosition();
rfw[index] = RightFrontWheel.currentPosition();
index++;
m = 0;
}
if (m == 14) {
runSteps();
if (dataIn != 14) {
stopMoving();
memset(lbw, 0, sizeof(lbw));
memset(lfw, 0, sizeof(lfw));
memset(rbw, 0, sizeof(rbw));
memset(rfw, 0, sizeof(rfw));
index = 0; // Index to 0
}
}
LeftFrontWheel.runSpeed();
LeftBackWheel.runSpeed();
RightFrontWheel.runSpeed();
RightBackWheel.runSpeed();
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.0 / 1023.00) * 3;
Serial.println(voltage);
delay(500);
}
void runSteps() {
for (int i = index - 1; i >= 0; i--) {
LeftFrontWheel.moveTo(lfw[i]);
LeftFrontWheel.setSpeed(wheelSpeed);
LeftBackWheel.moveTo(lbw[i]);
LeftBackWheel.setSpeed(wheelSpeed);
RightFrontWheel.moveTo(rfw[i]);
RightFrontWheel.setSpeed(wheelSpeed);
RightBackWheel.moveTo(rbw[i]);
RightBackWheel.setSpeed(wheelSpeed);
while (LeftBackWheel.currentPosition() != lbw[i] & LeftFrontWheel.currentPosition() != lfw[i] & RightFrontWheel.currentPosition() != rfw[i] & RightBackWheel.currentPosition() != rbw[i]) {
LeftFrontWheel.runSpeedToPosition();
LeftBackWheel.runSpeedToPosition();
RightFrontWheel.runSpeedToPosition();
RightBackWheel.runSpeedToPosition();
if (Bluetooth.available() > 0) {
dataIn = Bluetooth.read();
if ( dataIn == 15) {
while (dataIn != 14) {
if (Bluetooth.available() > 0) {
dataIn = Bluetooth.read();
if ( dataIn == 13) {
stopMoving();
break;
}
}
}
}
if (dataIn >= 16) {
wheelSpeed = dataIn * 10;
dataIn = 14;
}
if ( dataIn == 13) {
break;
}
}
}
}
for (int i = 1; i <= index - 1; i++) {
LeftFrontWheel.moveTo(lfw[i]);
LeftFrontWheel.setSpeed(wheelSpeed);
LeftBackWheel.moveTo(lbw[i]);
LeftBackWheel.setSpeed(wheelSpeed);
RightFrontWheel.moveTo(rfw[i]);
RightFrontWheel.setSpeed(wheelSpeed);
RightBackWheel.moveTo(rbw[i]);
RightBackWheel.setSpeed(wheelSpeed);
while (LeftBackWheel.currentPosition() != lbw[i]& LeftFrontWheel.currentPosition() != lfw[i] & RightFrontWheel.currentPosition() != rfw[i] & RightBackWheel.currentPosition() != rbw[i]) {
LeftFrontWheel.runSpeedToPosition();
LeftBackWheel.runSpeedToPosition();
RightFrontWheel.runSpeedToPosition();
RightBackWheel.runSpeedToPosition();
if (Bluetooth.available() > 0) {
dataIn = Bluetooth.read();
if ( dataIn == 15) {
while (dataIn != 14) {
if (Bluetooth.available() > 0) {
dataIn = Bluetooth.read();
if ( dataIn == 13) {
stopMoving();
break;
}
}
}
}
if (dataIn >= 16) {
wheelSpeed = dataIn * 10;
dataIn = 14;
}
if ( dataIn == 13) {
//Serial.println("DEKI");
break;
}
}
}
}
}
void moveForward() {
LeftFrontWheel.setSpeed(-wheelSpeed);
LeftBackWheel.setSpeed(-wheelSpeed);
RightFrontWheel.setSpeed(wheelSpeed);
RightBackWheel.setSpeed(wheelSpeed);
}
void moveBackward() {
LeftFrontWheel.setSpeed(wheelSpeed);
LeftBackWheel.setSpeed(wheelSpeed);
RightFrontWheel.setSpeed(-wheelSpeed);
RightBackWheel.setSpeed(-wheelSpeed);
}
void moveSidewaysRight() {
LeftFrontWheel.setSpeed(-wheelSpeed);
LeftBackWheel.setSpeed(wheelSpeed);
RightFrontWheel.setSpeed(-wheelSpeed);
RightBackWheel.setSpeed(wheelSpeed);
}
void moveSidewaysLeft() {
LeftFrontWheel.setSpeed(wheelSpeed);
LeftBackWheel.setSpeed(-wheelSpeed);
RightFrontWheel.setSpeed(wheelSpeed);
RightBackWheel.setSpeed(-wheelSpeed);
}
void rotateLeft() {
LeftFrontWheel.setSpeed(wheelSpeed);
LeftBackWheel.setSpeed(wheelSpeed);
RightFrontWheel.setSpeed(wheelSpeed);
RightBackWheel.setSpeed(wheelSpeed);
}
void rotateRight() {
LeftFrontWheel.setSpeed(-wheelSpeed);
LeftBackWheel.setSpeed(-wheelSpeed);
RightFrontWheel.setSpeed(-wheelSpeed);
RightBackWheel.setSpeed(-wheelSpeed);
}
void stopMoving() {
LeftFrontWheel.setSpeed(0);
LeftBackWheel.setSpeed(0);
RightFrontWheel.setSpeed(0);
RightBackWheel.setSpeed(0);
}
324Hz
March 20, 2022, 10:57pm
4
I have figured out the solution. Looks like I had to change the UUID's around and add a new one but everything works now!
system
Closed
March 27, 2022, 10:57pm
5
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.