Boas,
Pessoal estou aqui com um problema tremendo ... e sendo tremendo até tenho dificuldades em o explicar ...
então é o seguinte
tenho 2 variaveis tipo
byte entrada1 = 0x4B // 0b 01001011
byte entrada2 = 0x75 // 0b 0011 0101
byte resto = 0x31 // 0b 00110001
int resultado1 = 843
int resultado2 = 369
ou seja resultado1 é 4 bits MSB de resto mais entrada
resultado2 e 4 bits de LSB mais entrada2
agora como programar isto em C para arduino ...
Fico a espera das vossas respostas
Cumprimentos
Zétretas
Tags:
Tenta:
resultado1=((resto & 0xF0)4) + entrada1;
resultado2=((resto & 0x0F)8) + entrada2;
como resto é de 8 bits pode haver perda de informação... Se acontecer tente trocar para:
resultado1=resto;
resultado1=((resultado1 & 0xF0)4) + entrada1;
resultado2=resto;
resultado2=((resultado1 & 0xF)8) + entrada1;
Ueh... o sinal de "<" colocado duas vezes não foi... Vou improvisar com aspas,ponha o menor menor no lugar...
resultado1=((resto & 0xF0) "" 4) + entrada1;
resultado2=((resto & 0x0F) "" 8) + entrada2;
resultado1=resto;
resultado1=((resultado1 & 0xF0) "" 4) + entrada1;
resultado2=resto;
resultado2=((resultado1 & 0xF) "" 8) + entrada1;
Não pega sinal de menor no Forum. Deve ser algum filtro de HTML.
Mas sobre o tópico, a ideia é juntar dois Bytes em um inteiro usando a 'linguagem" (lib. core) do Arduino, algo mais alto nível, é isso?
Se for, usa o WordCast: http://arduino.cc/en/Reference/WordCast
byte hiByte = byte_parte_alta;
byte lowByte = byte_parte_baixa;
int value = word(hiByte, lowByte);
E pra "separar" os bytes:
lowByte(value) e highByte(value)
Da uma olhada:
http://arduino.cc/en/Reference/LowByte
http://arduino.cc/en/Reference/HighByte
http://arduino.cc/en/Reference/WordCast
Boas,
antes de mais obrigada pela repostas Eduardo quanto a tua vou tentar perceber pois não percebi tudo ...
quanto a do Jonatas ... percebi as funções mas o problema é que com as funções LowByte e HighByte são para uma variável de 16 bits e a minha é de 8 bits e quero recupar os 4 bits parte alta e os 4 da parte baixa
Cumprimentos
Zétretas
Muito obrigada esta a funcionar
Ueh... o sinal de "<" colocado duas vezes não foi... Vou improvisar com ## ,ponha o menor menor no lugar...
byte entrada1 = 0x4B ;// 0b 01001011
byte entrada2 = 0x75; // 0b 0011 0101
byte resto = 0x31; // 0b 00110001
int resultado1, resultado2;
//resultado1=((resto & 0xF0) ## 4) + entrada1;
//resultado2=((resto & 0x0F) ## 8) + entrada2;
resultado1=resto;
resultado1=((resultado1 & 0xF0) ## 4) + entrada1;
resultado2=resto;
resultado2=((resultado2 & 0xF) ## 8) + entrada2;
Serial.println("\n\rResultado 1 -> \n\r");
Serial.println(resultado1);
Serial.println("\n\rResultado 2 -> \n\r");
Serial.println(resultado2);
muito inteligente a forma como resolvei o problema nunca pensaria no 0xF0
Cumprimentos
Zétretas
Esta certo, na correria não atentei a este detalhe. Mas ai o código de deslocamento do pessoal é o adequado mesmo. Fui mais pelo titulo .
Mas ja fica aí caso alguem caia aqui pelo titulo.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por