2013-11-16 5 views
1

Я пытался создать контроллер последовательного двигателя от ATtiny 85. У меня есть настройка как подчиненный. Он получает символы от одного байта за один раз и загружает их в массив символов для синтаксического анализа.Объединение символов из массива символов в одно целое

Проблема, с которой я столкнулась, не может найти способ объединить их, а не добавлять значения.

rxChrData = TinyWireS.receive(); 
rxString[rxIndex] = char(rxChrData); 
rxIndex++; 
if (rxChrData == ':'){ 
      //rxString 2-3 each holds the value 9. 
      //The lines below print "27" on the serial line. 
      n = int(rxString[2]+rxString[3]+rxString[4]); 
      Serial.println(n); 
      rxIndex = 0; 
     } 

Значение п является 27, и мне нужно, чтобы это было 999.

Я попытался преобразовать его в строку, конкатенации, а затем обратно в целое число. Не повезло. Я также пробовал несколько других неумелых работ без везения.

ответ

3

Как это

n = 100*rxString[2]+10*rxString[3]+rxString[4]; 

или, может быть, это

n = rxString[2]+10*rxString[3]+100*rxString[4]; 
+0

Doh! Спасибо :) –

0

Другой вариант: использование strtol():

#include <cstdlib> 

n = strtol(rxString+2, NULL, 10); 
0

для более общего подхода ...

if (rxChardata == ':') { 
    // Consume the ':' 
    rxCharData = TinyWireS.receive(); 
    int n = 0; 
    while (isdigit(rxCharData)) { 
     n = n * 10 + (rxCharData - '0'); 
     rcCharData = TinyWireS.receive(); 
    } 
    Serial.println(n); 
} 

Но вам нужно будет проверить, что происходит, когда вы вызываете TinyWireS.receive(), и цифр больше нет ... он возвращает '\ 0'? В этом случае вышеуказанное будет работать.

Смежные вопросы