двойная задержка функций
- Войдите на сайт для отправки комментариев
Чт, 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