Pessoal, boa tarde! estou com dificuldades em entender o que acontece aqui no meu código.
Eu estou recebendo uma SMS por um módulo GSM, e enviando para o serial monitor.
O SMS é basicamente esse: "#vermelho45amarelo11verde37". Cada número (45, 11 e 37) vai ser utilizado como delay, para acender uma fase de um semáforo.
O problema está quando vou multiplicar esses números por 1000 para fazer o delay. O retorno que eu tenho são caracteres estranhos. Mas os números que entram na formula da conta aparecem da maneira correta.
Alguem pode me ajudar por favor???
//
// Inicio do código
//
Tags:
Caio, Geralmente na linguagem C o tipo de variável int utilizado no seu código nas variáveis vm, am e vd suportam valores de -32768 a 32767 ou seja considerando que vm1 = 45 e vm2 =0 a conta seria (10*45 + 0)*1000 = 450000, este valor está muito além da capacidade de um int. No padrão C ANSI , o int suporta 2 bytes (16 bits) então 2^16 = 65536 = 0 a 65535 para inteiro sem sinal (unsigned int) e -32768 a 32767 para inteiro com sinal (int). Isto também depende do sistema operacional, compilador ou arquitetura do processador.
Enfim, neste caso você poderá utilizar o tipo long ou long int que possui uma maior capacidade (4 bytes) de armazenamento.
Abraço JP.
Joao, muito obrigado pela resposta.
Imagino que o long int possa ajudar nesse caso.
Mas, quando a variavel vm1 neste caso vale 4, e vm2 vale 5 (verificados pelo serial monitor).
Quando se faz a conta "int vm = (10*vm1 + vm2)*1000" vm é igual a 45000, e esta dentro da capacidade do tipo int.
Caio boa tarde,
O valor 45000 também está fora do int pois, o intervalo de um tipo int de 2 bytes é -32768 a 32767.
Como você está usando a variável para um delay e no meu entendimento não precisa de valores negativos, sugiro o unsigned int caso o valor deste delay fique entre 0 e 65535. Acima disto, e de acordo com sua necessidade, pode ser utilizado o tipo long int ou unsigned long int.
Sim sim!
Vou testar isso assim que possível, mas imagino que resolva o problema!
Cara, muito obrigado mesmo! Estava tão preocupado com coisas mais complexas no projeto que detalhes pequenos passam sem perceber!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por