您的位置:首页 > 产品设计 > UI/UE

Arduino 各种模块篇-继电器-利用串口命令-控制继电器

2013-04-05 16:55 525 查看
代码

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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: