zoukankan      html  css  js  c++  java
  • 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. }
  • 相关阅读:
    java学习day51--DB旅游生态系统-项目搭建
    java学习day50--Spring Boot发送邮件任务
    java学习day49--yaml语法以及注入
    java学习day49--JSON扩展(详细)
    java学习day49--JS数组遍历
    java学习day49-基于AJAX实践操作(活动模块)
    java学习day48--Ajax技术--原生
    denied: requested access to the resource is denied
    VMware虚拟机网络适配器三种网络连接模式
    MySQL8.0.19最新版本rpm包和源码包百度地址
  • 原文地址:https://www.cnblogs.com/spaceship9/p/3000985.html
Copyright © 2011-2022 走看看