Почему мое значение 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);

}

, 👍2


1 ответ


3

Когда вы набираете "100", вы отправляете не число 100. Вы отправляете символы "1", "0", "0" и любое другое окончание выбранной строки (CR, LF или CR). и ЛФ).

Итак, если у вас есть CR+LF для окончания строки, вы читаете числа 49, 48, 48, 13, а затем 10.

Вам нужно прочитать символы по мере их поступления и сгруппировать их в представление числа (до тех пор, пока вы не получите окончание строки), а затем преобразовать это представление в фактическое число.

  • Чтение серийного номера на Arduino
,

_"Вам нужно прочитать символы..., а затем преобразовать это представление в фактическое число."_ - Или отправить всего один байт значения 100 через последовательный порт, эффективно перенеся преобразование с Arduino на ПК . Что больше подходит, зависит от ситуации., @marcelm