сохранить число пришедшее в порт
- Войдите на сайт для отправки комментариев
Пнд, 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 мин вренени. а для меня чтоб найти и понять что к чему займет пару дней ГУГЛения
ниже код в котором я пытаюсь увидить число
int val = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { val = Serial.read(); if (val > '0' && val <= '20' ) { val = val - '0'; Serial.println(val, DEC); }}пробовал и такой код
int incomingInt = 0; void setup() { Serial.begin(9600); Serial.setTimeout(200); } void loop() { if (Serial.available() > 0) { incomingInt = Serial.parseInt(); Serial.write(incomingInt); } }прочитал вот Эту статью.
вот такой код работает только почему-то между отправленными числами 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. Но вроде не страшная плата за простоту..
void setup(){ Serial.begin(9600); Serial.setTimeout(5); } void loop(){ } void serialEvent() { int data_in = Serial.parseInt(); Serial.println(data_in); }int result = 0; // количество void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) { int com=Serial.parseInt(); // читам // выводим что прочитали Serial.print("Readed="); Serial.println(com); result = com; while(Serial.available())Serial.read();// очищаем входящий буффер Serial (перевод каретки и проч. мусор) } // выполнить действа со значением result }можно запихать parseInt в прерывание
К прерыванию serialEvent() не имеет никакого отношения, а вызывается она после функции loop(). Возможно я что то пропустил и в последних версиях IDE выше 1.0.х serialEvent() стал всетаки вызываться в прерывании.
правда будет минус - после ввода данных Loop остановится на время заданное в setTimeout. Но вроде не страшная плата за простоту..
Что бы не ждать setTimeout достаточно в конце отправляемого числа добавить любой символ, например, символ конца строки, если числа отправляются из дуиновского монитора порта, можно в правом нижнем углу выбрать New line вместо No line ending.
мужики спасибо что отозвались. буду разбираться
maksim почитал о функции serialEvent() видимо функция хорошая но пишут что она не на всех ардуино работает.
"Примечание: в настоящее время функция serialEvent() не совместима с Arduino Esplora, Leonardo и Micro." ©
Да и не нужна она.
void loop() { if (Serial.available() > 0) { int data_in = Serial.parseInt(); Serial.println(data_in); } }Да и не нужна она.
void loop() { if (Serial.available() > 0) { int data_in = Serial.parseInt(); Serial.println(data_in); } }спасибо попробую