Lendo Um Multi-Byte Inteiro de Arduino via Serial

3
24/2/2014 Lendo um multi-byte inteiro de Arduino via serial http://www.ancientrade.com/lendo-um-multi-byte-inteiro-de-arduino-via-serial.html 1/3 Lendo um multi-byte inteiro de Arduino via serial Casa » Tecnologia » Arduino » Lendo um multi-byte inteiro de Arduino via serial Lendo um multi-byte inteiro de Arduino via serial CATEGORIA: ARDUINO AUTOR: PATRICK ROGER • VISTAS: 356 Atualizado 13 de Dezembro de 2011: Mescladas outro guia usando tipos de dados “União” para enviar bytes para Arduino UPDATED 8 de Dezembro de 2011: Adicionado mais explicações e algumas pequenas correções. INTRODUÇÃO Como podemos enviar bytes múltiplos inteiros do MS Visual Studio C++ ou outros programas externos para Serial.read() do Arduino que lê dados um byte por vez? Sem o código adequado sobre os lados de envio e recebimento, podemos perder dados durante o processo de transmissão. Neste guia, vou apresentar duas soluções comuns. A primeira solução usa operadores booleanos para enviar inteiros de 2 bytes, e a segunda solução usa o tipo de dados de União para enviar inteiros de multi-byte. Eu tenho certeza que há soluções melhores lá fora, mas isso começa o trabalho feito. E como sempre, a entrada dos leitores é muito apreciada. SOLUÇÃO eu: enviar inteiros de 2 bytes do C++ para o Arduino usando operadores booleanos Eu precisava enviar X, Y tela coordenadas do meu PC para Arduino. Mas Arduino lê entrada serial de dados um byte por vez. Um único byte pode conter um valor máximo de 255, enquanto minha webcam tem uma resolução horizontal de 320. Obviamente, nós não pode caber 320, ou qualquer valor acima de 255 em um byte. Então eu preciso encontrar um maneira de enviar o número 320 usando um inteiro de 2 bytes do MS Visual C n/a para Arduino. E no lado do Arduino eu tenho que ser capaz de ler esses dois bytes e remontá-los em um inteiro de 2 bytes do Arduino para ser capaz de usar o número 320 no meu esboço de Arduino. O segmento de código abaixo tem um inteiro curto MS Visual C++, em seguida, divide em byte menos significativo (LSB) e byte mais significativo (MSB). Os dois bytes são extraídos usando um e máscara e shift right operador. No lado do Arduino, vou ler dois as dois bytes separadamente através de Serial.read() e, em seguida, usando a função word() irá remontar um 2-byte inteiro de Arduino. AMOSTRAS DE CÓDIGO = CÓDIGO + + PARA ENVIAR ============ Declarações: não assinado curto somenumber; / / 2-bytes em MS Visual C n/a sem assinatura char LSB; / / byte 1 sem assinatura char MSB; / / byte 1 Segmento de código: / /, Obviamente, nós não podemos enviar 320 para Arduino como um único byte desde 1 byte pode conter um valor máximo de 255 somenumber = 320; / * Leia o byte menos significativo * / LSB = somenumber & 0xff; / * Leia o byte mais significativo * / MSB = (somenumber [[: GT:]] [[: GT:]] 8) & 0xff; / * Agora podemos enviar os dois bytes MSB e LSB separadamente a Arduino de via serial * / Publicidade Artigos relacionados: Obter o status através do monitor serial Android G1 Serial Arduino robô Arduino computador controle A interface de seu arduino com um programa c# Leitura de etiquetas RFID com um Arduino AVR/Arduino RFID Reader com UART código em c E-mail de leitura com Arduino e escudo de onda Arduino multi-modo lâmpada com interruptor de toque suave Leitura Digital paquímetros com um Arduino / USB Detecção de rosto e rastreamento com Arduino e OpenCV Informação do usuário Artigos mais acessados Autores especialistas Orientações Política de Privacidade Sobre Termos de Uso CASA VIVER FOTOGRAFIA LEDS ÁUDIO RÁDIO JOGOS DE VÍDEO GUITARRA

Transcript of Lendo Um Multi-Byte Inteiro de Arduino via Serial

Page 1: Lendo Um Multi-Byte Inteiro de Arduino via Serial

24/2/2014 Lendo um multi-byte inteiro de Arduino via serial

http://www.ancientrade.com/lendo-um-multi-byte-inteiro-de-arduino-via-serial.html 1/3

Lendo um multi-byte inteiro de Arduino via serial

Casa » Tecnologia » Arduino » Lendo um multi-byte inteiro de Arduino via serial

