двойная задержка функций
- Войдите на сайт для отправки комментариев
Чт, 19/06/2014 - 02:04
Здравствуйте, я впринципе начинающий Ардуинщик, подскажите мне, как правильно все описать. Делаю проект для себя на дачу, в будующем идей есть много что докупить и поставить на ардуино, осталось только дождатся с китая...
К делу, есть Ардуино мини, регулятор громкости (потенциометр) для подсчета количества воды в емкости, термометр(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;
}
}
Почитай
http://arduino.ru/tutorials/BlinkWithoutDelay