Go Down

### Topic: lvalue required as left operand of assignment SOLVED! (Read 374 times)previous topic - next topic

#### agmue

#15
##### Apr 15, 2018, 06:31 pmLast Edit: Apr 15, 2018, 06:37 pm by agmue
Wenn man in Deinem Programm ein paar Dinge ändert, kommt tatsächlich PWM raus. Die Zeitspanne beträgt 408 ms, weshalb eine LED für uns Menschen eher als blinkend wahrgenommen wird, Dimmen müßte schneller sein.

Also PWM ist es, aber Dimmen eher nicht.

Code: [Select]
`const byte sensorPin = A0;   // select the input pin for the potentiometerunsigned int sensorValue;    // variable to store the value coming from the sensorconst byte dimled = 8;       // pin led to dimeunsigned int a;              // hilfsvariable berechnungunsigned int b;              // prozentualer wert von senorValue (100% = 50)unsigned int dauer;void setup(){  Serial.begin(9600);  // declare the ledPin as an OUTPUT:  pinMode(dimled, OUTPUT);}void loop(){  // read the value from the sensor:  sensorValue = analogRead(sensorPin);  a = sensorValue * 10;  b = (100 / 50) * a;     // prozent Helligkeit  dauer = (b / 100) * 2;  Serial.print("sensorValue: "); Serial.print(sensorValue);  Serial.print("\ta: "); Serial.print(a);  Serial.print("\tb: "); Serial.print(b);  Serial.print("\tdauer: "); Serial.print(dauer);  Serial.println();  digitalWrite(dimled, HIGH);  // stop the program for <sensorValue> milliseconds:  delay(dauer);  // turn the ledPin off:  digitalWrite(dimled, LOW);  // stop the program for for <sensorValue> milliseconds:  delay(1023 * 2 / 10 * 2 - dauer);}`

Mit delayMicroseconds kommst Du näher an Dein Ziel, nur Serial geht dann nicht mehr, weil zu langsam:

Code: [Select]
`const byte sensorPin = A0;   // select the input pin for the potentiometerunsigned int sensorValue;    // variable to store the value coming from the sensorconst byte dimled = 8;       // pin led to dimeunsigned int a;              // hilfsvariable berechnungunsigned int b;              // prozentualer wert von senorValue (100% = 50)unsigned int dauer;void setup(){  // declare the ledPin as an OUTPUT:  pinMode(dimled, OUTPUT);}void loop(){  // read the value from the sensor:  sensorValue = analogRead(sensorPin);  a = sensorValue * 10;  b = (100 / 50) * a;     // prozent Helligkeit  dauer = (b / 100) * 2;  digitalWrite(dimled, HIGH);  // stop the program for <sensorValue> milliseconds:  delayMicroseconds(dauer);  // turn the ledPin off:  digitalWrite(dimled, LOW);  // stop the program for for <sensorValue> milliseconds:  delayMicroseconds(1023 * 2 / 10 * 2 - dauer);}`
Ob Deine Berechnungen zum Kommentar passen, habe ich mir nicht angesehen

#### titoardo

#16
##### Apr 16, 2018, 03:03 pm
Danke agume. Mit deiner Hilfe habe ich es geschafft, dass das Programm auch das tut was es soll.

Problem nur. Ein Dimmen ist so nicht möglich.. nur blinken. Es scheint mir, dass die benötigte Frequenz nicht erreicht werden kann.

Kann mir da wer etwas zu erklären?

Viele Grüße

#### agmue

#17
##### Apr 16, 2018, 03:57 pm
Es scheint mir, dass die benötigte Frequenz nicht erreicht werden kann.
Richtig, der µC ist dafür zu langsam.

Weil die Entwickler das wußten, haben sie einigen Ausgängen im Zusammenspiel mit Timern die spezielle Möglichkeit für PWM mitgegeben. Mit analogWrite (analog ist irreführend) kannst Du an diesen Ausgängen ein PWM-Signal erzeugen.

Go Up