代码
int jidianqi=8; String command= ""; void setup(){ pinMode(jidianqi, OUTPUT); digitalWrite(jidianqi,HIGH); Serial.begin(9600); } void loop(){ while(Serial.available()) // To Get up ALL Serial data { command += char(Serial.read()); delay(10); } if (command.length()>0) { if (command == "on") { digitalWrite(jidianqi, LOW); Serial.println("You've turned on the LED"); command = ""; } else if(command == "off") { digitalWrite(jidianqi, HIGH); Serial.println("You've turned off the LED"); command = ""; } else { Serial.println("Please input on or off. :)"); command = ""; } } }
不算太复杂。很简单的一个程序
打开串口程序:
继电器上就开关,开关程序了。
上面有用到的一些单片机的基础知识。至少要知道单片机的基本原理。
还好以前学过51单片机。所以还懂得一些。上面的代码是自己写出来的。
为什么要用
while(Serial.available())
是因为, 单片机里面有一个串口寄存器,具体叫什么AVR里不是很清楚,总得有一个。
在数据未被完全读取前(数据是一个比特一比特读的,具体说是8位- 一个比特 读取的。因为8位为一个ASCII码)
然后用command += char(Serial.read()); 来吧所有的读到的数据都加到command 中。
注意,一定是char型数据。command 也要预先设定为String command = "";
command 就是一个数组
每个元素都是一个字母或者标点符号。
上面的delay(10)或者是delay(2)
是考虑到单片机的读取sBuff寄存器的内容的时间,一般来说2-10ms 完全足够了,但是不能省略!!
好了我们可以用linux 下的串口工具minicom
来控制单片机了
附上几个有用的linux 查看串口的命令
dmesg | grep ttyS 已经使用的串口信息
cat /proc/tty/driver/serial 所有的串口信息
stty -F /dev/ttyS0 -a 串口的speed等信息
dmidecode | grep Port 所有端口信息
setserial /dev/ttyS0 查看串口设备ttyS0是否连接
udevinfo -a -p /sys/class/tty/ttyS0 串口ttyS0的信息
find /dev/ttyS* | wc -l 查找/dev/目录下文件中有“ttyS”的个数
还有。这里要附上一篇关于用minicom储存串口数据的介绍
http://www.2cto.com/os/201111/110568.html
############################更新日期 4月11日 2013年#############################
上面关于获取串口输入的值的方法是:
while(Serial.available()) // To Get up ALL Serial data { command += char(Serial.read()); delay(10); }
这种方法,是获取所有串口输入的值,不管是字符串,还是数字,都是当字符串看待了。这对于输入的是英文字母比较有帮助。
可是如果我们输入的直接就是整数的话,有没有方便的方法呢?
是有的,用下面的方法(从一个步进电机里面代码抽出来的。)
- void loop()
- {
- if(Serial.available())
- {
- int steps =Serial.parseInt(); //用这种方法将直接取到输入所有的值,并且是整型的
- motor.step(steps);
- }
- }