Lendo um multi-byte inteiro de Arduino via serial

CATEGORIA : ARDUINO • AUTOR: PATRICK ROGER • V I STAS : 356

Atualizado 13 de Dezembro de 2011: Mescladas outro guia usando tipos de dados “União”

para enviar bytes para Arduino

UPDATED 8 de Dezembro de 2011: Adicionado mais explicações e algumas pequenas

correções.

INTRODUÇÃO

Como podemos enviar bytes múltiplos inteiros do MS Visual Studio C++ ou outros programas

externos para Serial.read() do Arduino que lê dados um byte por vez? Sem o código adequado

sobre os lados de envio e recebimento, podemos perder dados durante o processo de

transmissão.

Neste guia, vou apresentar duas soluções comuns. A primeira solução usa operadores

booleanos para enviar inteiros de 2 bytes, e a segunda solução usa o tipo de dados de União

para enviar inteiros de multi-byte.

Eu tenho certeza que há soluções melhores lá fora, mas isso começa o trabalho feito. E como

sempre, a entrada dos leitores é muito apreciada.

SOLUÇÃO eu: enviar inteiros de 2 bytes do C++ para o Arduino usando operadores booleanos

Eu precisava enviar X, Y tela coordenadas do meu PC para Arduino. Mas Arduino lê entrada

serial de dados um byte por vez. Um único byte pode conter um valor máximo de 255,

enquanto minha webcam tem uma resolução horizontal de 320. Obviamente, nós não pode

caber 320, ou qualquer valor acima de 255 em um byte.

Então eu preciso encontrar um maneira de enviar o número 320 usando um inteiro de 2 bytes

do MS Visual C n/a para Arduino. E no lado do Arduino eu tenho que ser capaz de ler esses

dois bytes e remontá-los em um inteiro de 2 bytes do Arduino para ser capaz de usar o

número 320 no meu esboço de Arduino.

O segmento de código abaixo tem um inteiro curto MS Visual C++, em seguida, divide em

byte menos significativo (LSB) e byte mais significativo (MSB). Os dois bytes são extraídos

usando um e máscara e shift right operador.

No lado do Arduino, vou ler dois as dois bytes separadamente através de Serial.read() e, em

seguida, usando a função word() irá remontar um 2-byte inteiro de Arduino.

AMOSTRAS DE CÓDIGO

= CÓDIGO + + PARA ENVIAR ============

Declarações:

não assinado curto somenumber; / / 2-bytes em MS Visual C n/a

sem assinatura char LSB; / / byte 1

sem assinatura char MSB; / / byte 1

Segmento de código:

/ /, Obviamente, nós não podemos enviar 320 para Arduino como um único byte desde 1 byte

pode conter um valor máximo de 255

somenumber = 320;

/ * Leia o byte menos significativo * /

LSB = somenumber & 0xff;

/ * Leia o byte mais significativo * /

MSB = (somenumber [[: GT:]] [[: GT:]] 8) & 0xff;

/ * Agora podemos enviar os dois bytes MSB e LSB separadamente a Arduino de via serial * /

Publicidade

Artigos relacionados:

Obter o status através do monitorserial

Android G1 Serial Arduino robô

Arduino computador controle

A interface de seu arduino comum programa c#

Leitura de etiquetas RFID com umArduino

AVR/Arduino RFID Reader comUART código em c

E-mail de leitura com Arduino eescudo de onda

Arduino multi-modo lâmpadacom interruptor de toque suave

Leitura Digital paquímetros comum Arduino / USB

Detecção de rosto e rastreamentocom Arduino e OpenCV

Informação do usuário

Artigos mais acessados

Autores especialistas

Orientações

Política de Privacidade

Sobre

Termos de Uso

CASA VIVER FOTOGRAFIA LEDS ÁUDIO RÁDIO JOGOS DE VÍDEO GUITARRA

Page 2: Lendo Um Multi-Byte Inteiro de Arduino via Serial

24/2/2014 Lendo um multi-byte inteiro de Arduino via serial

http://www.ancientrade.com/lendo-um-multi-byte-inteiro-de-arduino-via-serial.html 2/3

= CÓDIGO ARDUINO PARA RECEBIMENTO =

Declarações:

unsigned char MSB = 0; / / 1 byte no Arduino

unsigned char LSB = 0; / / 1 byte no Arduino

unsigned int MSBLSB = 0; / / 2 bytes no Arduino

Segmento de código:

se (Serial.available() [[: GT:]] = 2)

{

MSB = Serial.read();

LSB = Serial.read();

MSBLSB = palavra (MSB, LSB);

}

