сохранить число пришедшее в порт
- Войдите на сайт для отправки комментариев
Пнд, 11/05/2015 - 02:32
Здраствуйте любители и профессионалы.
у меня несколько нестандартный вопрос. настандартный потому что он очень простой. А я уже несколько дней как не могу понять в чем проблема.
За основу взят этот скетч который благополучно работает.
int ledPin = 13; // выбор пина для светодиода int val = 0; // переменная для хранения данных из последовательного порта void setup() { pinMode(ledPin,OUTPUT); // объявить светодиод выходом Serial.begin(9600); // подключиться к последовательному порту Serial.println("Welcome to SerialReadBlink!"); } void loop () { val = Serial.read(); // прочитать значение с последовательного порта // если величина - число из одной цифры, мигнуть светодиодом столько раз if (val > '0' && val <= '9' ) { val = val - '0'; // преобразовать из символа в число for(int i=0; i<val; i++) { Serial.println("blink!"); digitalWrite(ledPin,HIGH); delay(150); digitalWrite(ledPin, LOW); delay(150); } } }
Собственно вопрос в том ка прочитать число больше 9
пробовал менять число 9 на большее. тогда если пишу допустим 15 приходит не 15 а число 1 потом 5.
пробовал менять serial.read() на serial.available() тогда в порт ничего не приходит
пробовал менять serial.println(val) на serial.println(val, DEC)
знаю что это азы и прошу не посылать меня читать книги по ардуино я их уже читал
помогите разобраться .
для спеца обьяснить это 5 мин вренени. а для меня чтоб найти и понять что к чему займет пару дней ГУГЛения
ниже код в котором я пытаюсь увидить число
пробовал и такой код
прочитал вот Эту статью.
вот такой код работает только почему-то между отправленными числами 5 строк
char incomingBytes[2]; void setup() { Serial.begin(9600); Serial.setTimeout(40); } void loop() { if (Serial.available() > 0) { Serial.readBytes(incomingBytes, 2); Serial.println(incomingBytes); } }
тоесть допустим не так
1 первое число
23 втрое число
а так
1 первое число
//
//
// пробел 5строк не понятно откуда
//
//
23 втрое число
Тут масса решений, из самого простого -можно запихать parseInt в прерывание , правда будет минус - после ввода данных Loop остановится на время заданное в setTimeout. Но вроде не страшная плата за простоту..
можно запихать parseInt в прерывание
К прерыванию serialEvent() не имеет никакого отношения, а вызывается она после функции loop(). Возможно я что то пропустил и в последних версиях IDE выше 1.0.х serialEvent() стал всетаки вызываться в прерывании.
правда будет минус - после ввода данных Loop остановится на время заданное в setTimeout. Но вроде не страшная плата за простоту..
Что бы не ждать setTimeout достаточно в конце отправляемого числа добавить любой символ, например, символ конца строки, если числа отправляются из дуиновского монитора порта, можно в правом нижнем углу выбрать New line вместо No line ending.
мужики спасибо что отозвались. буду разбираться
maksim почитал о функции serialEvent() видимо функция хорошая но пишут что она не на всех ардуино работает.
"Примечание: в настоящее время функция serialEvent() не совместима с Arduino Esplora, Leonardo и Micro." ©
Да и не нужна она.
Да и не нужна она.
спасибо попробую