Arduino. Моя проблема в том, что когда условие больше 900,00, цикл продолжится и один раз выполнит приведенный ниже код.
Я хочу остановить цикл, и когда он снова прочтет значение «Больше 900,00», он снова выполнит задачу.
Мне нужно состояние. Когда оно вернется к значению более 900,00, приведенный ниже код выполнит задачу, а затем остановится. И когда он снова достигнет состояния, он снова выполнит код и остановится.. Пожалуйста, помогите мне
void loop(){
float reading = analogRead(LIGHTSENSORPIN); //Чтение уровня освещенности
float square_ratio = reading / 1023.0; //Получаем процент от максимального значения (1023)
square_ratio = pow(square_ratio, 2.0); //Квадрат, чтобы сделать ответ более очевидным
analogWrite(LEDPIN, 255.0 * square_ratio); //Регулируем яркость светодиода относительно
analogWrite(LED_BUILTIN, 255.0 * square_ratio); //Регулируем яркость светодиода относительно
Serial.println(reading); //Отображение показаний на последовательном мониторе
if(reading >= 900.00){
digitalWrite(smDirectionPin, LOW); //Записывает направление на вывод DIR EasyDriver. (НИЗКИЙ – против часовой стрелки).
/*Turns the motor fast 1600 steps*/
for (int i = 0; i < 400; i++){
digitalWrite(smStepPin, HIGH);
delayMicroseconds(700);
digitalWrite(smStepPin, LOW);
delayMicroseconds(700);
}
}
delay(1000);
}
@kervy hipona, 👍0
Обсуждение1 ответ
Лучший ответ:
setup(){ ....
......
}
float old_reading=0;
loop() {
float reading = analogRead(LIGHTSENSORPIN); //Чтение уровня освещенности
// ... делать это всегда (возможно, пусто)
// в вашем коде это светится и печатает светодиод
if ((old_reading<=900) && (reading>900)) {
// ... делаем это только один раз, когда чтение превышает 900
// в вашем коде он управляет двигателем
}
old_reading=reading;
// ... делаем это всегда, но после специальной части (возможно, пустой)
// в вашем коде это просто задержка
}
- Итак, в начале
old_reading
равен нулю, но будучи объявленным внеloop
, он сохраняет свое значение между различными запускамиloop
. if (условие)
не выполняется, так какчтение
меньше 900 (если оно начинается с более 900, см. следующую часть)- конец с
old_reading=reading;
делаетold_reading
последним известным значениемreading
- когда значение
reading
превышает 900 в первый раз, значениеold_reading
становится меньше или равно 900 (так как это было последнее значениеreading
) прежде чем он пересек отметку 900 .
- чтобы
if (условие)
было истинным и вы начали двигать двигатель
- чтобы
- затем (в конце) вы устанавливаете
old_reading=reading;
иold_reading
также больше 900
- затем (в конце) вы устанавливаете
- пока
чтение
остается более 900 в следующих циклах,old_reading
делает это, и поэтомуif (условие)
не срабатывает -(old_reading<=900)
неверно
- пока
- когда
чтение
падает до 900 или ниже,if(condition)
также не срабатывает, но после этогоold_reading=reading;
делаетold_reading
меньше или равным 900
- когда
- и так мы снова в начале, пропуская часть после
if(condition)
до тех пор, покачтение
не станет больше 900 (затем мы запускаем двигатель, устанавливаемold_reading
до чего-то большего, чем 900, и мы уже были здесь и знаем, как это работает :)
Спасибо, сэр Гилхад... я ценю ваше время и усилия, потраченные на это... продолжайте помогать другим, @kervy hipona
:) Это просто базовое программирование (даже не об Arduino) - вам действительно следует прочитать больше статей/книг о программировании, прочитать примеры и более короткие программы и попытаться понять это самостоятельно - это даст гораздо больше понимания. Предлагаю прочитать arduino.cc и/или другие сайты об arduino и о программировании для начинающих. Действительно окупается в долгосрочной перспективе :), @gilhad
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Вам также необходимо сохранить старое чтение. Затем измените
if
наif(oldReading<900.00 and read>=900.00)
, @Gerbenкак мне сохранить старое чтение??, @kervy hipona
Пожалуйста, разместите свой код вместо изображения., @Gerben
Сэр, можете ли вы изменить мой код, чтобы сделать это?, @kervy hipona
кто-нибудь может помочь?? пожалуйста.., @kervy hipona
как я могу сохранить старое показание??
первая строка вloop()
сохраняет показание.... вторая строка что-то сделала с этим чтением и сохранила результат, @jsotola