Официальный сайт компании Arduino по адресу arduino.cc
Работа с СОМ-портом
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Здравствуйте, форумчане.
Я написал (скетч вроде называется), который получает шести символьную ASCII строку (с символом окончания строки и без неё, символы от 0 до 9). Эта строка переводится в число, которое можно в последствии обрабатывать(в примере выводится в СОМ-порт). Но почему-то не все шести символьные комбинации правильно обрабатываются.
byte block[6]={B0,B0,B0,B0,B0,B0};
unsigned long blok=0;
void setup() {
Serial.begin(9600); // устанавливаем последовательное соединение
}
void loop() {
if(Serial.available() > 0){
delay(100);
block[0]=Serial.read()-48;
block[1]=Serial.read()-48;
block[2]=Serial.read()-48;
block[3]=Serial.read()-48;
block[4]=Serial.read()-48;
block[5]=Serial.read()-48;
blok=100000*block[0]+10000*block[1]+1000*block[2]+100*block[3]+10*block[4]+block[5];
block[6]=B0,B0,B0,B0,B0,B0,B0;
Serial.println(blok);}
}
Почему при отправке 357951 получаю 292415?
Потому, что 10000*block[1] - это signed int и равно не 50000, а -15536
Можно сделать так:
Но лучше воспользоваться функцией Serial.ParseInt()
Пототому что потому что мы пилоты...
blok=100000*block[0]+10000UL*block[1]+1000*block[2]+100*block[3]+10*block[4]+block[5];
А вообще что бы не изобретать такие не лепые конструкции почитайте Serial.parseInt().
Опередили )
Спасибо, tsostik, выводит что надо.
Максим, пускай МК считает. Он и так 98% времени впустую работать будет, а время в 1 секунду не критично. Но для кругозора изучу функцию.