I have trouble when I open the MIT App Inventor application and try to connect to Bluetooth. When I press the forward button, both stepper 1 and stepper 2 move, but their speed is very slow. When I use code with only Bluetooth connection (without RFID RC522 sensor code), the two steppers can move at the maximum speed of 1000.0.
My question is: Why does this happen?
Thank you.
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include "font.h"
#include "icons.h"
#include <Arduino.h>
#include <Wire.h>
#define TFT_DC 2
#define TFT_RST 4
#define TFT_CS 15
#define color 0x25a6
#define color2 0x0000
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
#include <SPI.h>
#include <MFRC522.h>
#include <AccelStepper.h>
#define FULLSTEP 4
#define HALFSTEP 8
#define SS_PIN 5
#define RST_PIN 22
#define motorPin1 32 // IN1 on the ULN2003 driver 1
#define motorPin2 33 // IN2 on the ULN2003 driver 1
#define motorPin3 25 // IN3 on the ULN2003 driver 1
#define motorPin4 26 // IN4 on the ULN2003 driver 1
#define motorPin5 13 // IN1 on the ULN2003 driver 2
#define motorPin6 14 // IN2 on the ULN2003 driver 2
#define motorPin7 15 // IN3 on the ULN2003 driver 2
#define motorPin8 21 // IN4 on the ULN2003 driver 2
const float STEPS_PER_REV = 32;
const float GEAR_RED = 64;
const float STEPS_PER_OUT_REV = STEPS_PER_REV * GEAR_RED;
MFRC522 mfrc522(SS_PIN, RST_PIN);
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper stepper2(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);
AccelStepper LeftWheel(FULLSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper RightWheel(FULLSTEP, motorPin5, motorPin7, motorPin6, motorPin8);
int wheelSpeed = 1000;
int dataIn;
bool movingForward = false;
bool movingBackward = false;
int StepsRequired;
int stepperSpeed = 1000;
void setup() {
SerialBT.begin("ESP32-D1 MINI");
Serial.begin(9600);
tft.init(240, 240, SPI_MODE2);
tft.setRotation(2);
tft.fillScreen(ST77XX_BLACK);
tft.drawBitmap(0, 88, aa, 128, 64, color);
tft.drawBitmap(112, 88, bb, 128, 64, color);
SPI.begin();
mfrc522.PCD_Init();
LeftWheel.setMaxSpeed(1000.0);
LeftWheel.setSpeed(0);
RightWheel.setMaxSpeed(1000.0);
RightWheel.setSpeed(0);
}
void loop() {
// Look for new cards
if (SerialBT.available() > 0) {
dataIn = SerialBT.read();
Serial.print("Data received: ");
Serial.println(dataIn); // Debugging: print received data
if (dataIn == 1) { // Move forward
movingForward = !movingForward;
movingBackward = false;
if (movingForward) {
moveForward();
} else {
stopMoving();
}
} else if (dataIn == 2) { // Move backward
movingBackward = !movingBackward;
movingForward = false;
if (movingBackward) {
moveBackward();
} else {
stopMoving();
}
} else if (dataIn == 3) { // Turn left
rotateLeft();
} else if (dataIn == 4) { // Turn right
rotateRight();
} else if (dataIn == 5) { // Stop
stopMoving();
movingForward = false;
movingBackward = false;
}
}
LeftWheel.runSpeed();
RightWheel.runSpeed();
if (!mfrc522.PICC_IsNewCardPresent()) {
return;
}
// Select one of the cards
if (!mfrc522.PICC_ReadCardSerial()) {
return;
}
// Show UID on serial monitor
Serial.print("UID tag: ");
String content = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
// Check if the detected card is the authorized one
content.toUpperCase();
if (content.substring(1) == "53 02 CC 23 11 00 01") { // Change here the UID of the authorized card/cards
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 240 / 360; // 360 degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 06 D1 23 11 00 01") { // Change here the UID of the authorized card/cards
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 240 / 360; // 180degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 38 4B 25 11 00 01") { // Change here the UID of the authorized card/cards
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 240/360; // 180degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 BA D6 23 11 00 01") { // Change here the UID of the authorized card/cards lurus
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 240/360; // 180degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 CF D9 23 11 00 01") { // Change here the UID of the authorized card/cards lurus
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 240/360; // 180degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 02 DD 23 11 00 01") { // Change here the UID of the authorized card/cards lurus
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 240/360; // 180degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 56 E0 23 11 00 01") { // Change here the UID of the authorized card/cards lurus
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 240/360; // 180degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 6E CE 23 11 00 01") { // Change here the UID of the authorized card/cards lurus
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 240/360; // 180degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 CC E3 23 11 00 01") //(kiri)
{ // Change here the UID of the authorized card/cards
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 310/360; // 360 degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
StepsRequired = STEPS_PER_OUT_REV * 240 / 360; // 360 degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 63 E7 23 11 00 01") //(kiri)
{ // Change here the UID of the authorized card/cards
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 310/360; // 360 degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
StepsRequired = STEPS_PER_OUT_REV * 240 / 360; // 360 degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 69 EA 23 11 00 01") //(kiri)
{ // Change here the UID of the authorized card/cards
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 310/360; // 360 degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
StepsRequired = STEPS_PER_OUT_REV * 240 / 360; // 360 degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
if (content.substring(1) == "53 25 ED 23 11 00 01") //(kiri)
{ // Change here the UID of the authorized card/cards
Serial.println("Authorized access");
Serial.println();
delay(500);
// Move both steppers 360 degrees
StepsRequired = STEPS_PER_OUT_REV * 310/360; // 360 degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
StepsRequired = STEPS_PER_OUT_REV * 240 / 360; // 360 degrees
stepper1.setMaxSpeed(1000.0);
stepper1.move(StepsRequired);
stepper1.setSpeed(stepperSpeed);
stepper2.setMaxSpeed(1000.0);
stepper2.move(-StepsRequired);
stepper2.setSpeed(stepperSpeed);
// Wait for both steppers to reach the target position
while (stepper1.distanceToGo() != 0 && stepper2.distanceToGo() != 0) {
stepper1.runSpeedToPosition();
stepper2.runSpeedToPosition();
}
}
}
void moveForward() {
LeftWheel.setSpeed(wheelSpeed/2);
RightWheel.setSpeed(wheelSpeed/2);
Serial.print("Moving forward with speed: ");
Serial.println(wheelSpeed); // Debugging: print current speed
}
void moveBackward() {
LeftWheel.setSpeed(-wheelSpeed/2);
RightWheel.setSpeed(wheelSpeed/2);
Serial.print("Moving backward with speed: ");
Serial.println(wheelSpeed); // Debugging: print current speed
}
void rotateLeft() {
// Adjust the speed and steps as needed to achieve the desired rotation
RightWheel.setSpeed(wheelSpeed /2);
LeftWheel.setSpeed(-wheelSpeed / 2); // Example adjustment
Serial.print("Rotating left with speed: ");
Serial.println(wheelSpeed); // Debugging: print current speed
}
void rotateRight() {
// Adjust the speed and steps as needed to achieve the desired rotation
RightWheel.setSpeed(wheelSpeed /2);
LeftWheel.setSpeed(wheelSpeed / 2); // Example adjustment
Serial.print("Rotating right with speed: ");
Serial.println(wheelSpeed); // Debugging: print current speed
}
void stopMoving() {
LeftWheel.setSpeed(0);
RightWheel.setSpeed(0);
Serial.println("Stopping motors"); // Debugging: print stopping message
}
//93 67 8F 08