#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.