Ef lendo e_compreendendo_os_generos_textuais_do_suporte_jornal
Lendo Um Multi-Byte Inteiro de Arduino via Serial
Transcript of 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
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 =
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