Hallo,
Ich möchte für eine Schule ein kleines Projekt machen, bei dem wir ein Auto mit 2 Joysticks via Bluetooth steuern wollen.
Habe hierzu einige tutorials und codes auf youtube gefunden, jedoch funktioniert das alles nicht ganz. Ich konnte HC05 Module koppeln und habe soweit auch alles richtig verdrahten aber meine Motoren bewegen sich sobald die HC05 sich verbunden haben unkontrolliert und steuern ist nicht möglich.
Könntet ihr mir bitte helfen? Bin jetzt auch kein Arduino Genie.
Habe auch mal das Git Hub Projekt was ich gefunden habe mit angeheftet
GitHub - aslam-Hossain-YT/Joystick-Control-Bluetooth-Car
Transmitter als Master mit Joysticks
#include<SoftwareSerial.h>
SoftwareSerial btSerial(2, 3); // RX | TX
struct PacketData
{
byte lxAxisValue;
byte lyAxisValue;
byte rxAxisValue;
byte ryAxisValue;
};
int value;
PacketData data;
void setup()
{
btSerial.begin(38400);
Serial.begin(9600);
}
//This function is used to map 0-1023 joystick value to 0-254. hence 127 is the center value which we send.
//It also adjust the deadband in joystick.
//Jotstick values range from 0-1023. But its center value is not always 511. It is little different.
//So we need to add some deadband to center value. in our case 500-530. Any value in this deadband range is mapped to center 127.
int mapAndAdjustJoystickDeadBandValues(int value, bool reverse)
{
//Serial.println(value);
if (value >= 550)
{
value = map(value, 550, 1023, 127, 254);
}
else if (value <= 480)
{
value = map(value, 480, 0, 127, 0);
}
else
{
value = 127;
}
if (reverse)
{
value = 254 - value;
}
return value;
}
void loop()
{
data.lxAxisValue = mapAndAdjustJoystickDeadBandValues(analogRead(A3), false);
data.lyAxisValue = mapAndAdjustJoystickDeadBandValues(analogRead(A4), false);
data.rxAxisValue = mapAndAdjustJoystickDeadBandValues(analogRead(A5), false);
data.ryAxisValue = mapAndAdjustJoystickDeadBandValues(analogRead(A6), false);
String dataString;
dataString = dataString
+ data.lxAxisValue + ","
+ data.lyAxisValue + ","
+ data.rxAxisValue + ","
+ data.ryAxisValue + "\n";
btSerial.print(dataString);
delay(10);
}
Receiver als Slave und L298N Motor Shield
//YouTube: Aslam Hossain, https://www.youtube.com/channel/UCdaQfJEKvpoAPIzQNwFGlHw
//Facebook Page: https://www.facebook.com/aslamhossain3852
//For Any Help, Feel Free to knock me through what's App: 01877543825
#include <SoftwareSerial.h>
SoftwareSerial btSerial(2, 3); // RX | TX
struct PacketData {
byte lxAxisValue;
byte lyAxisValue;
byte rxAxisValue;
byte ryAxisValue;
};
PacketData data;
// Right motor
int enableRightMotor = 6;
int rightMotorPin1 = 12;
int rightMotorPin2 = 11;
// Left motor
int enableLeftMotor = 5;
int leftMotorPin1 = 10;
int leftMotorPin2 = 9;
unsigned long lastRecvTime = 0;
void setup() {
pinMode(enableRightMotor, OUTPUT);
pinMode(rightMotorPin1, OUTPUT);
pinMode(rightMotorPin2, OUTPUT);
pinMode(enableLeftMotor, OUTPUT);
pinMode(leftMotorPin1, OUTPUT);
pinMode(leftMotorPin2, OUTPUT);
Serial.begin(9600);
btSerial.begin(38400);
}
void loop() {
String dataString;
if (btSerial.available()) {
dataString = btSerial.readStringUntil('\n');
sscanf(dataString.c_str(), "%d,%d,%d,%d", &data.lxAxisValue, &data.lyAxisValue, &data.rxAxisValue, &data.ryAxisValue);
int throttle = map(data.lyAxisValue, 254, 0, -255, 255); // Left stick - y axis - forward/backward car movement
int steering = map(data.rxAxisValue, 0, 254, -255, 255); // Right stick - x axis - left/right car movement
int rightMotorSpeed = 0, leftMotorSpeed = 0;
if (throttle >= 0) {
rightMotorSpeed = throttle - steering;
leftMotorSpeed = throttle + steering;
} else {
rightMotorSpeed = throttle + steering;
leftMotorSpeed = throttle - steering;
}
rightMotorSpeed = constrain(rightMotorSpeed, -250, 250);
leftMotorSpeed = constrain(leftMotorSpeed, -250, 250);
int rightMotorDirection = (rightMotorSpeed >= 0) ? 1 : -1;
int leftMotorDirection = (leftMotorSpeed >= 0) ? 1 : -1;
// Control right motor
if (rightMotorSpeed > 0) {
digitalWrite(rightMotorPin1, HIGH);
digitalWrite(rightMotorPin2, LOW);
} else if (rightMotorSpeed < 0) {
digitalWrite(rightMotorPin1, LOW);
digitalWrite(rightMotorPin2, HIGH);
} else {
digitalWrite(rightMotorPin1, LOW);
digitalWrite(rightMotorPin2, LOW);
}
// Control left motor
if (leftMotorSpeed > 0) {
digitalWrite(leftMotorPin1, HIGH);
digitalWrite(leftMotorPin2, LOW);
} else if (leftMotorSpeed < 0) {
digitalWrite(leftMotorPin1, LOW);
digitalWrite(leftMotorPin2, HIGH);
} else {
digitalWrite(leftMotorPin1, LOW);
digitalWrite(leftMotorPin2, LOW);
}
analogWrite(enableRightMotor, abs(rightMotorSpeed));
analogWrite(enableLeftMotor, abs(leftMotorSpeed));
lastRecvTime = millis();
} else {
unsigned long now = millis();
if (now - lastRecvTime > 1000) {
// Signal lost after 1 second. Stop the motors
analogWrite(enableRightMotor, 0);
analogWrite(enableLeftMotor, 0);
}
}
}