极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 42319|回复: 21

【已解决】 串口发16进制命令

[复制链接]
发表于 2017-7-5 14:52:45 | 显示全部楼层 |阅读模式
本帖最后由 风生水起 于 2017-7-6 18:28 编辑

感谢各位

解决方案

代码


[kenrobot_code]unsigned char item[16] = {0xFF,0x63, 0xFF,0x69, 0xFF,0x72, 0xFF,0x20, 0xFF,0x32, 0xFF,0x32, 0xFF,0x0D, 0xFF,0x0A};

void setup()
{
        Serial.begin(9600);
}
void loop()
{
        delay(5000);
        for(int i=0 ; i<16;i++){   
         Serial.write(item);
        }
}[/kenrobot_code]




另外,ARDUINO的板子上,不可以直接从TX RX接出串口线对设备,要有一个转换板 RS232转TTL模块2代 串口模块




------------------------------------------------------------------------------------------------------------------------------


下面是当时的问题





想用ARDUINO UNO 通过串口发送一段十六进制代码,控制一台HDMI二进一出切换器


这是切换器说明书的协议




这是用USB转串口,进行控制,测试有效


但是在ARDUINO里,怎么测试也不行了
主要是我C语言太弱
我编的代码就不往上贴啊,哪位大神能帮写段代码,感激不尽

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1 +3 收起 理由
Ansifa + 3 解决及时反馈

查看全部评分

回复

使用道具 举报

发表于 2017-7-5 16:48:08 | 显示全部楼层
void setup()
{
        Serial.begin(9600);
        unsigned char data[8] = {0x63, 0x69, 0x72, 0x20, 0x32, 0x32, 0x0D, 0x0A};
}



void loop()
{
        delay(5000);
        for (int i = 0; i < 8; i++)
        {
                Serial.write(data[i]);
        }
}
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2017-7-5 15:02:54 | 显示全部楼层
本帖最后由 风生水起 于 2017-7-5 15:04 编辑

/*
模拟输入
在0号模拟插口读取一个模拟值,并输出。
created 24 March 2006 by Tom Igoe
*/
int analogValue = 0;    // 需要保留的模拟值

void setup() {
//在9600 bps打开串行端口:
Serial.begin(9600);
}
void loop() {
// 在0号模拟输入插口读取值
analogValue = analogRead(0);
// 以多种格式输出
Serial.println(analogValue);
// 以ASCII编码十进制浮点值输出
Serial.print(analogValue, DEC);
// 以ASCII编码十进制浮点值输出
Serial.println(analogValue, HEX);
// 以ASCII编码十六进制输出
Serial.println(analogValue, OCT);
// 以ASCII编码八进制输出
Serial.println(analogValue, BIN);
// 以ASCII编码二进制输出
Serial.println(analogValue, BYTE);
// 以原始数据输出
// 在下次读取之前延迟10毫秒
delay(10);


参考这段例程,可是怎么弄串口输出的内容都对不上
主要是没基础

FF63 FF69 FF72 FF20 FF32 FF32 FF0D FF0A  这段代码 已经是16进制了?还是需要再转成16进制?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-5 15:22:29 | 显示全部楼层
volatile char item;



void setup()

{

  Serial.begin(9600);

  item = "FF63 FF69 FF72 FF20 FF32 FF32 FF0D FF0A";

}



void loop()

{

  Serial.println(item,HEX);

  delay(1000);



}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-5 18:17:37 | 显示全部楼层
非常感谢,报错了,我没查到怎么改才好,能再帮帮忙么

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2017-7-5 19:03:34 | 显示全部楼层
unsigned char data[8] = {0x63, 0x69, 0x72, 0x20, 0x32, 0x32, 0x0D, 0x0A};
void setup()
{
        Serial.begin(9600);
}
void loop()
{
        delay(5000);
        for (int i = 0; i < 8; i++)
        {
                Serial.write(data[i]);
        }
}
回复 支持 反对

使用道具 举报

发表于 2017-7-5 19:04:18 | 显示全部楼层
被你的案例带入坑了。。。声明应该在文件头
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-5 19:15:36 | 显示全部楼层
Ansifa 发表于 2017-7-5 19:04
被你的案例带入坑了。。。声明应该在文件头

原本就怕贴了我这笑话百出的程序被人笑话
不贴吧,又怕被大神认为我不动脑子,等现成的
再次感谢
这次编译通过了,但是串口输出
cir 22
我先连上设备看看,不行再请教
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-5 19:19:48 | 显示全部楼层


大神,还是不行啊,串口输出的是这样的,是不是还有问题
连上设备还是无法控制

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2017-7-5 19:19:50 | 显示全部楼层
风生水起 发表于 2017-7-5 19:15
原本就怕贴了我这笑话百出的程序被人笑话
不贴吧,又怕被大神认为我不动脑子,等现成的
再次感谢

我就是看到写了一半方便才回的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-5 19:25:03 | 显示全部楼层
Ansifa 发表于 2017-7-5 19:19
我就是看到写了一半方便才回的

继续求助
回复 支持 反对

使用道具 举报

发表于 2017-7-6 12:20:06 | 显示全部楼层
本帖最后由 sailor0908 于 2017-7-6 13:34 编辑

协议要求的是16bit的命令,你发送的事8位,应该是不行的.改一点,用下面的笨办法试试.


unsigned char item[16] = {0xFF,0x63, 0xFF,0x69, 0xFF,0x72, 0xFF,0x20, 0xFF,0x32, 0xFF,0x32, 0xFF,0x0D, 0xFF,0x0A};


for(int i=0 ; i<16;i++){   
Serial.print(item,HEX);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-6 14:48:33 | 显示全部楼层
sailor0908 发表于 2017-7-6 12:20
协议要求的是16bit的命令,你发送的事8位,应该是不行的.改一点,用下面的笨办法试试.


非常感谢您的帮助,FF63 FF69。。。
这几个16进制,把我整蒙了,但是用串口助手,直接发FF63 FF69这些,显示的也只是63,我正在排查硬件问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-6 15:04:55 | 显示全部楼层
本帖最后由 风生水起 于 2017-7-6 15:07 编辑
sailor0908 发表于 2017-7-6 12:20
协议要求的是16bit的命令,你发送的事8位,应该是不行的.改一点,用下面的笨办法试试.


设备要求的是16进制 8位
标准是这样的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-6 15:52:41 | 显示全部楼层
sailor0908 发表于 2017-7-6 12:20
协议要求的是16bit的命令,你发送的事8位,应该是不行的.改一点,用下面的笨办法试试.

按您的帮助,终于在串口助手看到一样的输出了
感谢各位


unsigned char item[16] = {0xFF,0x63, 0xFF,0x69, 0xFF,0x72, 0xFF,0x20, 0xFF,0x32, 0xFF,0x32, 0xFF,0x0D, 0xFF,0x0A};

void setup()
{
        Serial.begin(9600);
}
void loop()
{
        delay(5000);
        for(int i=0 ; i<16;i++){   
         Serial.write(item);
        }
}
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-25 20:11 , Processed in 0.045834 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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