Сейчас делаю проект в котором управляю шаговым двигателем через фоторезистор.Подскажите как сделать сделать что бы шаговый двигатель сделал действие один раз до изменения условия в функции loop?
Объявить переменную, например, так: Код (C++): bool flag = false; void loop() { if(!flag) { // действие ещё не выполнялось flag = true; // тут выполняем действие } if(условие) { // надо сбросить флаг flag = false; } }
Код (C++): #include <Stepper.h> const int stepsPerRevolution = 512; Stepper myStepper(stepsPerRevolution,8 ,10 ,9 ,11 ); int PhotosensorPin = A5; //Указываем пин к которому подклюен Фоторезистор unsigned int sensorValue = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); myStepper.setSpeed(20); } void loop() { // put your main code here, to run repeatedly: sensorValue = analogRead(PhotosensorPin); int stoporok = sensorValue ; if (sensorValue>500)myStepper.step(stepsPerRevolution); if(sensorValue<500)myStepper.step(-stepsPerRevolution); Serial.print(sensorValue, DEC); //Вывод данных с фоторезистора (0-1024) Serial.println(""); delay(500); } вот мой скетч
Код (C++): #include <Stepper.h> const int stepsPerRevolution = 512; Stepper myStepper(stepsPerRevolution,8 ,10 ,9 ,11 ); int PhotosensorPin = A5; //Указываем пин к которому подклюен Фоторезистор unsigned int sensorValue = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); myStepper.setSpeed(20); } void loop() { // put your main code here, to run repeatedly: sensorValue = analogRead(PhotosensorPin); if (sensorValue>500)myStepper.step(stepsPerRevolution); if(sensorValue<500)myStepper.step(-stepsPerRevolution); Serial.print(sensorValue, DEC); //Вывод данных с фоторезистора (0-1024) Serial.println(""); delay(500); } Помогите переделать этот скетч ( мне нужно что бы первое условие выполнилось один раз и могло выполнится один раз только поле того когда выполнится второе условие)
Код (C++): #include <Stepper.h> bool flag = false; const int stepsPerRevolution = 512; Stepper myStepper(stepsPerRevolution,8 ,10 ,9 ,11 ); int PhotosensorPin = A5; //Указываем пин к которому подклюен Фоторезистор unsigned int sensorValue = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); myStepper.setSpeed(20); } void loop() { // put your main code here, to run repeatedly: sensorValue = analogRead(PhotosensorPin); Serial.print(sensorValue, DEC); //Вывод данных с фоторезистора (0-1024) if(!flag){ if(sensorValue>500) {myStepper.step(stepsPerRevolution); flag = true; } if(sensorValue<500) {myStepper.step(-stepsPerRevolution); flag = false;} } delay(500); } Поможете найти ошибку?
Если выполнится условие if(sensorValue>500), то станет flag = true и в следующих вызовах loop() проверки выполняться не будут - т. к. проверки стоят внутри if(!flag), а ее резeльтат - false.