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

代码

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

这种方法,是获取所有串口输入的值,不管是字符串,还是数字,都是当字符串看待了。这对于输入的是英文字母比较有帮助。

可是如果我们输入的直接就是整数的话,有没有方便的方法呢?

是有的,用下面的方法(从一个步进电机里面代码抽出来的。)

  1. void loop()
  2. {
  3. if(Serial.available())
  4. {
  5. int steps =Serial.parseInt(); //用这种方法将直接取到输入所有的值,并且是整型的
  6. motor.step(steps);
  7. }
  8. }
原文地址:https://www.cnblogs.com/spaceship9/p/3000985.html