Offline
Jr. Member
Karma: 0
Posts: 51
|
 |
« on: February 16, 2012, 12:03:17 pm » |
Moin, ich komme mit meinem beschränken C-Wissen nicht weiter  Ich brauche eine Umkehrfunktion die den Wert aus "analogRead" invertiert in "analogWrite" ausgibt. Beispiel: ist der Eingabewert/4 = 0 soll der Ausgabewert = 255 sein ist der Eingabewert/4 = 255 soll der Ausgabewert = 0 sein ist der Eingabewert/4 = 100 soll der Ausgabewert = 155 sein ist der Eingabewert/4 = 160 soll der Ausgabewert = 95 sein ... mein Ansatz war den Eingabewert/4 von 255 abzuziehen und als Ausgabewert zu nehmen, das bekomme ich nur nicht auf die Reihe.  Ich bin für jede Hilfe dankbar! Gruß Dennis
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 16
Posts: 3196
20 LEDs are enough
|
 |
« Reply #1 on: February 16, 2012, 12:10:43 pm » |
Etwa so: analogWrite(3, 255 - analogRead(A0)/4);
Das ist genau Dein Ansatz. Was kriegst Du nicht auf die Reihe?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 51
|
 |
« Reply #2 on: February 16, 2012, 12:21:33 pm » |
Etwa so: analogWrite(3, 255 - analogRead(A0)/4);
Das ist genau Dein Ansatz. Was kriegst Du nicht auf die Reihe? Vielen Dank! Mir fehlt leider noch die Logik beim Programmieren  ich denke zu kompliziert bzw. stelle mir die Lösung zu komplex vor. Gibt es eventuell noch eine besser Variante als die Werte zu subtrahieren?
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 16
Posts: 3196
20 LEDs are enough
|
 |
« Reply #3 on: February 16, 2012, 12:26:10 pm » |
Was verstehst Du unter "besser"? Soll heißen, wenn Du willst kannst Du das auch mit "Map" http://www.arduino.cc/en/Reference/Map erledigen. Ob das besser ist kann man sehen wie man will.
|
|
|
|
« Last Edit: February 16, 2012, 12:28:09 pm by Udo Klein »
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 51
|
 |
« Reply #4 on: February 16, 2012, 12:52:26 pm » |
Mit besser meine ich effizienter. Aber map scheint ja quasi dasselbe nur anders zu machen, indem es 1023 auf 255 runterbricht. Vielen Dank auch für den Hinweis an dieser Stelle  Gruß Dennis
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 92
|
 |
« Reply #5 on: February 16, 2012, 01:05:47 pm » |
Hallo Dennis,
eine wichtige Regel beim Programmieren ist, erst dann zu optimieren, wenn du wirklich Performance-Probleme hast und nicht schon vorher.
Rudi
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 16
Posts: 3196
20 LEDs are enough
|
 |
« Reply #6 on: February 16, 2012, 01:14:39 pm » |
Dennis: Du bist ja ein Scherzkeks. Du hast ja nach anderen Lösungen für das gleiche Problem gefragt. Alle Lösungen werden diese Ergebnis erreichen sonst sind sie keine Lösungen. Ich frage mich immer noch was Du mit "besser" meinst.
Was Rudi sagt ist außerdem auch wichtig. Erst muß ein Programm funktionieren. Erst dann wird optimiert (falls das überhaupt nötig ist).
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 51
|
 |
« Reply #7 on: February 16, 2012, 01:19:50 pm » |
Ihr habt ja beide Recht, aber hätte ich nicht gefragt, wüsste ich jetzt nicht, dass es eine "map"-Funktion gibt und wofür ich sie benutzen kann  Ich frage nach Alternativlösungen, weil sie unter Umständen auch andere Herangehensweisen aufzeigen oder mir, wie in diesem Beispiel, neue Funktionen zeigen  Gruß und besten Dank! Dennis
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 16
Posts: 3196
20 LEDs are enough
|
 |
« Reply #8 on: February 16, 2012, 01:25:50 pm » |
OK, dann habe ich noch was für Dich: analogWrite(3, 255 - (analogRead(A0)>>2));
Und jetzt die Preisfrage: ist das besser oder schlechter? Warum? Die zweite Frage ist die spannende Frage 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 51
|
 |
« Reply #9 on: February 16, 2012, 01:35:43 pm » |
OK, dann habe ich noch was für Dich: analogWrite(3, 255 - (analogRead(A0)>>2));
Und jetzt die Preisfrage: ist das besser oder schlechter? Warum? Die zweite Frage ist die spannende Frage  hmm soweit ich es in der Reference verstanden habe, verschiebt die Bitshift left/right Anweisung die Position der Bits um einen definierten Wert. Keine Ahnung wozu das gut sein soll 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Faraday Member
Karma: 16
Posts: 3196
20 LEDs are enough
|
 |
« Reply #10 on: February 16, 2012, 01:36:57 pm » |
Dann such mal mit Google weiter. Du bist noch beim leichten Teil der Frage 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Jr. Member
Karma: 0
Posts: 51
|
 |
« Reply #11 on: February 16, 2012, 02:14:16 pm » |
ich komme nicht weiter 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
BZ (I)
Offline
Brattain Member
Karma: 161
Posts: 15651
+39 349 2158303
|
 |
« Reply #12 on: February 16, 2012, 03:00:37 pm » |
Udo, Dir gefallen die Schiebeoperationen.  Um die Zahl von 255 wegzuzählen könntest Du auch das 2 Kompliment machen? laemmen: 1 bit nach rechts verschieben entspricht einem Teilen durch 2. Ein Verschieben um 1 bit nach links um ein Multipliziern mit 2. 2 Bit verschieben sind dann eine Multiplication/Teilung durch 4. Grüße Uwe
|
|
|
|
« Last Edit: February 16, 2012, 03:02:27 pm by uwefed »
|
Logged
|
|
|
|
|
Weinsberg, Germany
Offline
God Member
Karma: 2
Posts: 770
A Coder's Tale
|
 |
« Reply #13 on: February 17, 2012, 02:24:08 am » |
Oder analogWrite(3, 0xFF ^ analogRead(A0)>>2);
oder analogWrite(3, 0xFF & ~analogRead(A0)>>2);

|
|
|
|
|
Logged
|
|
|
|
|
Munich/Germany
Online
God Member
Karma: 8
Posts: 557
|
 |
« Reply #14 on: February 17, 2012, 04:03:23 am » |
Wenn Ihr so weitermacht springt Dennis aus dem Kellerfenster 
|
|
|
|
|
Logged
|
_______ Manfred
|
|
|
|
|