风生水起 发表于 2017-7-5 14:52:45

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

本帖最后由 风生水起 于 2017-7-6 18:28 编辑

感谢各位

解决方案

代码


unsigned char item = {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);
      }
}




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




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


下面是当时的问题





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


这是切换器说明书的协议




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


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

Ansifa 发表于 2017-7-5 16:48:08

void setup()
{
        Serial.begin(9600);
        unsigned char data = {0x63, 0x69, 0x72, 0x20, 0x32, 0x32, 0x0D, 0x0A};
}



void loop()
{
        delay(5000);
        for (int i = 0; i < 8; i++)
        {
                Serial.write(data);
        }
}

风生水起 发表于 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

非常感谢,报错了,我没查到怎么改才好,能再帮帮忙么

Ansifa 发表于 2017-7-5 19:03:34

unsigned char data = {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);
        }
}

Ansifa 发表于 2017-7-5 19:04:18

:Q被你的案例带入坑了。。。声明应该在文件头

风生水起 发表于 2017-7-5 19:15:36

Ansifa 发表于 2017-7-5 19:04
被你的案例带入坑了。。。声明应该在文件头

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

风生水起 发表于 2017-7-5 19:19:48



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

Ansifa 发表于 2017-7-5 19:19:50

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


:lol我就是看到写了一半方便才回的

风生水起 发表于 2017-7-5 19:25:03

Ansifa 发表于 2017-7-5 19:19
我就是看到写了一半方便才回的

继续求助:$

sailor0908 发表于 2017-7-6 12:20:06

本帖最后由 sailor0908 于 2017-7-6 13:34 编辑

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


unsigned char item = {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位
标准是这样的

风生水起 发表于 2017-7-6 15:52:41

sailor0908 发表于 2017-7-6 12:20
协议要求的是16bit的命令,你发送的事8位,应该是不行的.改一点,用下面的笨办法试试.




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


unsigned char item = {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);
      }
}
页: [1] 2
查看完整版本: 【已解决】 串口发16进制命令