首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino如何让人们从串行监视器输入数字并捕获这个数字并将其分配给一个变量

Arduino如何让人们从串行监视器输入数字并捕获这个数字并将其分配给一个变量
EN

Stack Overflow用户
提问于 2020-08-16 06:27:31
回答 1查看 263关注 0票数 0

下面是链接,这样你们就可以编辑代码/arduino并在这里试用它:DekYA2zOBAmrX-fSEpjp10qO9cC2Jzeoo

基本上,我希望人们将时间输入到串行监视器中,并将其分配给“长间隔”变量。我该怎么做?Arduino图像:数字夏尔玻璃

Arduino代码:(我试着做,但它似乎不能工作,它总是只打开所有的灯,当我按下按钮,所有的灯都会点亮一个又一个,在间隔是0,所以我假设它还没有分配?)

代码语言:javascript
复制
const int switchPin = 8;
unsigned long previousTime = 0;
int switchState = 0;
int prevSwitchState = 0;
int led = 2;
long interval =0;
void setup() {
  Serial.begin(9600); 
    delay(2000);  
 
    Serial.println("Input time for alarm in seconds");

 for(int x = 2;x<8;x++){
 pinMode(x, OUTPUT);
 }
 pinMode(switchPin, INPUT);
}
void loop(){
 
  if(Serial.available()){

int val = Serial.parseInt(); //read int or parseFloat for ..float...

Serial.println(val);
long interval =val;
   }
 unsigned long currentTime = millis();
 if(currentTime - previousTime > interval) {
 previousTime = currentTime;
digitalWrite(led, HIGH);
 led++;
 if(led == 7){
 }
 }
 switchState = digitalRead(switchPin);
 if(switchState != prevSwitchState){
 for(int x = 2;x<8;x++){
 digitalWrite(x, LOW);
 }
 led = 2;
 previousTime = currentTime;
 }
 prevSwitchState = switchState;
   
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-16 14:34:50

您应该使用Serial.readString()函数从Serial monitor读取数据,然后将数据传递给atol(const char *)

atol接受const char *并返回long,因此必须使用String.c_str()String转换为char *

使用此代码

代码语言:javascript
复制
#define DEFAULT_INTERVAL 1000

const int switchPin = 8;
unsigned long previousTime = 0;
int switchState = 0;
int prevSwitchState = 0;
int led = 2;
long interval =0;

void setup() {
    Serial.begin(9600); 
    delay(2000);  
 
    Serial.println("Input time for alarm in seconds");

    for(int x = 2;x<8;x++){
        pinMode(x, OUTPUT);
    }
     
    pinMode(switchPin, INPUT);
}

void loop() {

    static long interval = DEFAULT_INTERVAL;
 
    if(Serial.available()){
        String SerialData = Serial.readString();
        interval = atol(SerialData.c_str());

        Serial.println(interval);

    }
    
    unsigned long currentTime = millis();
    if(currentTime - previousTime > interval) {
        previousTime = currentTime;
        digitalWrite(led, HIGH);
        led++;
    
        if(led == 7){
    
        }
    }
    
    switchState = digitalRead(switchPin);
    if(switchState != prevSwitchState) {
        for(int x = 2;x<8;x++)
            digitalWrite(x, LOW);
        
        led = 2;
        previousTime = currentTime;
    }
    
    prevSwitchState = switchState;
   
}

如果来自Serial Monitor atol 的输入不是数字,则atol将返回 0**.您可能需要编写一些代码来处理这个问题**

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63433820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档