/ / Agora MSBLSB = 320;

SOLUÇÃO II: Enviar inteiros de multi-byte do C++ para o Arduino usando o tipo de dados de

União

A primeira solução usei operadores booleanos para bico até um 2-byte inteiro em MS Visual

C++ antes de enviar ao Arduino para remontagem como um inteiro de 2 bytes do Arduino.

Mas se eu quiser enviar 4 ou 8 inteiros de byte como inteiros longos (4 bytes) e longo longos

inteiros (8 bytes) do MS Visual C n/a para Arduino? Como podemos enviar esses inteiros de

multi-byte para um inteiro de longe do Arduino 4 bytes via serial?

Esta segunda solução, vou usar uma outra técnica comum que tira vantagem do tipo de dados

“União” em MS Visual C++. O tipo de dados de União permite declarar vários dados variáveis

de tipos diferentes, mas todas compartilham o mesmo espaço de memória. Assim se você

atribuir um valor para uma das variáveis União, você pode lê-lo de outras variáveis e de

acordo com seus tipos de dados.

Exemplo:

União big_data {

unsigned int my_num;

int some_num;

sem assinatura char my_array [4];}

my_big_data;

Se eu atribuir my_num um valor, ele automaticamente preenche some_num e my_array []. E se

eu atribuir my_array [3] um valor, ele vai mudar os valores de some_num e my_num para o

novo valor, tendo em mente o tamanho de cada variável.

Consulte a seção de referência abaixo para obter mais informações sobre sindicatos.

Digamos que você deseja enviar o número inteiro não assinado n/a , por exemplo, para

Arduino Uno de um aplicativo do MS Visual C n/a Esse número requer 4 bytes de

armazenamento em MS Visual C++. Mas como Serial.read() do Arduino pode obter um byte

por vez, isso significa que o número máximo que pode ser enviado com um byte é 255. Então,

como podemos enviar n/a para Arduino através de serial?

1) Usando dados de União tipo, podemos ler o inteiro longo não assinado de 4 bytes como

separados de 4 bytes. Nós, em seguida, enviar esses bytes 4 a Arduino via serial um de cada

vez. Temos de manter o controle de qual byte é o byte menos significativo e que é o byte mais

significativo para nós pode remontar o inteiro corretamente sem inverter a ordem de byte.

2) No lado do Arduino, a função Serial.read() irá obter 4 bytes uma vez então remontar os

quatro bytes em um inteiro longo não assinado.

AMOSTRAS DE CÓDIGO

= CÓDIGO + + PARA ENVIAR ============

Declarações:

União serial_super_data {

unsigned int int_4_bytes;

unsigned char send_byte [4];}

super_data;

Segmento de código:

/ / Atribuindo int_4_bytes um valor, nós automaticamente estão enchendo a matriz de 4

bytes é chamado [send_byte]

super_data.int_4_bytes = n/a / / isto é equivalente a n/a

/ / Não podemos enviar os quatro bytes abaixo a Arduino via serial

super_data.send_byte[0]); / / n/a Byte menos significativo)

super_data.send_byte[1]); / / n/a

super_data.send_byte[2]); / / n/a

super_data.send_byte[3]); / / n/a Byte mais significativo)

= CÓDIGO ARDUINO PARA RECEBIMENTO =

Page 3: Lendo Um Multi-Byte Inteiro de Arduino via Serial

24/2/2014 Lendo um multi-byte inteiro de Arduino via serial

http://www.ancientrade.com/lendo-um-multi-byte-inteiro-de-arduino-via-serial.html 3/3

Declarações:

União serial_super_data {

não assinado longo int_4_bytes;

unsigned char read_byte [4];

} super_data;

Segmento de código:

while(serial.Available() [[: LT:]] = 0); / / espera para entrada de dados serial

se (Serial.available() [[: GT:]] = 4) / / esperar por quatro bytes

{

for (int i = 0; eu [[: LT:]] = 4; i + +) super_data.read_byte[i]=Serial.read();

}

/ / Preenchendo a matriz [] read_byte com os 4 bytes lemos através o serial enviado para nós

a partir de código C++ acima

/ / Vamos ter atribuído automaticamente super_data.int_4_bytes o valor de n/a

CRÉDITO

Graças a muitos bons povos que compartilhou suas idéias em fóruns e blogs.

REFERÊNCIAS

Arduino inteiro

http://Arduino.CC/en/Reference/int

MS Visual Studio n/a tipo de dados de União

Direitos autorais © Faça você mesmo. Todos os direitos reservados, 2013 | 21776 artigos