在新功能中使用变量时,我想将其重置为原始值。
我创建了一个计数器,用户可以与之交互来回答一系列问题。我希望在回答每个问题后将计数器设置回0。它的工作方式是用户输入与其答案相关的数字并按下按钮,这将触发下一个问题的播放以及将计数器设置回0以输入新的答案。但是,当我这样做时,计数器不会重置,并且会从剩余的任何数字开始继续计数。
正如您在我的代码中看到的那样,我正在尝试通过counter = 0 ;, 我不是最擅长编码的人,因此对任何明显的错误都深表歉意,请为我哑巴回答!
const int analogPin = A0; // pin that the sensor is attached to
const int threshold = 1; // an arbitrary threshold level that's in the range of the analog input
const int buttonPin = 9;
int counter = 0;
int life = 81;
int analogValue;
int buttonState = 0;
void setup() {
analogValue = analogRead(A0);
pinMode(buttonPin, INPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int k;
//COUNTER
// read the value of the counter:
analogValue = analogRead(analogPin);
//Serial.println(analogValue);
// if the analog value is high enough, add to counter:
if (analogValue > 900) {
digitalWrite(ledPin, LOW);
counter ++;
} else {
digitalWrite(ledPin, LOW);
}
//Print the counter
Serial.println(counter);
//Adjust this delay to adjust counter timer
delay(1500);
buttonState = digitalRead(buttonPin);
k = smokeFunction(counter);
delay(200);
}
int smokeFunction(int counter){
int q;
//Do you smoke?
//Smoke Yes
if (buttonState == 0 && counter == 1){
life = life - 10;
Serial.println(life);
counter = 0;
diseaseFunction(counter);
}
//Smoke No
if (buttonState ==0 && counter == 2){
Serial.println(life);
counter = 0;
diseaseFunction(counter);
}
q = diseaseFunction(counter);
delay(200);
}
int diseaseFunction(int counter){}
答案 0 :(得分:0)
您有一个全局变量和一个局部变量,都称为counter
。我在这里看到可变范围的问题:
int smokeFunction(int counter)
您正在将名为counter
的全局变量传递给该函数。但是,此函数中的counter
被视为局部变量。修改此局部变量不会修改全局变量。
因此,当您在那里呼叫counter = 0
时,此本地counter
变为0
。但是,不是全局counter
。
如果只想修改全局变量,则无需将其传递给函数。您可以这样声明一个函数:(由于您的函数不返回任何内容,因此我将返回类型更改为void
。)
void smokeFunction() {
// your implementation. counter = 0; etc.
}
然后在loop()
中这样称呼它。
smokeFunction();
此页面介绍了变量范围。 https://www.tutorialspoint.com/cplusplus/cpp_variable_scope.htm