Как мне изменить переменную после каждых 2-3 циклов?

#c #arduino

#c #arduino

Вопрос:

У меня есть цикл, который постоянно продолжается. Я хотел бы изменять переменную после каждых 2-3 циклов. Прямо сейчас, после запуска цикла, переменная всегда будет оставаться неизменной (если я ее не изменяю) или она меняется каждый раз. Мой код:

 #include "VernierLib.h"
VernierLib Vernier;
#define led 13
float sensorReading;
void setup() {
  Serial.begin(9600);
  Serial.println(Vernier.sensorName());
  Vernier.autoID();
}
void loop() { 
  float base_temp = Serial.parseFloat();
  sensorReading = Vernier.readSensor();
  Serial.print(sensorReading);
  Serial.print(" ");
  Serial.println(Vernier.sensorUnits());
  Serial.print("Želena temperatura: ");
  Serial.println(base_temp);
  if (base_temp > sensorReading) {
    digitalWrite(led, HIGH);
  } else {
    digitalWrite(led, LOW);
  }
  delay(2300);
}
 

Комментарии:

1. Вы, вероятно, имеете в виду «переменную» вместо константы. Константа никогда не может быть изменена. Переменная должна быть объявлена вне цикла, чтобы ее можно было использовать после цикла. Также ваш код имеет 2 функции. Один называется «цикл», но нет никаких указаний на то, когда вызывается функция.

2. Вопрос и ответ здесь: arduino.stackexchange.com/questions/80475 /… . Пожалуйста, не перепостируйте.

Ответ №1:

Используйте какую-нибудь переменную отслеживания, чтобы проверить, сколько итераций вы сделали до сих пор.

Что-то вроде

 #include "VernierLib.h"
VernierLib Vernier;
#define led 13
float sensorReading;
int tracker=0;
int numLoops=3; //You can change this as you need to
void setup() {
  Serial.begin(9600);
  Serial.println(Vernier.sensorName());
  Vernier.autoID();
}
void loop() { 
  tracker  ;
  if(tracker<=numLoops){
    //Put variable change code here
  }
  float base_temp = Serial.parseFloat();
  sensorReading = Vernier.readSensor();
  Serial.print(sensorReading);
  Serial.print(" ");
  Serial.println(Vernier.sensorUnits());
  Serial.print("Želena temperatura: ");
  Serial.println(base_temp);
  if (base_temp > sensorReading) {
    digitalWrite(led, HIGH);
  } else {
    digitalWrite(led, LOW);
  }
  delay(2300);
}
 

Ответ №2:

Я немного расширю ответ Spyre. Вы можете сделать это, проверив по модулю (остаток после деления) следующим образом:

 // Index hold information about "how many times did the loop run already"
int index = 0;
// NumLoop says "after how many 'loops' do I want to do the action"
// The word 'const' indicates, that this value can never be changed
const int numLoops = 3;

void loop() {
  if(  index % numLoops == 0) {
    //Put what you want there
  }
}
 

Что делает код? Вы объявляете переменную index , изначально равную 0, а константу numLoops — количеству циклов, после которых должен быть вызван код.

Внутри цикла вы проверяете с if() помощью оператора результат операции по модулю, если index % numLoops он равен 0 => if(index % numLoops == 0) . А также вы должны увеличивать index на 1 каждый цикл. Краткое обозначение для index = index 1 is index .

index % numLoops выдать эти результаты (операция вызывается по модулю):

 index   % numLoops = result             
0       %    3     =  0
1       %    3     =  1
2       %    3     =  2
3       %    3     =  0
4       %    3     =  1
5       %    3     =  2
6       %    3     =  0
etc.