Go Down

Topic: PWM Prozentwert Ausgabe über serial klappt nicht.... (Read 762 times) previous topic - next topic

currymuetze

Hallo,
möchte gerne, wenn sich der PWM Wert verändert, diesen als % ausgeben. Leider kommt immer nur 0 an.
Code: [Select]
float prozent[5];
.
.
.
default:
    analogWrite(stripePin[loop], i[loop]);
    prozent[loop] == i[loop]/256*100;
.
.
.
if (millis() - timemillis > 1000) {
  timemillis = millis();
  getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  Serial.print(hour, DEC);
  Serial.print(":");
  Serial.print(minute, DEC);
  Serial.print(":");
  Serial.print(second, DEC);
  Serial.print("  ");
  Serial.print(dayOfMonth, DEC);
  Serial.print("."); 
  Serial.print(month, DEC);
  Serial.print(".");
  Serial.print(year, DEC);
  Serial.print("  Tag:");
  Serial.print(dayOfWeek, DEC);
  Serial.print("  LED1: ");
  Serial.print(prozent[0], 0);
  Serial.print(" % |");
  Serial.print("  LED2: ");
  Serial.print(prozent[1], 0);
  Serial.print(" % |");
  Serial.print("  LED3: ");
  Serial.print(prozent[2], 0);
  Serial.print(" % |");
  Serial.print("  LED4: ");
  Serial.print(prozent[3], 0);
  Serial.println(" %");
  }


LIegt der Fehler in der Varable? Aber habe mehreres durchprobiert. Bleibt bei 0:(
Hoffe ihr könnt helfen..:Danke

stundenblume

Hi,

auf die Schnelle eine Möglichkeit: Kommt Serial.print mit float klar? Setze doch zum testen mal prozent[loop] = 100 oder 55.5. Wenn das klappt liegt der Fehler woanders. Wenn nicht, dann deklariere mal prozent[] als integer.


Gruß

Sebastian
Libraries:
  - multiCameraIrControl [V1.6]
  -

currymuetze

ok, teste ich morgen mal aus.
welche variable nutze ich denn alternativ?
Wenn ich int nutze, diese Formel: i[loop]/256*100; aber einen Kommawert ergibt, kommt int damit klar? Streicht der einfach die Werte nach dem Komma? Oder wie geh ich dann damit um?
Ausgabe sollen eh nur ganze Zahlen sein

uwefed

Hallo currymuetze

Du schreibst:
Code: [Select]
prozent[loop] == i[loop]/256*100;


Das heißt Du vergleichst 2 Variablen aber machst keine Zuweisung.

Für die Berechnung ist vorteilhaft, daß zuerst multipliziert wird und dann dividiert. So brauchst Du auch keine float Variable.

Code: [Select]
prozent[loop] = (i[loop] *100)/255

Grüße Uwe

funkheld

i[loop]/256*100;

wenn die zahl hoch2 ist, dann shiftet man die , das geht schneller  bei 256....

uwefed

Hallo currymuetze

Jetzt habe ich die Diskusion nochmal durchgelesen.

Die PWM beim Arduino hat 256 Stufen, beginnt aber mit 0. Darum ist 100% der Wert 255.

Wenn man genu rechnen will, muß man i[loop] durch 255 teilen. Wenn man einen kleinen Fehler in kauf nimmt und akzeptiert, daß nie 100% angezeigt werden kann man aucht durch 256 teilen bzw 8 mal bitweise nach rechts shiften.

Viele Grüße Uwe 

Go Up