Я пытался создать последовательный контроллер двигателя из 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;
}
Значение n равно 27, и мне нужно, чтобы оно было 999.
Я попытался преобразовать его в строку, объединить, а затем обратно в целое число. Неудачно. Я также попытался несколько других неумелых обходных путей без удачи.
Как это
n = 100*rxString[2]+10*rxString[3]+rxString[4];
или, может быть, это
n = rxString[2]+10*rxString[3]+100*rxString[4];
Другой вариант: используйте strtol ():
#include <cstdlib>
n = strtol( rxString+2, NULL, 10 );
для более общего подхода …
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’? В этом случае выше будет работать.