Самопроизвольное обнуление переменной

Добрый день!

Простейший пример: через COM-порт отправляю некоторое число в контроллер и он выдает значение на аналоговый выход:

#define OUT 3
int i = 125;
void setup() {
Serial.begin(9600);

}

void loop() {

if (Serial.available()) {
i = int(Serial.parseInt());
}

analogWrite(OUT,i);
Serial.print(i);
delay(1000);

}

Проблема: после первого же цикла переменная принимает значение “0“, значение выхода соответствующее.

Пока не отправил данные через COM, переменная имеет значение равное заданному по умолчанию (125), как только отправляю другое число - сначала она принимает нужное значение, но буквально в следующем цикле обнуляется.

Что я делая не так?

Как вы отправляете данные в порт?

Это смотря что вы хотите получить в итоге.
Код работает именно так, как вы его написали (ни больше, ни меньше). В чем проблема то?

неправильно отправляете данные в порт

Через монитор порта.

Почему тогда переменная сначала принимает нужное значение, а потом становится равной нулю? И как правильно отправлять?

Проблема в том, что переменная становится равной “0“ после первого цикла. А мне надо, чтобы она принимала указанное значение до следующего изменения или перезагрузки.

Разве функция “Serial.available” не должна работать только при наличии данных в com-порту?

А кто вам сказал, что у вас через КОМ-порт передается только ваше число? О том, что существует такая вещь, как служебные символы ASCII, вы что-нибудь слышали?

Судя по работы программы, у вас в мониторе порта включена настройка “завершать ввод символом перевода строки” - вот этот-то символ и сбрасывает вашу переменную в ноль.

Отсюда и два варианта решения - либо не передавать ничего, кроме чисел, либо в принимающей программе проверять, что принято, и на служебные символы не реагировать.

Такого мне никто не говорил.

Спасибо за подсказку, проблему решил.