двойная задержка функций

fayvlad
Offline
Зарегистрирован: 27.03.2014
Здравствуйте, я впринципе начинающий Ардуинщик, подскажите мне, как правильно все описать. Делаю проект для себя на дачу, в будующем идей есть много что докупить и поставить на ардуино, осталось только дождатся с китая... 
К делу, есть Ардуино мини, регулятор громкости (потенциометр) для подсчета количества воды в емкости, термометр(ds18b20), экран 1602, 5 кнопок(сделал аналоговыми) , жду переходник на I2C, модуль реального времени и думаю заказать электроклапан.
Суть вопроса в том, чтобы получать значения от датчика температуры например каждые 30 сек или даже минуту, но в то же время я мог в любой момент нажать кнопку любую и перейти в меню, которое мне нужно.
Также чтобы потенциометр считывал раз там например в 10 минут.
Вот программа, пытался 3мя способами ее завести, что-то и получается, но не совсем то что надо...
#include <OneWire.h>
#include <DallasTemperature.h>//Подключаем библиотеку для работы с термометром
OneWire oneWire(2);
DallasTemperature sensors(&oneWire); //Создаем объект sensors, подключенный по OneWire
DeviceAddress tempDeviceAddress;  //переменная для хранения адреса датчика
float temp1=0; //переменная для текущего значения температуры

int button;
int Temp;
const int BUTTON_NONE    = 0;
const int BUTTON_LEFT    = 1;
const int BUTTON_SELECT  = 2;
const int BUTTON_RIGHT   = 3;
const int BUTTON_UP      = 4;
const int BUTTON_DOWN    = 5;

int getButton()
{
  int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0) 
 
  if (buttonValue < 50) {
    return BUTTON_LEFT;  
  }
  else if (buttonValue < 150) {
    return BUTTON_DOWN;
  }
  else if (buttonValue < 300){
    return BUTTON_SELECT;
  }
  else if (buttonValue < 500){
    return BUTTON_RIGHT;
  }
  else if (buttonValue < 800){
    return BUTTON_UP;
  }
  return BUTTON_NONE;
}

int getTemp()
{
        sensors.setWaitForConversion(false);
        sensors.requestTemperatures();
        sensors.setWaitForConversion(true);
        sensors.getAddress(tempDeviceAddress, 0);
        temp1=sensors.getTempC(tempDeviceAddress);
        return temp1;
}

void setup() {
  sensors.begin();
  sensors.getAddress(tempDeviceAddress, 0);
  sensors.setResolution(12);
  Serial.begin(9600);
}

void loop()
{
    button = getButton();
    
    if (button == BUTTON_NONE)
    {
      for(int i=0; i<=30;i++)
      {
         button = getButton();
        if (button !=BUTTON_NONE)
        {break;}
        else{       
        delay(1000);
      }
      }
      Temp = getTemp();
        Serial.println(Temp);
    }
    
  switch (button)
  {
    case BUTTON_RIGHT: 
       Serial.println("BUTTON: RIGHT");
       break;
    case BUTTON_LEFT:
       Serial.println("BUTTON: LEFT");
       break;
    case BUTTON_UP:
       Serial.println("BUTTON: UP");
       break;
    case BUTTON_DOWN:
       Serial.println("BUTTON: DOWN");
       break;
    case BUTTON_SELECT:
       Serial.println("BUTTON: SELECT");
       break;
  }
}

 

 

Snubist
Offline
Зарегистрирован: 18.02.2013