-
Ein int besteht aus 4 byte. Du willst zwei int senden, also 8 Byte.
Jetzt sendest du allerdings einen Haufen Nullen durch die Gegend.
Nicht schlimm, aber leicht zu optimieren.
Kannst ja selber mal versuchen.
( statt int byte benutzen, mit map() den analogRead-Wert auf 8Bit begrenzen).
-
okay das kann ich gerne mal probieren kann dann berichten obs geklappt hat.
eine andre frage, wenn ich jetzt die poti Bewegung rumdrehen möchte, also wenn er
Vorwärts fährt statt Rückwärts oder umgedreht.
Muss ich dann einfach aus:
data[0] = map(analogRead(xPot1Pin), 0, 1023, 0, 179);
das hier machen ?
data[0] = map(analogRead(xPot1Pin), 179, 1023, 0, 0);
oder wie kann man so etwas herum drehen ?
-
data[0] = map(analogRead(xPot1Pin), 0, 1023, 179, 0);
Kannst du hier nachlesen.
-
ah okay, danke für den Link ...
eine Frage noch zu eben, wenn ich jetzt 4 Servos hätte also alle 4 Bewegungen der Potis benutzen,
hab ich ja 4 int´s sprich 16 Byte.
muss ich dann die beiden Werte 8 auf 16 setzten? also den wert wo wir aus 2, 8 gemacht haben?
-
Code:
void loop (void)
{
byte data[4];
data[0] = map(analogRead(xPotPin), 0, 1023, 0, 255);
data[1] = map(analogRead(yPotPin), 0, 1023, 0, 255);
data[2] = map(analogRead(aPotPin), 0, 1023, 0, 255);
data[3] = map(analogRead(bPotPin), 0, 1023, 0, 255);
radio.write(data, 4); // Adresse (data) und Länge (4) der zu sendenden Daten
}
-
achso okay?
so wie du ja letzt schon geschrieben hast, mit (data, 4);
dachte eben nur weil wir das ja grad geändert hatten, das dass dann damit zusammen hängt das man das immer er weigern muss.
Hast du das nur so geschrieben? oder wieso steht in deinem Code 255 ? - ich verwende ja 179!
Das hart nichts zur Folge?, frage lieber nach :D
-
Gegenfrage: Warum hast du denn an besagter Stelle 179 geschrieben?
-
grins
weil damals in dem Beispiel, Servos anzusteuern ...
val = map(val, 0, 1023, 0, 179);
... stand,
deswegen :)
und
weil das doch die Grad Zahlen sind von den Servos, 0 und 180 Grad.
-
Also:
Ein AnalogIn liefert Werte zwischen 0 und 1023 (10 Bit).
Aber ein PWM-Ausgang kann nur Werte zwischen 0 und 255 ausgeben (8 Bit).
Der Befehl
byte wert = map(analogRead(Pin), 0, 1023, 0, 255);
dient im einfachten Fall als Umrechner zwischen beiden Werten.
Soweit die Theorie. In der Praxis muss man halt gucken, ob die Poti-Schaltung tatsächlich den ganzen Bereich von 0 bis 5V abbildet.
Und welche Werte dann am Ausgang tatsächlich gebraucht werden. Wenn dein Servo-MaxWert 179 sein soll, dann setzt du natürlich den ein.
-
okay, danke für deine Erklärung, lieb von dir =)
Dient also als Umrechner.
Ich wollte e schauen den wert morgen am Roboter auszuprobieren, also 255 zu verwenden.
Weil bei dem Wert 179 für die servos, regieren die Potis was ich habe nur fast nichts oder fast alles.
Also, garnicht fahren oder Vollgas und das is ja nicht so schön.
Sollte schon etwas geschmeidiger sein, das hab ich grad eben bei den Servos gesehen.
Kann es sein, das es mit "255" besser ist? bzw sensibler ist was die potis angeht ?