Почему мое значение Serial Read не останется прежним
Я пытаюсь записать в последовательный порт, чтобы управлять яркостью светодиода. Когда я сначала ввожу значение, такое как «50» или «100», светодиод загорается, но затем значение «ppm» падает до «10» и просто остается там (независимо от того, что я ввел изначально). Есть идеи, почему это происходит?
int ledpin1 = 3;
int pwm = 0;
void setup() {
// инициализируем последовательную связь со скоростью 9600 бит в секунду:
Serial.begin(9600);
pinMode(ledpin1, OUTPUT);
}
// процедура цикла выполняется снова и снова навсегда:
void loop() {
// считывает ввод в последовательный монитор
if (Serial.available() > 0) {
pwm = Serial.read();
}
analogWrite(ledpin1, pwm);
Serial.print("PWM value is: ");
Serial.println(pwm);
delay(1000);
}
@stem__bar, 👍2
1 ответ
Когда вы набираете "100", вы отправляете не число 100. Вы отправляете символы "1", "0", "0" и любое другое окончание выбранной строки (CR, LF или CR). и ЛФ).
Итак, если у вас есть CR+LF для окончания строки, вы читаете числа 49, 48, 48, 13, а затем 10.
Вам нужно прочитать символы по мере их поступления и сгруппировать их в представление числа (до тех пор, пока вы не получите окончание строки), а затем преобразовать это представление в фактическое число.
- Чтение серийного номера на Arduino
- Реализация Dshot на Arduino (протокол ESC)
- Запись нескольких входов в последовательный порт с использованием цикла while
- Последовательное построение ШИМ
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
_"Вам нужно прочитать символы..., а затем преобразовать это представление в фактическое число."_ - Или отправить всего один байт значения
100
через последовательный порт, эффективно перенеся преобразование с Arduino на ПК . Что больше подходит, зависит от ситуации., @marcelm