Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.03.2014, 22:33   #1
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от kirex Посмотреть сообщение
Смысл вот в чём:
Иногда, особенно когда на улице пассмурно, необходимо включить свет например на час, для того чтобы поменять воду или покормить рыб.
Немного не понятно зачем при такой постановке задачи плавное включение.

Ну если без delay, тогда Таймер -например один из вариантов тут http://robocraft.ru/blog/arduino/614.html

ЗЫ
Чет я далеко ушел -тут вычитал что CyberLib может и на меге работать http://compcar.ru/forum/showthread.p...=1#post100619? пост 67 Тогда лучше с неё таймеры взять и код гораздо улучшить

Последний раз редактировалось Bulatovor; 30.03.2014 в 22:45.
Bulatovor вне форума   Ответить с цитированием
Старый 30.03.2014, 22:36   #2
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от Bulatovor Посмотреть сообщение
Немного не понятно зачем при такой постановке задачи плавное включение.
Чтобы рыбы не пугались.
У меня дискусы очень пугливые.
kirex вне форума   Ответить с цитированием
Старый 30.03.2014, 22:40   #3
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от Bulatovor Посмотреть сообщение
Ну если без delay, тогда Таймер -например один из вариантов тут http://robocraft.ru/blog/arduino/614.html
Это для меня полный лес.
kirex вне форума   Ответить с цитированием
Старый 29.03.2014, 10:05   #4
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Акваконтроллер

А примеры работают? чтоб проверить аппаратную часть
например вот такой
PHP код:
//Sample using LiquidCrystal library
#include <LiquidCrystal.h>

/*******************************************************

This program will test the LCD panel and the buttons
Mark Bramwell, July 2010

********************************************************/

// select the pins used on the LCD panel
LiquidCrystal lcd(894567);

// define some values used by the panel and buttons
int lcd_key     0;
int adc_key_in  0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// read the buttons
int read_LCD_buttons()
{
 
adc_key_in analogRead(0);      // read the value from the sensor 
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
 // we add approx 50 to those values and check to see if we are close
 
if (adc_key_in 1000) return btnNONE// We make this the 1st option for speed reasons since it will be the most likely result
 // For V1.1 us this threshold
 
if (adc_key_in 50)   return btnRIGHT;  
 if (
adc_key_in 250)  return btnUP
 if (
adc_key_in 450)  return btnDOWN
 if (
adc_key_in 650)  return btnLEFT
 if (
adc_key_in 850)  return btnSELECT;  

 
// For V1.0 comment the other threshold and use the one below:
/*
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
*/


 
return btnNONE;  // when all others fail, return this...
}

void setup()
{
 
lcd.begin(162);              // start the library
 
lcd.setCursor(0,0);
 
lcd.print("Push the buttons"); // print a simple message
}
 
