Map funktion bei Fernsteuerung

Guten Tag,

Ich bin noch ziemlich am Anfang meiner Arduinokenntnisse daher bekomme ich folgendes nicht hin:

Ich habe einen "Joystick" , drück ich ihn nach vor gibt er eien Wert von 118-0.
118 unbetätigt, 0 Vollgas.
ich hätte im gegenzug dazu gerne 0-255 für meinen analogWrite(h-Brücke,Motor)

Ich hab mich soweit in die map funktion reingelesen das ich mir sicher bin ich muss diese verwenden.
Aber mein Problem ist das ich so ein taugenichts im rechnen bin das es mir einfach nicht gelingt.
Könnte mir bitte jemand sagen wie ich das umrechnen muss?
Mein Ansatzt war:
void loop() {
Usb.Task();
pwm= PS4.getAnalogHat(LeftHatY);
lenkwert = PS4.getAnalogHat(RightHatX);
lenkwert = map(lenkwert, 0, 256, 0, 180);
servo.write(lenkwert); //Lenkung funktioniert

if (pwm<118){
digitalWrite (dreh1,HIGH); //Drehrichtung
digitalWrite (dreh2,LOW); //Drehrichtung
geschwval=map(pwm,118,0,0,255) //Da ist mein beschriebenes Problem
analogWrite (geschwPin,geschwval);
Serial.print(pwm);
Serial.print("\t");
}
if (pwm>139){
digitalWrite (dreh1,LOW);
digitalWrite (dreh2,HIGH);
geschwval=map(pwm,139,255,0,255);
analogWrite (geschwPin,geschwval);

}

Wie gesagt, es geht NUR um den Teil mit map.

Wie gelingt es mir einen Wert von min.180,max.0 auf min.0,max255 zu mappen?

klingt gut,

geschwval=map(pwm,118,0,0,255) //Da ist mein beschriebenes Problem

mir fehlt da der ;
...

Da geb ich dir recht, scheint aber nur ein Fehler beim ins Forum abschreiben zu sein.
Dürfte im echten Programm aber nicht so sein sonst hätt ich ja einen Fehler beim Kompillieren.
Ich werde diese Nacht mal das ganze Projekt posten, habs jetzt nicht zur Hand.
Danke aber schonmal.

Mal wieder ein klassischer Fall von Crossposting. Der TO hat es nicht nötig im Ursprungsthread im anderen Forum zu antworten, sondern eröffnet hier einen neuen Thread, natürlich auch ohne Codetags und nur mit einem Codefragment.
Das zeigt schon eine gewhörige Portion Ignoranz.

Gruß Tommy

OHH JAAA ein böser CrossPoster. Wie fürchterlich!
Nein, hat mit Ignoranz nichts zu tun, ich hoffe dann nur eine Aussage auf meine Antwort zu bekommen anstatt dämliche Kommentare oder Belehrungen.
Wenn du nicht helfen kannst, dann lass einfach die normalen Personen ran.
Ich versteh nicht das es so Leute gibt wie dich die an jedem Thread herummeckern.

Das ist genau die Antwort, die ich von Dir erwartet habe. Viel Spaß noch.

Gruß Tommy

Hallo,

marsmaennchen:
OHH JAAA ein böser CrossPoster. Wie fürchterlich!
Nein, hat mit Ignoranz nichts zu tun, ich hoffe dann nur eine Aussage auf meine Antwort zu bekommen anstatt dämliche Kommentare oder Belehrungen.
Wenn du nicht helfen kannst, dann lass einfach die normalen Personen ran.
Ich versteh nicht das es so Leute gibt wie dich die an jedem Thread herummeckern.

in 2 Foren den Hinweis auf die Benutzung von Code-TAGs zu ignorieren, zu denken, die Leute müssen in ihrer Freizeit sich durch Deinen Kram wühlen um Sachen herauszufinden, die nur Du weißt...
Was soll passieren, was passiert stattdessen usw. müßest Du liefern oder eben auf Hilfe verzichten.
Du willst, daß Dir jemand bei Deinem Problem hilft, nicht wir reißen und drum, Dir helfen zu dürfen!

Gruß aus Berlin
Michael

Gut, also ich Versuchs nochmal für die Leute die schwer von Begriff sind:

Wert= map(AnalogWert,100,0,0,255);

Funktioniert das? Oder geht das nur wie in den Milliarden Poti beispielen

Wert= map(AnalogWert,0,1023,0,255);

Kann man 100-0 auch mappen oder geht immer nur von 0 auf irgendwas höheres.

Gibts hier wen der nicht nur den schlauen raushängen lässt und auch eine normale klare Antwort gibt?

marsmaennchen:
.....

Gibts hier wen der nicht nur den schlauen raushängen lässt und auch eine normale klare Antwort gibt?
.....

Allerdings können wir auch hier auf solche Kommentare von dir verzichten.

was spricht dagegen das einfach mal zu testen? Die Funktion steht doch super in der Doku beschrieben:
map() - Arduino Reference (ganz am Ende als Appendix)

Ein einfaches C++ Programm in der man die Funktion 1:1 kopiert liefert folgendes:

#include <iostream>

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

int main(int argc, char** argv ){
 for (int i= 0;i<101;i++) {
   std::cout << "map(" << i << ",100,0,0,255) =  " <<  map(i,0,100,0,255) << std::endl;
 }
 return 0;
}
map(0,100,0,0,255) =  255
map(1,100,0,0,255) =  252
map(2,100,0,0,255) =  249
map(3,100,0,0,255) =  247
map(4,100,0,0,255) =  244
map(5,100,0,0,255) =  242
map(6,100,0,0,255) =  239
map(7,100,0,0,255) =  237
map(8,100,0,0,255) =  234
map(9,100,0,0,255) =  232
map(10,100,0,0,255) =  229
map(11,100,0,0,255) =  226
map(12,100,0,0,255) =  224
map(13,100,0,0,255) =  221
map(14,100,0,0,255) =  219
map(15,100,0,0,255) =  216
map(16,100,0,0,255) =  214
map(17,100,0,0,255) =  211
map(18,100,0,0,255) =  209
map(19,100,0,0,255) =  206
map(20,100,0,0,255) =  204
map(21,100,0,0,255) =  201
map(22,100,0,0,255) =  198
map(23,100,0,0,255) =  196
map(24,100,0,0,255) =  193
map(25,100,0,0,255) =  191
map(26,100,0,0,255) =  188
map(27,100,0,0,255) =  186
map(28,100,0,0,255) =  183
map(29,100,0,0,255) =  181
map(30,100,0,0,255) =  178
map(31,100,0,0,255) =  175
map(32,100,0,0,255) =  173
map(33,100,0,0,255) =  170
map(34,100,0,0,255) =  168
map(35,100,0,0,255) =  165
map(36,100,0,0,255) =  163
map(37,100,0,0,255) =  160
map(38,100,0,0,255) =  158
map(39,100,0,0,255) =  155
map(40,100,0,0,255) =  153
map(41,100,0,0,255) =  150
map(42,100,0,0,255) =  147
map(43,100,0,0,255) =  145
map(44,100,0,0,255) =  142
map(45,100,0,0,255) =  140
map(46,100,0,0,255) =  137
map(47,100,0,0,255) =  135
map(48,100,0,0,255) =  132
map(49,100,0,0,255) =  130
map(50,100,0,0,255) =  127
map(51,100,0,0,255) =  124
map(52,100,0,0,255) =  122
map(53,100,0,0,255) =  119
map(54,100,0,0,255) =  117
map(55,100,0,0,255) =  114
map(56,100,0,0,255) =  112
map(57,100,0,0,255) =  109
map(58,100,0,0,255) =  107
map(59,100,0,0,255) =  104
map(60,100,0,0,255) =  102
map(61,100,0,0,255) =  99
map(62,100,0,0,255) =  96
map(63,100,0,0,255) =  94
map(64,100,0,0,255) =  91
map(65,100,0,0,255) =  89
map(66,100,0,0,255) =  86
map(67,100,0,0,255) =  84
map(68,100,0,0,255) =  81
map(69,100,0,0,255) =  79
map(70,100,0,0,255) =  76
map(71,100,0,0,255) =  73
map(72,100,0,0,255) =  71
map(73,100,0,0,255) =  68
map(74,100,0,0,255) =  66
map(75,100,0,0,255) =  63
map(76,100,0,0,255) =  61
map(77,100,0,0,255) =  58
map(78,100,0,0,255) =  56
map(79,100,0,0,255) =  53
map(80,100,0,0,255) =  51
map(81,100,0,0,255) =  48
map(82,100,0,0,255) =  45
map(83,100,0,0,255) =  43
map(84,100,0,0,255) =  40
map(85,100,0,0,255) =  38
map(86,100,0,0,255) =  35
map(87,100,0,0,255) =  33
map(88,100,0,0,255) =  30
map(89,100,0,0,255) =  28
map(90,100,0,0,255) =  25
map(91,100,0,0,255) =  22
map(92,100,0,0,255) =  20
map(93,100,0,0,255) =  17
map(94,100,0,0,255) =  15
map(95,100,0,0,255) =  12
map(96,100,0,0,255) =  10
map(97,100,0,0,255) =  7
map(98,100,0,0,255) =  5
map(99,100,0,0,255) =  2
map(100,100,0,0,255) =  0

Die Antwort ist also ganz einfach: ja.

Alternativ wäre ja auch ein einfaches "map(100-x,0,100,0,255)" gegangen.

Mario.

Hi

Wenn schon Cross-Posting, dann bitte auch darauf hinweisen, daß man diese Frage bereits 'wo anders' gestellt hat - MIT Link (in allen beteiligten Foren).

Klar muß man damit leben können, daß einem gar nicht geholfen wird, da Cross-Postings ungerne gesehen sind - überall machen sich die Leute einen Kopf, der Schnorrer nimmt sich irgendwo die Lösung mit und denkt nicht im Traum daran, 'drüben' Bescheid zu geben.

Aber Du hast ja hier bereits eine Antwort bekommen (von mir wäre Keine gekommen, davon ab) - nun troll Dich oder zeige Besserung!

In diesem Sinne

marsmaennchen:
OHH JAAA ein böser CrossPoster. Wie fürchterlich!
Nein, hat mit Ignoranz nichts zu tun, ich hoffe dann nur eine Aussage auf meine Antwort zu bekommen anstatt dämliche Kommentare oder Belehrungen.
Wenn du nicht helfen kannst, dann lass einfach die normalen Personen ran.
Ich versteh nicht das es so Leute gibt wie dich die an jedem Thread herummeckern.

Ich verstehe nicht wie Leute Hilfe von anderen wollen aber dann zuwenig Information und unschöne Antworten geben.
Grüße Uwe

Ich weiß das "Warum?"!
Darf es aber nicht sagen.