2016-01-30 5 views
2
`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(); 

    Serial.println(brightness); 
    // set the brightness of the LED: 
    analogWrite(ledPin, brightness); 
    } 
    }` 

я попробовал код выше с моей платойArduino UNO последовательной связь

, что код принимает значение от последовательного монитора и регулирует яркость светодиода. но вместо этого светодиоды стекаются в состоянии HIGH, а яркость не меняется с входом

также значение яркости i печатает на серийном мониторе Serial.println (яркость); Он показывает некоторые символы мусора и символы, которые не читаются. Что мне делать?

ответ

0

Я думаю, проблема в том, что вы хотите отправить данные ASCII с вашего компьютера на arduino, но вы читаете только один байт. Вместо Serial.read() используйте Serial.readString() (и установите тайм-аут с Serial.setTimeout() раньше). Затем преобразуйте числовую строку в значение int с помощью atoi(). Затем проверьте, находится ли значение результата от 0 до 255 (зажмите его). Это записывает это значение на выход с использованием PWM (т. Е. С использованием analogWrite()).

Заглядывая в документации Serial класса Arduino: есть функция parseInt(), что делает волшебство :-) Здесь есть документация: https://www.arduino.cc/en/Serial/ParseInt

0

Хотя я не являюсь экспертом, я отсортировали вопрос следующим образом:

const int ledPin = 12; 

void setup() 
{ 
    Serial.begin(9600); 
    pinMode(ledPin, OUTPUT); 
} 

void loop() { 
    int brightness; 
    if (Serial.available()) { 
    analogWrite(ledPin, Serial.parseInt()); 
    } 
} 

Примечание: код не сделано мной, его твик из ранее существовавших, например, в Arduino IDE

Изменение, которое я сделал, это заменить Serial.read(); с Serial.parseInt();

Также имейте в виду, что светодиоды имеют определенное прямое напряжение, поэтому в зависимости от используемого вами светодиода и общей настройки яркость меняется. В моем случае наименьшее значение составляло 140, используя лампу соломенной шляпе 0,5 Вт.

Удачи вам!

Смежные вопросы