PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nunchuk in X und Y



2.0.0.4
27.11.2015, 15:19
hallo zusammen,
ich möchte mit einen Nunchuk einen kleinen Roboter mit zwei antrieben steuern (links und rechts) das Prinzipien sollte einer steuerung eines Panzerfahrzeuges entsprechen.

ich habe mich auch am Code probiert finde Ihn aber nicht gut.



Kennt einer von euch eine Bibliothek die dass kann die Nunchuk werte mittlere Stellung x 127 y 127 in links rechts -100...0...+100 übersetzt


Mfg
Alex

shedepe
27.11.2015, 18:46
Wie wäre es du postest deine Code hier ? So schwer ist das nicht sowas umzusetzen wenn man bisschen drüber nachdenkt. Eine Lib ist mir dafür zumindest nicht bekannt.

Sisor
28.11.2015, 17:48
Hier (https://www.arduino.cc/en/Reference/Map) findest du (unten auf der Seite) die passende C-Funktion. Es sei darauf hingewiesen, dass bei der Operation die Genauigkeit in den meisten Fällen abnimmt.

2.0.0.4
28.11.2015, 20:19
danke,
das würde beim Rechteck funktionieren aber beim octagram geht das nicht.

Sisor
28.11.2015, 21:02
OP.find("octagramm") == null !

2.0.0.4
29.11.2015, 11:30
sorry koenntest du das etwas erläutern - OP.find kann ich leider nichts anfangen - wo hast du es gefunden?

Sisor
29.11.2015, 13:06
Sorry - koenntest du das etwas erläutern - mit octagram kann ich leider nichts anfangen - Kontext zur op?
[original post, der erste Beitrag in einem Thread (Internet)]

2.0.0.4
13.12.2015, 16:30
hi, beim Bewegungsfeld des Kontrollers handelt es sich um ein Achteck https://de.wikipedia.org/wiki/Achteck dem entsprechend kann man es nicht einfach berechnen.

meine versuche

//prozentuale ansteuerung Roemisch I
if (py>=0 && px>0){
if (py-px >= 0) {
linksP = px*w21+py;
rechtsP = 100-px*w2;

//Serial.print("Roemis I O-1");
}

if (py-px < 0) {
if (py > 0){
linksP = py*w21+px;
rechtsP = -100+py*w2;

}
//Serial.print("Roemis I O-2");
}

}


//prozentuale ansteuerung Roemisch II
if (py<0 && px>=0){
if (py+px >= 0) {

linksP = 100+py*w2;
rechtsP = py*w21-px;

//Serial.print("Roemis II O-3");
}

if (py+px < 0) {

linksP = -100+px*w2;
rechtsP = -px*w21+py;
//Serial.print("Roemis II O-4");
}

}

//prozentuale ansteuerung Roemisch III
if (py<=0 && px<0){
if (py-px < 0) {

linksP = +px*w21+py;
rechtsP = -100-px*w2;
//Serial.print("Roemis III O-5");
}

if (py-px >= 0) {

linksP = +py*w21+px;
rechtsP = 100+py*w2;
//Serial.print("Roemis III O-6");
}

}

//prozentuale ansteuerung Roemisch IV
if (py>0 && px<=0){
if (py+px < 0) {
linksP = -100+py*w2;
rechtsP = py*w21-px;
//Serial.print("Roemis IV O-7");

}

if (py+px >= 0) {
linksP = 100+px*w2;
rechtsP = -px*w21+py;
//Serial.print("Roemis IV O-8");
}

}

Sisor
14.12.2015, 19:58
Der Nintendo Nunchuck auf Anfrage liefert 6 Byte.
Die ersten beiden Byte sind AnalogX und AnalogY, wobei die jeweilige Nullstellung dem Wert 127 entspricht.
Abweichungen entsprechen der Auslenkung des Analogstick.
Mathematisch handelt es sich also um ein um kartesisches Koordinatensystem.
Eine Verschiebung auf den Nullpunkt mit anschließender Skalierung bedeutet mathematisch:
x_proz = (x_analog - 127) *(100 / 127)