怎样再次读取串口数据时,让led灯自动更新亮灭时间-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2593|回复: 2

[未解决] 怎样再次读取串口数据时,让led灯自动更新亮灭时间

[复制链接]
发表于 2021-6-7 17:09 | 显示全部楼层 |阅读模式
输入A10000,让led灯亮灭10秒,输入B0led灯灭,我输入第一A10000后,在十秒亮灭时间中,在输入2000时没有反应。我想输入一次后,再次输入2000,自动更新led灯的亮灭时间。延时哪里该怎么写?int ledPin = 8;
String inputString = "";         // a String to hold incoming data
bool stringComplete = false;  // whether the string is complete

void setup() {
  // initialize serial:
  Serial.begin(9600);
  // reserve 200 bytes for the inputString:
  inputString.reserve(200);
  pinMode(ledPin,OUTPUT);
}

void loop() {
  // 换行符到达时条件为真:
  if (stringComplete) {  
    long result = 0; //程序执行秒数
    char charOne = (char) inputString.charAt(0);//返回字符串中第一个字符
    String subString = inputString.substring(1);//从截取字符串
    Serial.print("截取字符串的值:");
    Serial.println(subString);
    int timeNumber = subString.toInt();     //返回字符串中数字为整数

    if(charOne == 'A'){               //当字符等于A时闪亮
      while(result >= timeNumber ){
        long start1 = millis();  //millis();返回程序当前运行的毫秒数
        digitalWrite(ledPin,HIGH);
        delayMicroseconds(100000);
        digitalWrite(ledPin,LOW);
        delayMicroseconds(100000);
        int end1 = millis();
        long ms =  end1-start1;    //一次循环的毫秒数
        result = result + ms;    //总秒数
      }
    }else if(charOne == 'B'){       //当等于B是设置为灯灭
      digitalWrite(ledPin,LOW);
    }
    // clear the string:
    inputString = "";
    stringComplete = false;
  }else{                        //没有输入时执行
    Serial.println("当前没有输入指令!请输入:");
//    digitalWrite(ledPin,HIGH);    //led常亮
  }
}

void serialEvent() {   
  while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag so the main loop can
    // do something about it:
    if (inChar == '\n') {
      stringComplete = true;
    }

  }
}

发表于 2021-6-13 20:45 | 显示全部楼层
我为你写了一篇《串口分析字符操作符,灵活的实现自动化控制。》,Arduino String可以分析串口读取的字符是何种操作符,一共十三种。基于此我们可以更加灵活的把他们进行编组实现自动化的控制。试问:如果串口输入A1000,那么led亮1000ms,此时再输入2000,led可以再亮2000ms,随意改变了的点亮时间。如果输入B0,那么led就会熄灭。https://www.arduino.cn/thread-104455-1-1.html
 楼主| 发表于 2021-6-17 13:45 | 显示全部楼层
topdog 发表于 2021-6-13 20:45
我为你写了一篇《串口分析字符操作符,灵活的实现自动化控制。》,Arduino String可以分析串口读取的字符是 ...

十分感谢
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 04:03 , Processed in 0.074219 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表