analogwrite:parameter werkt niet
3 berichten
• Pagina 1 van 1
analogwrite:parameter werkt niet
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));
}
}
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
- Hackerstore
- Berichten: 13
- Geregistreerd: 19 Sep 2014, 07:36
Gebruik parseInt()
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
(in plaats van je aanroep naar Serial.read() )
En de laatste regel mag ook zonder de cast naar int:
cpp code
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);
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten