Okay Danke Sisor;
ich habe heute mittag zeit es zu testen und kann dann anschließend wieder berichten,
ich muss nur schauen zwecks der Verkabelung, wobei ich ja nichts geändert hatte an der Verkabelung
Der Empfänger empfängt nichts (-1). Verkabelung und Kontakte überprüfen.Sie werden echt gut warm und brummen leicht, der Serielle Monitor gibt immer -1 aus!
Dieser Code funzt:
Sender:
Empfänger:Code:... void loop (void) { byte data[2]; data[0] = map(analogRead(xPot1Pin), 0, 1023, 255, 0); data[1] = map(analogRead(yPot2Pin), 0, 1023, 255, 0); radio.write(data, 2); }
Wie du siehst, wird der Motor erst gesteuert, wenn auch Daten empfangen wurden.Code:#include <Servo.h> #include <SPI.h> #include "RF24.h" Servo myServo1; Servo myServo2; const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(9,10); byte parabel(byte val) { float a = (val - 128) / 13.45; byte b = a*a; if (val < 127) b = -b; return b + 90; } void setup() { Serial.begin(9600); // zum Debuggen Kommentarzeichen entfernen // und diesen Arduino über Serial Mointor auslesen myServo1.attach(3); // Pin 3 myServo2.attach(5); // Pin 5 radio.begin(); radio.openReadingPipe(1, pipe); radio.startListening(); } void loop() { if (radio.available()) { bool done = false; byte msg[2]; while (!done) { done = radio.read(msg, 2); } //_DEBUG: Serial.print("Wert 1: "); Serial.print(msg[0]); Serial.print(" / "); Serial.print(parabel(msg[0])); Serial.print(" Wert 2: "); Serial.print(msg[1]); Serial.print (" / "); Serial.println(parabel(msg[1])); //_END_DEBUG myServo1.write ( parabel(msg[0]) ); myServo2.write ( parabel(msg[1]) ); } }
Und ich hab die Datentypen getauscht, Byte statt Integer, weil die 8 Bit eines Byte ausreichen bzw. die restlichen Nullen des Integer überflüssig sind. -> Code effizienter.
Geändert von Sisor (12.04.2014 um 11:00 Uhr)
Okay Danke Sisor;
ich habe heute mittag zeit es zu testen und kann dann anschließend wieder berichten,
ich muss nur schauen zwecks der Verkabelung, wobei ich ja nichts geändert hatte an der Verkabelung
So ich kann nur positives Berichten ....
die Code Änderung von Integer auf Byte hat funktioniert ....
Genau so wie Sisor´s Parabel Umprogrammierung extrem geil funktioniert hat.
Der Roboter reagiert genau richtig auf die Potti´s, so das ein schönes Fahrbild entsteht ....
Also das mit der Parabel war Gold richtig und ebenso Gold wert
Die NRF2401L+PA+LNA Module arbeiten sauber und ich konnte mal ein reichweiten Test von
400 Metern durchführen ohne Störung und jegliches Zucken. Das ist für den Mäheinsatz in unserem
Garten mehr als ausreichend.
Ich bedanke mich für eure Tipps und Sisor´s Hilfe beim Code und die geniale Idee mit der Parabel ..... echt super.
Ich hab ja noch weitere Ideen ... da kann ich die ganzen Info´s gut verwenden =)
Mfg Benny
Freut mich.Wenn du zufrieden und fertig mit dem Projekt bist, kannst du es ja mal als Ganzes vorstellen. Ich glaube nämlich, dass so ein Mähroboter-Projekt viele Nachahmer haben könnte.
Nochmal zur 'Parabel':
Für Mathe-Freaks: Es handelt sich um eine in den Wertebereich von 0-180 eingepasste Parabel 2.Ordnung, wobei der linke Teil nach unten gespiegelt ist.
Wie man sieht, werden Werte von 0 - 255 von der Funktion als Eingabewerte erwartet. Der Bereich um 127 repräsentiert hierbei die Ruhelage oder Mittelstellung des Joystickpotis. Die Funktion beruhigt den diesen Mittelstellungsbereich und rechnet gleichzeitig auf den vom Fahrtenregler erwarteten Wertebereich zwischen 0 und 180 um.Code:byte parabel(byte val) { float a = (val - 128) / 13.45; byte b = a*a; if (val < 128) b = -b; return b + 90; }
ja wenn der RSL-7 fertig ist werde ich ihn mal vorstellen.
Habe gestern 1h damit gemäht.
Werde die reifen jetzt noch optimieren, ich hab schon neue mit wesentlich mehr Profil bestellt,
da die Traktion nicht so war wie ich es mir mit den jetzigen Reifen vorgestellt hatte.
Ich muss auch mal meine Fernsteuerung vorstellen, mit den Display, und dem LED Bargraphen ....
Wo es in meinen anderen Themen drum ging mit den Schieberegistern, ist echt toll geworden.
Ich hab noch so paar Ideen unter anderem ein kleineren Roboter mit Kettenantrieb, ein Servo Roboterarm der
den kleinen von dem großen auf den Boden hebt.
Also noch jede Mänge vor .... =)
Das mit der Parabel ist echt eine geniale Geschichte, zumindest für meine Zwecke, bzw kann das ja jeder anwenden
der sanftere Servobewegungen braucht!
Hallo Community,
könntet ihr euch nochmals meine beiden Code´s anschauen?
folgendes, ich hab meine Schaltung komplett mit neuen Kabeln ausgestattet und jetzt funkt es ned mehr
Das Gas also Vorwärts und Rückwärts geht aber die Lenkung nicht?
Ich hab aber extra immer eins nach dem anderen getauscht das ich ja nicht was falsch mach.
Wenn ich im Sender Code ....
data[1] = map(analogRead(yPot2Pin), 0, 1023, 255, 0);
die 255 mit der 0 tausche bekommt mein Fahrtenregler kein Signal mehr ....
Ich hab aber eigentlich am Code nichts geändert.
Nur hab ich jetzt schon drei Tage lang so viel zeit an Kabel kontrollieren und Code kontrollieren verbracht
das ich jetzt vor lauter Bäumen den Wald nicht mehr sehe, wenn ihr wisst was ich meine !
Vllt könnt ihr mal drüber schaun ob doch wo ein Fehler drin ist! Danke im Voraus.
Sender:
Empfänger:Code:#include <SPI.h> #include "RF24.h" const uint64_t pipe = 0xE8E8F0F0E1LL; // Adresse des Übertragungskanals const int xPot1Pin = A1; // Joystick 1 Pin X Achse const int yPot2Pin = A2; // Joystick 2 Pin Y Achse // Funkmodul NRF24L01 mit Arduino-Pins verbinden: // SCK -> 13 // MISO -> 12 // MOSI -> 11 // CSN -> 10 // CE -> 9 // SPI-Bus Pins 9 und 10 RF24 radio(9,10); void setup (void) { radio.begin(); radio.openWritingPipe(pipe); // Kanal öffnen } void loop (void) { byte data[2]; data[0] = map(analogRead(xPot1Pin), 0, 1023, 255, 0); // liest den Wert des Potentiometers (Wert zwischen 0 und 1023) data[1] = map(analogRead(yPot2Pin), 0, 1023, 255, 0); // und skalierter den Wert (zwischen 0 und 255) für den Servo / Fahrtenregler radio.write(data, 2); // Adresse (data) und Länge (2) der zu sendenden Daten }
Code:#include <Servo.h> #include <SPI.h> #include "RF24.h" Servo myServo1; Servo myServo2; const uint64_t pipe = 0xE8E8F0F0E1LL; RF24 radio(9,10); byte parabel(byte val) { float a = (val - 128) / 13.45; byte b = a*a; if (val < 127) b = -b; return b + 90; } void setup() { //Serial.begin(9600); // zum Debuggen Kommentarzeichen entfernen // und diesen Arduino über Serial Mointor auslesen myServo1.attach(5); // Pin 3 myServo2.attach(6); // Pin 5 radio.begin(); radio.openReadingPipe(1, pipe); radio.startListening(); } void loop() { if (radio.available()) { bool done = false; byte msg[2]; while (!done) { done = radio.read(msg, 2); } /* //_DEBUG: Serial.print("Wert 1: "); Serial.print(msg[0]); Serial.print(" / "); Serial.print(parabel(msg[0])); Serial.print(" Wert 2: "); Serial.print(msg[1]); Serial.print (" / "); Serial.println(parabel(msg[1])); //_END_DEBUG */ myServo1.write ( parabel(msg[0]) ); myServo2.write ( parabel(msg[1]) ); } }
Meine Homepage www.belagra.de
Das mal überprüfen:
Empfänger:
Ansonsten siehts ok aus.Code:void setup() { //Serial.begin(9600); // zum Debuggen Kommentarzeichen entfernen // und diesen Arduino über Serial Mointor auslesen myServo1.attach(5); // Pin 3 myServo2.attach(6); // Pin 5 ... }
ja grins wollte es grade noch bearbeiten und ändern!
denn ich hab die Pins am Empfänger Arduino geändert um zu testen.
wie gesagt sehr komisch ist wenn ich die Lenkbewegung umdrehen möchte, sagt mir der Fahrtenregler das er kein Signal bekommt.
also von
data[1] = map(analogRead(yPot2Pin), 0, 1023, 255, 0);
in
data[1] = map(analogRead(yPot2Pin), 0, 1023, 0, 255);
Aber dann bleibt mir nichts anderes übrig als nochmals alle Kabel zu checken,
wenn ihr wissen wollt, wie die ganze Geschichte aussieht, könnt ihr meine neue Homepage besuchen,
da sind schon jede Mänge Bilder in der " Roboter RSL-7 " Galerie drin.
Die Seite ist noch im Aufbau aber ich mach Stück für Stück =)
p.s. Hab jetzt auch den Fahrtenregler getauscht, in der Galerie ist noch der Alte zu sehen
Meine Homepage www.belagra.de
An deiner Stelle würde ich:
- im Fahrtenregler-Datenblatt schauen, wann bzw warum der Fahrtenregler auf 'kein Signal' schaltet
- wieder mit dem Arduino-Monitor (DEBUG-Teile im Code entkommentieren) schauen, was der Empfänger-Arduino ausspuckt
- evtl. Pins wechseln bzw. auf Funktion (Multimeter - Spannungsmessung) überprüfen
Okay das ne gute Idee. Werde mal schauen was der ausgibt. Dann weis ich bescheid
Meine Homepage www.belagra.de
Lesezeichen