Pages: [1] 2   Go Down
Author Topic: "analogRead" invertiert in "analogWrite" ausgeben  (Read 2309 times)
0 Members and 1 Guest are viewing this topic.
Bremen, Germany
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin,

ich komme mit meinem beschränken C-Wissen nicht weiter smiley-red

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.  smiley-confuse

Ich bin für jede Hilfe dankbar!

Gruß
Dennis
Logged

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3499
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Etwa so:

Code:
analogWrite(3, 255 - analogRead(A0)/4);

Das ist genau Dein Ansatz. Was kriegst Du nicht auf die Reihe?
Logged

Check out my experiments http://blog.blinkenlight.net

Bremen, Germany
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Etwa so:

Code:
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 smiley-sweat 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 Offline
Faraday Member
**
Karma: 24
Posts: 3499
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Check out my experiments http://blog.blinkenlight.net

Bremen, Germany
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

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  smiley

Gruß
Dennis
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 92
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Faraday Member
**
Karma: 24
Posts: 3499
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Check out my experiments http://blog.blinkenlight.net

Bremen, Germany
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-grin Ich frage nach Alternativlösungen, weil sie unter Umständen auch andere Herangehensweisen aufzeigen oder mir, wie in diesem Beispiel, neue Funktionen zeigen  smiley

Gruß und besten Dank!

Dennis
Logged

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3499
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

OK, dann habe ich noch was für Dich:

Code:
analogWrite(3, 255 - (analogRead(A0)>>2));

Und jetzt die Preisfrage: ist das besser oder schlechter? Warum?
Die zweite Frage ist die spannende Frage smiley-wink
Logged

Check out my experiments http://blog.blinkenlight.net

Bremen, Germany
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

OK, dann habe ich noch was für Dich:

Code:
analogWrite(3, 255 - (analogRead(A0)>>2));

Und jetzt die Preisfrage: ist das besser oder schlechter? Warum?
Die zweite Frage ist die spannende Frage smiley-wink

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  smiley-roll
Logged

0
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3499
20 LEDs are enough
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dann such mal mit Google weiter. Du bist noch beim leichten Teil der Frage smiley-wink
Logged

Check out my experiments http://blog.blinkenlight.net

Bremen, Germany
Offline Offline
Jr. Member
**
Karma: 0
Posts: 74
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ich komme nicht weiter smiley-mad
Logged

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Udo, Dir gefallen die Schiebeoperationen. smiley-wink smiley-wink smiley-wink
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 Offline
God Member
*****
Karma: 3
Posts: 773
A Coder's Tale
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Oder
Code:
analogWrite(3, 0xFF ^ analogRead(A0)>>2);

oder
Code:
analogWrite(3, 0xFF & ~analogRead(A0)>>2);

smiley
Logged

Munich/Germany
Offline Offline
God Member
*****
Karma: 11
Posts: 643
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn Ihr so weitermacht springt Dennis aus dem Kellerfenster  smiley-lol
Logged

_______
Manfred

Pages: [1] 2   Go Up
Jump to: