Umbau ferngesteuertes Auto

Hallo zusammen,

ich versuche ein ferngesteuertes Auto ohne Fernbedienung lauffähig zu machen. Ich habe mich viel an dem unten angefügten Youtube Video orientiert.

Das Auto lässt sich bereits fernsteuern.

Da bisher geringe bis keine Programmkenntnisse vorhanden sind, orientiere ich mich an andere Programmschnipseln.

  1. Ich hätte gerne die Möglichkeit, dasss das Auto stoppt, sollte die Funkverbindung abreißen. Sollte die Verbindung abbrechen, muss meiner Meinung nach das folgende Unterprogramm ausgeführt werden.
void stop()
{
analogWrite(ena, 0);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
digitalWrite(in5, LOW);
digitalWrite(in6, LOW);
}
  1. Ich hätte noch eine allgemeine Verständnisfrage. Der Sender (Fernbedienung) sowie der Empfänger (Auto) haben bei die Adresse 0xE8E8F0F0E1LL. Kann ich diese Adresse individuell ändern?
#include <SPI.h>
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
int msg[1];
int data;
int pos;
int motorSpeedF;
int motorSpeedB;
int left1;
int right1;
const int in1 = 7;
const int in2 = 8;
const int in3 = 4;  
const int in4 = 2; 
const int in5 = 3; 
const int in6 = 6; 
const int ena = 5;    // PWM pin to change speed
void setup()
{
 pinMode(in1, OUTPUT);
 pinMode(in2, OUTPUT);    
 pinMode(ena, OUTPUT);     
 pinMode(in3, OUTPUT);
 pinMode(in4, OUTPUT);
 pinMode(in5, OUTPUT);
 pinMode(in6, OUTPUT);
radio.begin();
radio.openReadingPipe(1,pipe);
radio.startListening();
}
void loop()
{
 if (radio.available())radio.read(msg, 1);
if (msg[0] >=128 && msg[0] <=185)data = msg[0], motorSpeedB = map(data, 185, 128, 0, 255), backward(motorSpeedB);
 if (msg[0] >=201 && msg[0] <=255)data = msg[0], motorSpeedF = map(data, 201, 255, 0, 255), forward(motorSpeedF);
if (msg[0] >=0 && msg[0] <=60)data = msg[0], left1 = map(data, 60, 0, 0, 255), left();
if (msg[0] >=65 && msg[0] <=127)data = msg[0], right1 = map(data, 65, 127, 0, 255), right();
if (msg[0] >185 && msg[0] <200)data = msg[0], stop();
}
void stop()
{
 analogWrite(ena, 0);
 digitalWrite(in1, LOW);
 digitalWrite(in2, LOW);
 digitalWrite(in3, LOW);
 digitalWrite(in4, LOW);
 digitalWrite(in5, LOW);
 digitalWrite(in6, LOW);
}
void forward(int motorSpeedF)
{
 digitalWrite(in1, LOW);
 digitalWrite(in2, HIGH);
 digitalWrite(in3, LOW);
 digitalWrite(in4, HIGH);
 analogWrite(ena, motorSpeedF);
}
void backward(int motorSpeedB)
{
 digitalWrite(in1, HIGH);
 digitalWrite(in2, LOW);
 digitalWrite(in3, HIGH);
 digitalWrite(in4, LOW);
 analogWrite(ena, motorSpeedB);
}
void left()
{
digitalWrite(in5, HIGH);
digitalWrite(in6, LOW);
}
void right()
{
digitalWrite(in5, LOW);
digitalWrite(in6, HIGH);
}

Hi

Packe bitte Deinen Sketch in CODE-Tags (code)...(/code) (nur in eckigen Klammern).
Dann noch ein Zusatzbitte: Drücke in der IDE STRG+T und entferne ALLE unnötigen Leerzeilen.

Das kannst Du im Ausgangspost jederzeit abändern. (ggf. 5 Minuten-Sperre, da <100 Post's)

Die 'Pipe' ist eine Art Kennung, Die muß bei Sender und Empfänger identisch sein - Da hört's dann aber langsam bei mir auch schon wieder auf.
Versuch doch einfach, was passiert, wenn Du in diesem Buchstaben/Ziffern-Salat was änderst - solltest Das auf beiden Seiten identisch machen ;).

MfG

Angesichts des ziemlich unformatierten Codes erlaube ich mir, mal wieder auf das hier hinzuweisen :slight_smile:

Gruß

Gregor

Vermutlich gibt es keine Meldung, wenn die Verbindung abreißt. Man könnte dann z.B. 1 min. nach dem letzten empfangenen Kommando stoppen, oder regelmäßig ein Kontrollkommando schicken und stoppen sobald das ausbleibt (Totmann...).

Du suchst ein Failsafe

Hi

Macht diese Zeile:  if (msg[0] >= 128 && msg[0] <= 185)data = msg[0], motorSpeedB = map(data, 185, 128, 0, 255), backward(motorSpeedB);was ich von der Darstellung her vermuten würde?
Also, daß 'die ganze Zeile' von der IF-Abfrage abhängig ausgeführt wird, da Diese erst bei dem ; endet?
... schaut zumindest 'unrund' aus, gefällt mir nicht ...

MfG

Danke für das Feedback. Dennoch hätte ich die Frage wie ich am besten den failsafe in meinen Programmcode integriere.

Hi

Du merkst Dir bei jedem empfangenem Telegramm die 'Uhrzeit' - millis().

if (millis()-lastmillis>failwait){
  Kommandant an Maschine: Stop;
}

MfG