serial.read и serial.parseInt

egg
Offline
Зарегистрирован: 07.04.2015

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

вот кусок кода:

void loop() {

//фоторезистор и диод

  int sense = (analogRead(sensePin));
  int ledLevel = map(sense, 11, 220, 255, 0);
  analogWrite(ledPin, ledLevel);
  
//вентилятор
  int val = Serial.parseInt();
  int speedLevel = map(val, 0, 100, 0, 255);
  analogWrite(nlPin, speedLevel);
}

Проблема в том что если использую serial.parseInt фоторезистор и диод обновляются раз в секунду тоесть плавность отсутвует, если serial.read то я могу ввести только от 0 до 9. Пробывал Serial.SetTimeout(50) но тогда двигатель даже не достигает нужного значения. Возможо как то разделить?

maksim
Offline
Зарегистрирован: 12.02.2012
 

Все верно, плохо искали available().

if(Serial.available())
  int val = Serial.parseInt();
  int speedLevel = map(val, 0, 100, 0, 255);
  analogWrite(nlPin, speedLevel);
}

Так же в сериал-монироте вместо No line ending установите Newline.

 
egg
Offline
Зарегистрирован: 07.04.2015

Спасибо Вам :)

Это хорошо работает если не поступает данных на ком порт, если туда летят данные то ситуация повторяется.

И еще 1 вопрос как оставить значение не сбрасывая на 0 или как сделать чтоб он сбрасывался плавно?

maksim
Offline
Зарегистрирован: 12.02.2012

egg пишет:

Это хорошо работает если не поступает данных на ком порт, если туда летят данные то ситуация повторяется.

Прочтите сообщения #1 второе предложение.

Так же вместо Newline можно ставить какой-нибудь символ в конце отправляемого значения, например: 90s, 100s, 0s.