乐乐2365 发表于 2015-8-7 22:17:34

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

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 5A04 83 10 00 00”。
{//如果接收到的是“R”字符
    digitalWrite(ledpin,HIGH);//点亮数字13 口LED。
    delay(500);
    digitalWrite(ledpin,LOW);//熄灭数字13 口LED
    delay(500);
    Serial.println("incomingByte");//显示“Hello World!”字符串
}}

liuxue4503 发表于 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 5A04 83 10 00 00”。   Serial.read()每次只读取一个字节,你自己定义的incomingBye也是int型的,上面这个判断实在是让人看不懂。
2:最后一句Serial.println("incomingByte");//显示“Hello World!”字符串   你到底是要显示"incomingByte"还是“Hello World!",这种注释速度删了先。

最后,给个能用的程序做参考,根据 A5 5A04 83 10 00 00 这一串,你要达到的目的应该不是一个R那么简单吧。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 == 82)
    if(incomingByte=='R')
//    if(incomingByte==0x52)
    { //如果接收到的是“R”字符
      digitalWrite(ledpin, HIGH); //点亮数字13 口LED。
      delay(500);
      digitalWrite(ledpin, LOW); //熄灭数字13 口LED
      delay(500);

      Serial.println("Hello World!");//显示“Hello World!”字符串,其它要显示什么自己弄
    }
}
}

乐乐2365 发表于 2015-8-8 07:41:30

大侠我这个16进制数。是串口屏返回这A5 5A 04 83 10 00 00值怎么比较他是不是这个值。是这个值LEDL亮。不是LED灭

maxims 发表于 2015-8-8 08:51:21

乐乐2365 发表于 2015-8-8 07:41 static/image/common/back.gif
大侠我这个16进制数。是串口屏返回这A5 5A 04 83 10 00 00值怎么比较他是不是这个值。是这个值LEDL亮。不是 ...

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

乐乐2365 发表于 2015-8-8 10:11:00

小弟愚钝举个实例

乐乐2365 发表于 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
页: [1]
查看完整版本: ARDUINO怎么读pc串口发送的16进制数