15706| 3
|
[求助] Arduino UNO USB口通信的疑问 |
拿703N做小车玩,涉及到无线路由器通过USB口与Arduino UNO通信的问题 网上的兄弟都说的很简单,插上路由器,看到/dev/ttyACM0 就可以通信了,我是怎么都搞不通 后来,简化环境,把Arduino UNO的0,1串口通过CH340(USB转串口)线连接到电脑,电脑识别为USB-SERIALCH340(COM10)再把Arduino UNO通过USB线直接连接到电脑,电脑识别为 Arduino UNO (COM3) 然后在Arduino板子上写了个小代码,即读取串口数据,再转发回串口 void setup() { Serial.begin(9600); } int incomingByte = 0; // 用于存储从串口读到的数据 void loop() { // 只在收到数据时发送数据 if (Serial.available() > 0) { // 读取传入的字节 incomingByte = Serial.read(); //用两种方式往串口送数据,以免有非可见字符 Serial.println(incomingByte, DEC); Serial.write(incomingByte); Serial.println(); } } 然后,实验: 1.只连接UNO的0,1串口,USB接移动电源供电,打开串口调试助手,选择COM10 发送数据,立马接收到程序回传的数据 2.不接UNO的01串口,将UNO通过USB连接电脑,打开串口调试助手,选择COM3 发送数据,没有接收到程序回传的数据 3.UNO的USB连接电脑,并且板子的0,1口也通过USB-TTL板子连接到电脑,电脑上开了两个串口调试助手,一个连接com3,一个连接com10 结果就是: com3(连接Arduino板RX TX端口的) 发送数据,在com3 和 com10上都能收到程序回传的数据 com10(Arduino板通过USB连接电脑的)发送数据,在com3和com10上都没有回传数据 我昨天特地看了UNO的电路图,知道328P就一对RX,TX,引出来之后都是一分为二,其中一对直通板载的0,1口,另外一对,连接板载的一个USB-TTL芯片(ATMEGA16U2),转换成USB接口形式 所以USB接口其实就是板载0,1口的RX,TX经过了USB-TTL芯片转换的结果,两者是通的 (手上的是DFRduino的板子,也是这个芯片无误) 猜测,板载的USB-TTL芯片(ATMEGA16U2)是不是对内部传出的数据不做动作直接外传,而对外部传入的数据有识别呢?? 但是板子下载程序都是正常的,说明USB口应该是没问题的,不知道问题出在哪里?? 有没有兄弟可以指点下迷津 |
-stark 发表于 2016-12-1 14:43 非常感谢亲的热情而详细的回复,万分感谢 今天特地又重新做了一次实验,已经可以了,USB口自己发送,程序回传,USB口自己可以接收数据 昨天我做实验时,错误的地方在于UNO板的0,1号口一直连接着USB-TTL板子(即使它没有插入电脑),而今天是把UNO板子上的线清空,不接任何东西,只用USB连接电脑,用串口调试助手打开USB的虚拟串口,发送数据,程序回传,成功了 确实是因为0,1口连接着USB-TTL的板子对UNO本身的USB串口产生了影响 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed