极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 30099|回复: 5

ARDUINO怎么读pc串口发送的16进制数

[复制链接]
发表于 2015-8-7 22:17:34 | 显示全部楼层 |阅读模式
int incomingByte =  0;  
int ledpin=13;//定义数字接口13  
  
void setup()  
{  
  Serial.begin(9600);//设置波特率为9600,这里要跟软件设置相一致。当接入特定设备(如:蓝牙)时,我们也要跟其他设备的波特率达到一致。  
  pinMode(ledpin,OUTPUT);//设置数字13 口为输出接口,Arduino 上我们用到的I/O 口都要进行类似这样的定义。  
}  
  
void loop()  
{  
  incomingByte=Serial.read();//读取PC 机发送给Arduino 的指令或字符,并将该指令或字符赋给
  if(incomingByte=='A5 5A 04 83 10 00 00')//判断接收到的指令或字符是否是“A5 5A  04 83 10 00 00”。  
  {//如果接收到的是“R”字符  
    digitalWrite(ledpin,HIGH);//点亮数字13 口LED。  
    delay(500);  
    digitalWrite(ledpin,LOW);//熄灭数字13 口LED  
    delay(500);  
    Serial.println("incomingByte");//显示“Hello World!”字符串  
  }}
回复

使用道具 举报

发表于 2015-8-8 05:58:56 | 显示全部楼层
先说概念:
计算机只会传输0和1,它也不知道什么是10进制,什么是16进制。发送的时候不管你发的是10进制的82,16进制的0x52,或者字符R,底层传输的都是进制的 01010010 这么一串。至于接收后怎么处理,需要自己在程序里面去判断。

按我的理解,你的实现的就是,当串口接收到字符R时,led闪一次,然后串口输出R这个字符。
下面说下你这个程序的几个问题:
1: if(incomingByte=='A5 5A 04 83 10 00 00')//判断接收到的指令或字符是否是“A5 5A  04 83 10 00 00”。   Serial.read()每次只读取一个字节,你自己定义的incomingBye也是int型的,上面这个判断实在是让人看不懂。
2:最后一句  Serial.println("incomingByte");//显示“Hello World!”字符串   你到底是要显示"incomingByte"还是“Hello World!",这种注释速度删了先。

最后,给个能用的程序做参考,根据 A5 5A  04 83 10 00 00 这一串,你要达到的目的应该不是一个R那么简单吧。
  1. int incomingByte =  0;
  2. int ledpin = 13; //定义数字接口13

  3. void setup()
  4. {
  5.   Serial.begin(9600);
  6.   pinMode(ledpin, OUTPUT);
  7. }

  8. void loop()
  9. {
  10.   if (Serial.available() > 0)
  11.   {
  12.     incomingByte = Serial.read();
  13.     //下面三句的效果是一样的,判断读到的字符是不是'R',根据自己需要选一种就行
  14. //    if (incomingByte == 82)
  15.     if(incomingByte=='R')
  16. //    if(incomingByte==0x52)
  17.     { //如果接收到的是“R”字符
  18.       digitalWrite(ledpin, HIGH); //点亮数字13 口LED。
  19.       delay(500);
  20.       digitalWrite(ledpin, LOW); //熄灭数字13 口LED
  21.       delay(500);

  22.       Serial.println("Hello World!");//显示“Hello World!”字符串,其它要显示什么自己弄
  23.     }
  24.   }
  25. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-8 07:41:30 | 显示全部楼层
大侠我这个16进制数。是串口屏返回这A5 5A 04 83 10 00 00值怎么比较他是不是这个值。是这个值LEDL亮。不是LED灭
回复 支持 反对

使用道具 举报

发表于 2015-8-8 08:51:21 | 显示全部楼层
乐乐2365 发表于 2015-8-8 07:41
大侠我这个16进制数。是串口屏返回这A5 5A 04 83 10 00 00值怎么比较他是不是这个值。是这个值LEDL亮。不是 ...

沙发层的代码已经解释得比较清楚了。
自己仔细阅读,理解
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-8 10:11:00 | 显示全部楼层
小弟愚钝举个实例
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-8 12:55:47 | 显示全部楼层
本帖最后由 乐乐2365 于 2015-8-8 12:57 编辑

int incomingByte =  0;
int ledpin = 13; //定义数字接口13

void setup()
{
  Serial.begin(9600);
  pinMode(ledpin, OUTPUT);
}

void loop()
{
  if (Serial.available() > 0)
  {
    incomingByte = Serial.read();
    //下面三句的效果是一样的,判断读到的字符是不是'R',根据自己需要选一种就行
  
    if(incomingByte==0xA5,0x5A,0x06,0x83,0x10,0x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 23:40 , Processed in 0.033807 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表