Pergunta

Estou tentando criar um controlador de motor serial a partir de um ATtiny 85.Eu tenho configurado como escravo.Ele recebe caracteres de um byte mestre por vez e os carrega em uma matriz de caracteres para análise.

O problema que estou tendo é que não consigo encontrar uma maneira de concatená-los em vez de somar os valores.

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;  
      }

O valor de n é 27 e preciso que seja 999.

Tentei convertê-lo em String, concatenar e depois voltar para um número inteiro.Sem sorte.Eu também tentei algumas outras soluções ineptas, sem sorte.

Foi útil?

Solução

Assim

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

ou talvez isso

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

Outras dicas

Outra opção:usestrtol():

#include <cstdlib>

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

para uma abordagem mais geral...

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

Mas você precisará verificar o que acontece quando você chama TinyWireS.receive() e não há mais dígitos...ele retorna '\0'?Nesse caso, o procedimento acima funcionará.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top