analogwrite:parameter werkt niet

Arduino specifieke Software
Berichten: 4
Geregistreerd: 25 Jul 2014, 22:12

analogwrite:parameter werkt niet

Berichtdoor louis14 » 27 Sep 2014, 13:07

Ik heb een eenvoudig programma waarbij ik een waarde (0-255) lees van de serial monitor.
Dat wordt in analogwrite gebruikt als parameter om een led te sturen.
Gelijk welke waarde ik zend geeft de led steeds dezelfde helderheid.
Analogwrite leest de variable brightness dus niet en geeft er een eigen waarde aan toe!
Als ik rechtstreeks een integer in analogwrite zet werkt het wel.
Ik heb al eens Serial.write(brightness) gedaan om te zien of de juiste waarde gelezen wordt.

const int ledPin = 9; // the pin that the LED is attached to

void setup()
{
// initialize the serial communication:
Serial.begin(9600);
// initialize the ledPin as an output:
pinMode(ledPin, OUTPUT);
}

void loop() {
byte brightness;

// check if data has been sent from the computer:
if (Serial.available()) {
// read the most recent byte (which will be from 0 to 255):
brightness = Serial.read();
// set the brightness of the LED:
analogWrite(ledPin, int(brightness));
}
}

Advertisement

Gebruikers-avatar
Berichten: 13
Geregistreerd: 19 Sep 2014, 07:36

Gebruik parseInt()

Berichtdoor Hackerstore » 27 Sep 2014, 13:39

Ik denk dat dit komt omdat je als je bijv. 1 schrijft de waarde dan "ASCII 1" is (=49, veel groter dus dan 1) en bij hogere waarden, zeg boven de 10 a 20 lijkt het alsof de LED vol brandt (het is niet helemaal linear).

Oplossing: gebruik
cpp code
brightness = Serial.parseInt();

(in plaats van je aanroep naar Serial.read() )

En de laatste regel mag ook zonder de cast naar int:
cpp code
analogWrite(ledPin, brightness);

Berichten: 4
Geregistreerd: 25 Jul 2014, 22:12

Re: analogwrite:parameter werkt niet

Berichtdoor louis14 » 27 Sep 2014, 14:00

Inderdaad uw oplossing werkt.
Bedankt!

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten