Как обновить значение переменной внутри цикла while

#c #arduino

#c #arduino

Вопрос:

Как я могу сделать так, чтобы мое SensorValue значение обновлялось автоматически? Я пытаюсь заставить SensorValue переменную обновлять саму себя, если условие SensorValue < Maxdryness или SensorValue >= Maxdryness является ложным в любое время. Я хочу иметь возможность переключать датчик влажности между сухой и влажной почвой и заставлять его автоматически включать или выключать двигатель по мере необходимости.

   if(incomingData.indexOf("Auto on")>=0) // if received command is to turn system automatic
 { 
  auto_flag = 1;
  message1 = "System is now automatic";
  send_message(message1); // Send a sms back to confirm that the motor is turned auto

  if (readSoil() >= Maxdryness)
     {
  Serial.println("Soil is good.r"); 
  digitalWrite(wetSoil, HIGH);
  digitalWrite (drySoil, LOW);
  digitalWrite(motorPin1,LOW);
  digitalWrite(motorPin2,LOW);
  delay(1000);
    }

  else
   {
  Serial.println("Low Soil Moisture detected.r");
  digitalWrite(wetSoil, LOW);
  digitalWrite (drySoil, HIGH);
  digitalWrite(motorPin1,HIGH);
  digitalWrite(motorPin2,LOW);
    }
   
  delay(1000);
  Serial.print("Soil Moisture = "); 
  Serial.println(readSoil());
  delay(1000);//take a reading every second 
   
  auto_flag = 0;
 }
 

Мой проект включает в себя отправку SMS для включения или выключения системы вручную, Motor on , Motor off но я хотел, чтобы система работала сама по себе, без необходимости вручную включать или выключать двигатель самостоятельно. Следовательно Auto on . Это авто можно отключить с помощью Auto off . Я не знаю, как заставить систему работать при включении Auto on , чтобы выключить двигатель, переключив мой датчик влажности почвы с сухой почвы на влажную почву и наоборот с влажной на сухую и включив двигатель. Если условие SensorValue равно >= Maxdryness , я хочу, чтобы оно останавливалось и включалось только тогда, когда значение равно < the Maxdryness .

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

1. Не уверен, что я понимаю, что вы имеете в виду, но, похоже, вы хотите, чтобы весь код выполнялся каким-то рекурсивным способом? если да, то как вы планируете покончить с этим? имеется в виду, какое условие завершит непрерывное / автоматическое обновление, о котором вы говорите? если нет: возможно, вы захотите уточнить свой вопрос.

2. Arduino — это не C, это C 🙂

Ответ №1:

Если SensorValue датчик находится на одном выводе, считывайте этот вывод каждый цикл или периодически!
Документация для: аналоговый PIN-код и цифровой pin-код

Из вашего кода более вероятно, что это аналоговый вывод. Из документов также не видно (я давно их не читал), что вам нужно объявить аналоговые считываемые контакты в вашем setup() блоке (пока вы делаете для цифрового вывода), поэтому получить результат должно быть так же просто, как присвоить возврат от вызова analogRead() к SensorValue

 void loop() {
    ...
    SensorValue = analogRead(PIN_NUMBER);
    ...
}
 

Возможно, вам захочется немного помассировать, чтобы линеаризовать логарифмические выходные данные, чтобы ввести значение в некоторый диапазон (0-100, а не 0-1023) и т.д. Но это будет зависеть от невыраженного кода и от значения, которое представляет вывод датчика.

Если датчик является чем-то более продвинутым, например, подключенным к шине SPI, вам потребуется выполнить дополнительную работу, но настройка будет аналогичной. Тот, кто произвел компонент, должен предоставить некоторую документацию. Arduino также предоставляет пример для некоторых общих датчиков барометрического давления, если вам нужна другая ссылка.