Hallo Liebe Community,
ich bin neu hier und probiere mich für den Start an einem SMARS Roboter.
Der Roboter ist fertig, die Motoren laufen über einen 1508a driverboard problemlos, wenn ich sie mit dem eingebauten Nano über die PINs (IN1-4) anspreche.
Nun habe ich ein HM-10 original (kein Klon) Modul. Dessen TX Pin habe ich am Nano mit Pin 2 verbunden. Der RX Pin des Moduls geht über einen Spannungsteiler(mit 1k/2k) an den PIN 3 des Nano, und der weiterführende Spannungsteiler natürlich an Ground.
Mit dem einbinden der Dabble Bibliothek wollte ich das ganze Fernsteuern. Ich kann mich mit dem HM-10 Modul in der APP verbinden, es kommen jedoch keine Steuerbefehle durch. IPhone wird genutzt. (Iphone 12pro)
Wenn ich das HM-10 Modul mit TX an TX und RX an RX des Arduinos verbinde (RX immer mit Spannungsteiler natürlich) kann ich im Seriell-Monitor mit den AT Befehlen das Modul Programmieren. Hier habe ich ROLE auf 0, den PIN auf 000000 und die Baudrate auf 0 (was 9600 entpsricht). Diesen Wert habe ich auch in meinem Code eingebunden unter Serial.begin(9600) sowie in die Dabble.begin(9600). Ich habe auch schon andere Baudraten wie 38400 probiert. Ändert aber an meinem Problem nichts. Es kommen einfach keine Befehle von der App am Nano an.
Wenn ich das Modul mit TX an RX des Nano und RX an TX des Nano anschließe, und bei Dabble.begin(9600,0,1) nutze, funktioniert es auch nicht. Ich sehe zwar im Serialmonitor vierecke runterrieseln, die zu Fragezeichen werden wenn ich bei Dabble eine Eingabe mache, mehr aber nicht.
Was aber funktioniert:
Wenn das Modul am HardwareSerial angeschlossen ist und ich es mit einer Bluetoothterminal APP am Iphone verbinde, und per diesem Terminal vom Handy ASCII Befehle an das Modul sende, drehen sich auch die Motoren und im Serial Monitor werden die Empfangenen Befehle angezeigt.
Sende ich selbige ASCII Befehle von einem anderen Nano über ein weiteres HM10 Modul (was als Master ROLE1 direkt mit dem anderen Nano(Slave) verbunden ist), tut sich auch nichts. Die Befehle werden irgendwie vom HM-10 Modul nicht weiterleitet an den Nano.
Ich habe auch nach dem aktivieren der Seriellen Schnittstellen ein Serial.println Befehl mit über 80 charaktern gesetzt, dass das HM-10 Moduls aus dem eventuellen Sleep geholt wird.
An der Leitungsverbindung kann es nicht liegen, da ja mit Umgekehrten RX/TX Pins die AT-Commando-Programmierung problemlos funktioniert.
Ich bin ratlos, vielleicht hat jemand eine Lösung...
Hier der einfache Code, für die Dabble Verbindung:
#include <Dabble.h>
#define INCLUDE_GAMEPAD_MODULE
#define CUSTOM_SETTINGS
// Motorshield und Speedvars
int IN1 = 10; //MotorA IN1
int IN2 = 9; //MotorA IN2
int IN3 = 6; //MotorB IN3
int IN4 = 5; //MotorB IN4
int motorA_speed = 80; //Motor A Geschwindigkeit 0-255 (Rechte Motor)
int motorB_speed = 80; //Motor A Geschwindigkeit 0-255 (Linke Motor)
int movementtime = 300; //Fahrzeit für ein Knopfdruck
//ledBAR
int ledBARpin = 2; // ledBAR PIN
bool ledBAR = 0; //ledBAR switch
char val;
void backward() {
// rückwärtsfahrt, achtung, der linke motor muss andersherum drehen als der rechte, weil die motoren spiegelverkehrt eingebaut sind
analogWrite(IN1, motorA_speed);
analogWrite(IN2, LOW);
analogWrite(IN3, LOW);
analogWrite(IN4, motorB_speed);
delay(movementtime);
stop();
}
void forward() {
// vorwärtsfahrt
analogWrite(IN1, LOW);
analogWrite(IN2, motorA_speed);
analogWrite(IN3, motorB_speed);
analogWrite(IN4, LOW);
delay(movementtime);
stop();
}
void stop() {
// Motoren aus
analogWrite(IN1, LOW);
analogWrite(IN2, LOW);
analogWrite(IN3, LOW);
analogWrite(IN4, LOW);
}
void rotateleft() {
// linksdrehung
analogWrite(IN1, LOW);
analogWrite(IN2, motorA_speed);
analogWrite(IN3, LOW);
analogWrite(IN4, motorB_speed);
delay(movementtime);
stop();
}
void rotateright() {
// linksdrehung
analogWrite(IN1, motorA_speed);
analogWrite(IN2, LOW);
analogWrite(IN3, motorB_speed);
analogWrite(IN4, LOW);
delay(movementtime);
stop();
}
void setup() {
Serial.begin(9600);
Dabble.begin(9600,3,2); //(baudrate,RXpin,TXpin)
delay(2000);
Serial.println("SMARS Dabble Bluetooth ready, waking up HM10-Bluetoothmodule");
delay(1000);
Serial.println("Bluetoothmodule wake up OK, please Start your Connection with Dabble-APP and connect via Bluetooth to SMARS-HM10 Network");
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
pinMode(ledBARpin, OUTPUT); // Output für ledBAR auf pin 2
stop(); // stoppe motoren bei beginn
}
void loop() {
Dabble.processInput();
if (GamePad.isUpPressed()) forward();
if (GamePad.isDownPressed()) backward();
if (GamePad.isLeftPressed()) rotateleft();
if (GamePad.isRightPressed()) rotateright();
if (GamePad.isTrianglePressed()) {
motorA_speed = motorA_speed + 40;
motorB_speed = motorB_speed + 40;
if (motorA_speed > 255) motorA_speed = 255;
if (motorB_speed > 255) motorB_speed = 255;
}
if (GamePad.isCrossPressed()) {
motorA_speed = motorA_speed - 40;
motorB_speed = motorB_speed - 40;
if (motorA_speed < 0) motorA_speed = 0;
if (motorB_speed < 0) motorB_speed = 0;
}
if (GamePad.isCirclePressed()) ledBAR != ledBAR;
if (ledBAR = 1) digitalWrite(ledBARpin, HIGH);
else digitalWrite(ledBARpin, LOW);
}