Как мне сбросить переменную обратно в 0 на Arduino? - PullRequest
0 голосов
/ 10 мая 2019

Я хочу сбросить мою переменную обратно к ее первоначальному значению, когда она используется в новой функции.

Я создал счетчик, с которым взаимодействует пользователь, чтобы ответить на ряд вопросов.Я хочу, чтобы счетчик обнулялся после каждого вопроса.Это работает так, как пользователь вводит число, соответствующее его ответу, и нажимает кнопку, которая должна запустить следующий вопрос, а также счетчик, который должен быть установлен в 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){}

1 Ответ

0 голосов
/ 11 мая 2019

У вас есть глобальная переменная и локальная переменная, которые называются 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

...