void loop()
{
 
lcd.setCursor(9,1);            // move cursor to second line "1" and 9 spaces over
 
lcd.print(millis()/1000);      // display seconds elapsed since power-up


 
lcd.setCursor(0,1);            // move to the begining of the second line
 
lcd_key read_LCD_buttons();  // read the buttons

 
switch (lcd_key)               // depending on which button was pushed, we perform an action
 
{
   case 
btnRIGHT:
     {
     
lcd.print("RIGHT ");
     break;
     }
   case 
btnLEFT:
     {
     
lcd.print("LEFT   ");
     break;
     }
   case 
btnUP:
     {
     
lcd.print("UP    ");
     break;
     }
   case 
btnDOWN:
     {
     
lcd.print("DOWN  ");
     break;
     }
   case 
btnSELECT:
     {
     
lcd.print("SELECT");
     break;
     }
     case 
btnNONE:
     {
     
lcd.print("NONE  ");
     break;
     }
 }


Bulatovor вне форума   Ответить с цитированием
Старый 29.03.2014, 11:14   #5
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от Bulatovor Посмотреть сообщение
А примеры работают? чтоб проверить аппаратную часть
например вот такой
PHP код:
//Sample using LiquidCrystal library
#include <LiquidCrystal.h>

/*******************************************************

This program will test the LCD panel and the buttons
Mark Bramwell, July 2010

********************************************************/

// select the pins used on the LCD panel
LiquidCrystal lcd(894567);

// define some values used by the panel and buttons
int lcd_key     0;
int adc_key_in  0;
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5

// read the buttons
int read_LCD_buttons()
{
 
adc_key_in analogRead(0);      // read the value from the sensor 
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741
 // we add approx 50 to those values and check to see if we are close
 
if (adc_key_in 1000) return btnNONE// We make this the 1st option for speed reasons since it will be the most likely result
 // For V1.1 us this threshold
 
if (adc_key_in 50)   return btnRIGHT;  
 if (
adc_key_in 250)  return btnUP
 if (
adc_key_in 450)  return btnDOWN
 if (
adc_key_in 650)  return btnLEFT
 if (
adc_key_in 850)  return btnSELECT;  

 
// For V1.0 comment the other threshold and use the one below:
/*
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
*/


 
return btnNONE;  // when all others fail, return this...
}

void setup()
{
 
lcd.begin(162);              // start the library
 
lcd.setCursor(0,0);
 
lcd.print("Push the buttons"); // print a simple message
}
 
void loop()
{
 
lcd.setCursor(9,1);            // move cursor to second line "1" and 9 spaces over
 
lcd.print(millis()/1000);      // display seconds elapsed since power-up


 
lcd.setCursor(0,1);            // move to the begining of the second line
 
lcd_key read_LCD_buttons();  // read the buttons

 
switch (lcd_key)               // depending on which button was pushed, we perform an action
 
{
   case 
btnRIGHT:
     {
     
lcd.print("RIGHT ");
     break;
     }
   case 
btnLEFT:
     {
     
lcd.print("LEFT   ");
     break;
     }
   case 
btnUP:
     {
     
lcd.print("UP    ");
     break;
     }
   case 
btnDOWN:
     {
     
lcd.print("DOWN  ");
     break;
     }
   case 
btnSELECT:
     {
     
lcd.print("SELECT");
     break;
     }
     case 
btnNONE:
     {
     
lcd.print("NONE  ");
     break;
     }
 }


Да этот пример работает без проблем.
kirex вне форума   Ответить с цитированием
Старый 29.03.2014, 12:21   #6
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Акваконтроллер

теперь в этом примере добавь, кроме вывода на экран, управление реле -пока только кнопками без температурного датчика -сам сможешь? Так дополняя и проверяя скетч и составим программу.
С портом умеешь работать(Serial.print)? -для отладки очень помогает вывод отладочных сообщений
У меня просто нет такого железа, поэтому будем так потихонбку составлять программу -заодно и в програмировании разберешься

Последний раз редактировалось Bulatovor; 29.03.2014 в 12:25.
Bulatovor вне форума   Ответить с цитированием
Старый 29.03.2014, 13:05   #7
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от Bulatovor Посмотреть сообщение
теперь в этом примере добавь, кроме вывода на экран, управление реле -пока только кнопками без температурного датчика -сам сможешь? Так дополняя и проверяя скетч и составим программу.
С портом умеешь работать(Serial.print)? -для отладки очень помогает вывод отладочных сообщений
У меня просто нет такого железа, поэтому будем так потихонбку составлять программу -заодно и в програмировании разберешься
Вот так кнопкой RIGHT выключается, а кнопкой LEFT включается.

Код HTML:
#include <LiquidCrystal.h> 

/******************************************************* 

This program will test the LCD panel and the buttons 
Mark Bramwell, July 2010 

********************************************************/ 

// select the pins used on the LCD panel 
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 

int Relay_Off = HIGH;
int Relay_On = LOW;

// define some values used by the panel and buttons 
int lcd_key     = 0; 
int adc_key_in  = 0; 
#define btnRIGHT  0 
#define btnUP     1 
#define btnDOWN   2 
#define btnLEFT   3 
#define btnSELECT 4 
#define btnNONE   5 

// read the buttons 
int read_LCD_buttons() 
{ 
 adc_key_in = analogRead(0);      // read the value from the sensor  
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741 
 // we add approx 50 to those values and check to see if we are close 
 if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result 
 // For V1.1 us this threshold 
 if (adc_key_in < 50)   return btnRIGHT;   
 if (adc_key_in < 250)  return btnUP;  
 if (adc_key_in < 450)  return btnDOWN;  
 if (adc_key_in < 650)  return btnLEFT;  
 if (adc_key_in < 850)  return btnSELECT;   

 // For V1.0 comment the other threshold and use the one below: 
/* 
 if (adc_key_in < 50)   return btnRIGHT;   
 if (adc_key_in < 195)  return btnUP;  
 if (adc_key_in < 380)  return btnDOWN;  
 if (adc_key_in < 555)  return btnLEFT;  
 if (adc_key_in < 790)  return btnSELECT;    
*/ 


 return btnNONE;  // when all others fail, return this... 
} 

void setup() 
{ 
  pinMode(41, OUTPUT);
  lcd.begin(16, 2);              // start the library 
 lcd.setCursor(0,0); 
 lcd.print("Push the buttons"); // print a simple message 
} 
  
void loop() 
{ 
 lcd.setCursor(13,1);            // move cursor to second line "1" and 9 spaces over 
 lcd.print(millis()/1000);      // display seconds elapsed since power-up 


 lcd.setCursor(0,1);            // move to the begining of the second line 
 lcd_key = read_LCD_buttons();  // read the buttons 

 switch (lcd_key)               // depending on which button was pushed, we perform an action 
 { 
   case btnRIGHT: 
     { 
     digitalWrite(41, Relay_Off); 
  lcd.setCursor(7, 1);
  lcd.print("H2-Off");   
     break; 
     } 
   case btnLEFT: 
     { 
     digitalWrite(41, Relay_On); 
  lcd.setCursor(7, 1);
  lcd.print("H2-On ");
     break; 
     } 
   case btnUP: 
     { 
     lcd.print("UP    "); 
     break; 
     } 
   case btnDOWN: 
     { 
     lcd.print("DOWN  "); 
     break; 
     } 
   case btnSELECT: 
     { 
     lcd.print("SELECT"); 
     break; 
     } 
     case btnNONE: 
     { 
     lcd.print("NONE  "); 
     break; 
     } 
 } 

}
kirex вне форума   Ответить с цитированием
Старый 29.03.2014, 14:02   #8
Bulatovor
Senior Member
 
Регистрация: 20.01.2013
Адрес: Уфа
Сообщений: 444
Вес репутации: 799
Bulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond reputeBulatovor has a reputation beyond repute
По умолчанию Re: Акваконтроллер

Замечательно, теперь на кнопку Select добавь изменение флага(типа как в моем примере - изменение значения переменной по вкусу)с ручного режима на автоматический, следующим этапом будет добавление датчика температуры
Bulatovor вне форума   Ответить с цитированием
Старый 29.03.2014, 14:30   #9
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от Bulatovor Посмотреть сообщение
Замечательно, теперь на кнопку Select добавь изменение флага(типа как в моем примере - изменение значения переменной по вкусу)с ручного режима на автоматический, следующим этапом будет добавление датчика температуры
Спасибо за помощь.
Попробую сделать, только ближе к вечеру.
Сейчас нужно уехать, обещал детям в парк.
До вечера.
kirex вне форума   Ответить с цитированием
Старый 30.03.2014, 02:18   #10
kirex
Member
 
Регистрация: 24.03.2014
Сообщений: 38
Вес репутации: 0
kirex is an unknown quantity at this point
По умолчанию Re: Акваконтроллер

Цитата:
Сообщение от Bulatovor Посмотреть сообщение
Замечательно, теперь на кнопку Select добавь изменение флага(типа как в моем примере - изменение значения переменной по вкусу)с ручного режима на автоматический, следующим этапом будет добавление датчика температуры
Сделал вот так:
Код HTML:
#include <LiquidCrystal.h> 

/******************************************************* 

This program will test the LCD panel and the buttons 
Mark Bramwell, July 2010 

********************************************************/ 

// select the pins used on the LCD panel 
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); 

int Relay_Off = HIGH;
int Relay_On = LOW;
int reg=0;// вводим флаг для автоматического (при значении-0) или ручного регулирования -1

// define some values used by the panel and buttons 
int lcd_key     = 0; 
int adc_key_in  = 0; 
#define btnRIGHT  0 
#define btnUP     1 
#define btnDOWN   2 
#define btnLEFT   3 
#define btnSELECT 4 
#define btnNONE   5 

// read the buttons 
int read_LCD_buttons() 
{ 
 adc_key_in = analogRead(0);      // read the value from the sensor  
 // my buttons when read are centered at these valies: 0, 144, 329, 504, 741 
 // we add approx 50 to those values and check to see if we are close 
 if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result 
 // For V1.1 us this threshold 
 if (adc_key_in < 50)   return btnRIGHT;   
 if (adc_key_in < 250)  return btnUP;  
 if (adc_key_in < 450)  return btnDOWN;  
 if (adc_key_in < 650)  return btnLEFT;  
 if (adc_key_in < 850)  return btnSELECT;   

 // For V1.0 comment the other threshold and use the one below: 
/* 
 if (adc_key_in < 50)   return btnRIGHT;   
 if (adc_key_in < 195)  return btnUP;  
 if (adc_key_in < 380)  return btnDOWN;  
 if (adc_key_in < 555)  return btnLEFT;  
 if (adc_key_in < 790)  return btnSELECT;    
*/ 


 return btnNONE;  // when all others fail, return this... 
} 

void setup() 
{ 
  pinMode(41, OUTPUT);
  lcd.begin(16, 2);              // start the library 
 lcd.setCursor(0,0); 
 lcd.print("Push the buttons"); // print a simple message 
} 
  
void loop() 
{ 
 lcd.setCursor(0,1);            // move to the begining of the second line 
 lcd_key = read_LCD_buttons();  // read the buttons 

 switch (lcd_key)               // depending on which button was pushed, we perform an action 
 { 
   case btnRIGHT: 
     { 
     digitalWrite(41, Relay_Off); 
  lcd.setCursor(7, 1);
  lcd.print("H2-Off");   
     break; 
     } 
   case btnLEFT: 
     { 
     digitalWrite(41, Relay_On); 
  lcd.setCursor(7, 1);
  lcd.print("H2-On ");
     break; 
     } 
   case btnUP: 
     { 
     lcd.print("UP    "); 
     break; 
     } 
   case btnDOWN: 
     { 
     lcd.print("DOWN  "); 
     break; 
     } 
   case btnSELECT: 
     { 
     if(reg==1)
   {reg=0;
  lcd.setCursor(13, 1);
  lcd.print("Aut");}
  else 
   {reg=1;
  lcd.setCursor(13, 1);
  lcd.print("Man");}
     break; 
     } 
     case btnNONE: 
     { 
     lcd.print("NONE  "); 
     break; 
     } 
 } 

}
kirex вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 06:27. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика