下面是链接,这样你们就可以编辑代码/arduino并在这里试用它:DekYA2zOBAmrX-fSEpjp10qO9cC2Jzeoo
基本上,我希望人们将时间输入到串行监视器中,并将其分配给“长间隔”变量。我该怎么做?Arduino图像:数字夏尔玻璃
Arduino代码:(我试着做,但它似乎不能工作,它总是只打开所有的灯,当我按下按钮,所有的灯都会点亮一个又一个,在间隔是0,所以我假设它还没有分配?)
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;
}发布于 2020-08-16 14:34:50
您应该使用Serial.readString()函数从Serial monitor读取数据,然后将数据传递给atol(const char *)。
atol接受const char *并返回long,因此必须使用String.c_str()将String转换为char *
使用此代码
#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**.您可能需要编写一些代码来处理这个问题**
https://stackoverflow.com/questions/63433820
复制相似问题