Serial.parseInt() - как прочесть БОЛЬШОЕ число?

saer
Offline
Зарегистрирован: 12.05.2014

Добрый!

Пытаюсь извлечь из порта ЧИСЛО:

void setup() {
  Serial.begin(9600);
}
void loop() 
  {
    if (Serial.available() > 0) {
    int inc = Serial.parseInt();
    Serial.println(inc);
   }
  }

Если шлю в порт 12345 - читает 12345, показывает 12345, что верно

Если шлю 123456 - читает -7616 (!!!)

Ломается все на числе 32768, т.е, все, что менее - читается верно. Все, что более - читается криво.

Кто сталкивался с такой проблемой?

как прочесть 13 разрядное число?

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ты почитай про переменную int, какие числа могут в ней хранится

подсказка long

+ опоздал))

saer
Offline
Зарегистрирован: 12.05.2014

АААА!!!!!

точно!!!!

Спасибо! Пол-дня копошился!

dkirsanov
Offline
Зарегистрирован: 14.07.2017

А что толку? Это не решает проблемы, ошибка переполнения так и будет появляться. Тут нужно считывать число побайтно и контролировать переполнение буфера. Вот только я не знаю функцию позволяющую считывать каждый байт отдельно, если кто-нибудь в курсе, то поделитесь, plz.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

а вы разделите число на 2 части : 1-e  (число)/1000 , 2-е (число)%1000. А потом пошлите последовательно в serial

dkirsanov
Offline
Зарегистрирован: 14.07.2017

А если мы вообще не знаем что собирается вводить пользователь? Например он ввлел последовательность букв и цифр. Что тогда делать, что на что делить, а? И ваше решение не верное, тут нужно считывать по-байтно, только я не знаю какой функцией это сделать

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

dkirsanov пишет:

А если мы вообще не знаем что собирается вводить пользователь? Например он ввлел последовательность букв и цифр. Что тогда делать, что на что делить, а? И ваше решение не верное, тут нужно считывать по-байтно, только я не знаю какой функцией это сделать

Вот с этого и надо и начинать. Если вы не хотите думать, то за вас думать никто не будет.

dkirsanov
Offline
Зарегистрирован: 14.07.2017

Глубокий ответ, а главное не в тему

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

dkirsanov пишет:

Глубокий ответ, а главное не в тему

Ну да. Тема: вывод большого числа ИЗ АРДУИНЫ, а вы прочитали как пользователь может ввести хрень вместо числа В АРДУИНУ. Так что перед тем как спрашивать разберитесь в темах.

dkirsanov
Offline
Зарегистрирован: 14.07.2017

Да я вообще о том как считывать по-байтно

dkirsanov
Offline
Зарегистрирован: 14.07.2017

Да я вообще о том как считывать по-байтно

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

dkirsanov пишет:

Да я вообще о том как считывать по-байтно

http://arduino.ua/ru/prog/Serial/ReadBytes

dkirsanov
Offline
Зарегистрирован: 14.07.2017

Строчка: "Функция возвращает количество байт, помещенных в буфер, либо 0 - если таковых нет." вызывает подозрения. 

Спасибо, попробую.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dkirsanov пишет:

Да я вообще о том как считывать по-байтно

Господи, ну, а Serial.read() что читает? Не байт?

И, кстати, нафига было оживлять тему двухлетней давности?

dkirsanov
Offline
Зарегистрирован: 14.07.2017

1) уже разобрался

2) в этом гугл виноват

У меня еще вопрос, а будет ли код компилироваться если под Arduino писать на С++, можно ли к программам подключать библиотеки С++?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

dkirsanov пишет:

1) уже разобрался

2) в этом гугл виноват

У меня еще вопрос, а будет ли код компилироваться если под Arduino писать на С++, можно ли к программам подключать библиотеки С++?

А это что?http://arduino.ru/forum/programmirovanie/klassy-arduino-po-qwone-dlya-chainikov

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dkirsanov пишет:

У меня еще вопрос, а будет ли код компилироваться если под Arduino писать на С++, можно ли к программам подключать библиотеки С++?

У меня тоже вопрос, даже два:

1. А сейчас Вы на чём пишете? Скажите пожалуйста, чтобы мы знали.

2. Кто запретил взять и попробовать?

dkirsanov
Offline
Зарегистрирован: 14.07.2017

1. на С++ умею писать

2. у меня пока еще нет своего Arduino

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так вот большинство из тех, кто имеет дело с Ардуино, на С++ и пишут. Так что если умеете, то Вам и флаг в руки.

Есть, конечно, люди, пишушщие на ассемблере. Так же есть странноватая секта паскалистов. Ну, а настоящие программисты, за неимением на этой платформе фортрана, пишут на брейнфаке.

Другие языки и система такая редкость и экзотика, что мы их рассматривать не будем.

Так что, Выбор у Вас есть :)

SeregaSher
Offline
Зарегистрирован: 19.09.2015

ЕвгенийП пишет:

Так вот большинство из тех, кто имеет дело с Ардуино, на С++ и пишут. Так что если умеете, то Вам и флаг в руки.

Есть, конечно, люди, пишушщие на ассемблере. Так же есть странноватая секта паскалистов. Ну, а настоящие программисты, за неимением на этой платформе фортрана, пишут на брейнфаке.

Другие языки и система такая редкость и экзотика, что мы их рассматривать не будем.

Так что, Выбор у Вас есть :)

Есть еще пишут на FBD. Ну это для новичков, которые вообще писАть не умеют... flprog.ru Программа бесплатная. Скетч составляется в виде функциональных блоков в графическом виде. Есть так же возможность делать собственные блоки на Си, для тех кто уже начинает осваивать Си.