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

Exibições: 1232

Responder esta

Respostas a este tópico

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço