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);

}

, 👍0

Обсуждение

Вам также необходимо сохранить старое чтение. Затем измените if на if(oldReading<900.00 and read>=900.00), @Gerben

как мне сохранить старое чтение??, @kervy hipona

Пожалуйста, разместите свой код вместо изображения., @Gerben

Сэр, можете ли вы изменить мой код, чтобы сделать это?, @kervy hipona

кто-нибудь может помочь?? пожалуйста.., @kervy hipona

как я могу сохранить старое показание?? первая строка в loop() сохраняет показание.... вторая строка что-то сделала с этим чтением и сохранила результат, @jsotola


1 ответ


Лучший ответ:

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