Osvětlení akvaria LED CREE
Úvodní stránka › Fórum › Vaše projekty › Arduino › Osvětlení akvaria LED CREE
- Toto téma obsahuje celkem 0 odpovědí. Do diskuze (1 diskutující) se naposledy zapojil uživatel pedrous a poslední změna proběhla před 8 roky a 5 měsíci.
-
AutorPříspěvky
-
24.3.2016 v 20:25 #6452pedrousÚčastník
Dobrý den,
Jsem nováček s arduinem i programováním. Rád bych si vytvořil stmívání a rozednívání akvária za pomoci arduina.Hw- mám tento:viz odkazy
deska:
http://www.aliexpress.com/item/UNO-R3-CH340G-ATmega328P-compatible-for-Arduino-UNO-R3/32523366108.html
LCD:
http://www.aliexpress.com/item/Free-Shipping-LCD-Keypad-Shield-of-the-LCD1602-LCD1602A-V2-0-character-LCD-input-and-output/32248479114.html
RTC:
http://www.aliexpress.com/item/Hot-Sale-DS3231-AT24C32-IIC-Precision-RTC-Real-Time-Clock-Memory-Module-For-Arduino-Free-Shipping/32286657514.htmlNyní k programu.Ten jsem dostal od známého, ale mám jiný RTC DS3231 a on měl ds1307.Při nahrávání do desky nehlásí program žádnou chybu a na display lze pohybovat v menu ,ale to je tak vše Hodiny nejdou nastavit chybu mám v programu to vím knihovny pro DS3231 jsem si stáhl ,ale neumím to správně napsat a tím to bych vás poprosil o pomoc s dotažením programu do zdárného konce. Předem moc děkuji za pomoc Petr
#include <LiquidCrystal.h>
#include <Wire.h>
#include <DS1307.h>
#include <MenuSystem.h>LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// časy využívají millis() jednotlivých částí programu
unsigned long job0 = 0; // využitá pro zobrazování času po vteřinách na displeji
unsigned long job1 = 0; // využitá pro plynulou změnu pwm led1
unsigned long job2 = 0; // využitá pro plynulou změnu pwm led2
unsigned long job3 = 0; // využitá pro plynulou změnu pwm led3
unsigned long actualMillis;int rtc[7]; // pole pro rtc
const int led1 = 3; // deklarace led1 a přidělení pinu 3
const int led2 = 9; // deklarace led1 a přidělení pinu 9
const int led3 = 11; // deklarace led1 a přidělení pinu 11int interval_pwm_led1 = 1000; // rychlost změny pwm (rychlost změny intenzity světla při zapnutí vypnutí led)
int optimal_pwm_led1 = 125; // optimální pwm led1,2,3 50%
int optimal_pwm_led2 = 125;
int optimal_pwm_led3 = 125;int actual_pwm_led1 = 0; // aktuální výkon led 1,2,3 0%
int actual_pwm_led2 = 0;
int actual_pwm_led3 = 0;const int backLight = 10; // pin podvícení lcd
int Hodina[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23}; //x
int Minuta[] = {0,5,10,15,20,25,30,35,40,45,50,55}; //y
int L1_hour,L1_min,L2_hour,L2_min;
int x=2,y=2;// Deklarace proměnných pro led1
int On_Time_Hour_led1 = 13; // hodina zapnutí led1
int On_Time_Min_led1 = 0; // minuta zapnutí led1
int Off_Time_Hour_led1 = 21; // hodina vypnutí led1
int Off_Time_Min_led1 = 0; // minuta vypnutí led1// Deklarace proměnných pro led2
int On_Time_Hour_led2 = 13; // hodina zapnutí led2
int On_Time_Min_led2 = 0; // minuta zapnutí led2
int Off_Time_Hour_led2 = 21; // hodina vypnutí led2
int Off_Time_Min_led2 = 0; // minuta vypnutí led2// Deklarace proměnných pro led3
int On_Time_Hour_led3 = 13; // hodina zapnutí led3
int On_Time_Min_led3 = 0; // minuta zapnutí led3
int Off_Time_Hour_led3 = 21; // hodina vypnutí led3
int Off_Time_Min_led3 = 0; // minuta vypnutí led3/*
char Main_Time_char[9]; // deklarace pole pro čas pro výpis na lcd
char pwm_led1[1]; // deklarace pole pro pwm_led pro výpis na lcd
char pwm_led2[1];
char pwm_led3[1];char On_Time_Char_led1[3]; // vytvoří pole pro čas zapnutí led1
char Off_Time_Char_led1[3]; // vytvoří pole pro čas vypnutí led1
*/boolean menuSelected = false; // no menu item has been selected
boolean commandReceived = false;// no command has been received (Seria, button, etc)
enum setMenuSelected_Type {
DATETIME, OTHER }; // this enum is in case we want to expand this example
setMenuSelected_Type setMenu;
byte cursorPosition;
String setString;// definování tlačítek
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 5int read_LCD_buttons(){
adc_key_in = analogRead(0);if (adc_key_in > 1000) return btnNONE;
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;
return btnNONE;}//funkce zapne podsvícení LCD, příkazem „backlightOn“
void backlightOn(){
digitalWrite(backLight, HIGH);
delay (5);}//funkce vypne podsvícení LCD, příkazem „backlightOff“
void backlightOff(){
digitalWrite(backLight, LOW);
delay (5);}MenuSystem ms;
Menu mm(„Hlavni Menu „);Menu mu1(„Nastaveni LED 1 „);
Menu mu1_mu1(„Nastav zapnuti „);
MenuItem mu1_mu1_mi1(„Nastav hodinu „);
MenuItem mu1_mu1_mi2(„Nastav minuty „);
Menu mu1_mu2(„Nastav vypnuti „);
MenuItem mu1_mu2_mi1(„Nastav hodinu „);
MenuItem mu1_mu2_mi2(„Nastav minuty „);
MenuItem mu1_mi1(„Nastav PWM 0-255“);
MenuItem mu1_mi2(„Nastav cas 0-100“);Menu mu2(„Nastaveni LED 2 „);
Menu mu2_mu1(„Nastav zapnuti „);
MenuItem mu2_mu1_mi1(„Nastav hodinu „);
MenuItem mu2_mu1_mi2(„Nastav minuty „);
Menu mu2_mu2(„Nastav vypnuti „);
MenuItem mu2_mu2_mi1(„Nastav hodinu „);
MenuItem mu2_mu2_mi2(„Nastav minuty „);
MenuItem mu2_mi1(„Nastav PWM 0-255“);
MenuItem mu2_mi2(„Nastav cas 0-100“);Menu mu3(„Nastaveni LED 3 „);
Menu mu3_mu1(„Nastav zapnuti „);
MenuItem mu3_mu1_mi1(„Nastav hodinu „);
MenuItem mu3_mu1_mi2(„Nastav minuty „);
Menu mu3_mu2(„Nastav vypnuti „);
MenuItem mu3_mu2_mi1(„Nastav hodinu „);
MenuItem mu3_mu2_mi2(„Nastav minuty „);
MenuItem mu3_mi1(„Nastav PWM 0-255“);
MenuItem mu3_mi2(„Nastav cas 0-100“);Menu mu4(„Nastaveni casu „);
MenuItem mu4_mi1(„Nastav hodinu „);
MenuItem mu4_mi2(„Nastav minuty „);// Menu callback function
void Set_Hour_On_LED_1(MenuItem* p_menu_item){/* menuSelected = true;
x=On_Time_Hour_led1;
while(menuSelected){
lcd.setCursor(0,1);
lcd.print(“ „);
lcd.print(On_Time_Hour_led1);
if (x!=On_Time_Hour_led1){
if (x>On_Time_Hour_led1){
for (;On_Time_Hour_led1<=x;On_Time_Hour_led1++){
lcd.setCursor(0,1);
lcd.print(“ „);
lcd.print(On_Time_Hour_led1);
delay(500);
}}
else if (x<On_Time_Hour_led1){
for (;On_Time_Hour_led1<=x;On_Time_Hour_led1–){
lcd.setCursor(0,1);
lcd.print(“ „);
lcd.print(On_Time_Hour_led1);
delay(500);
}
}
}
}
*/
}void Set_Min_On_LED_1(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Minutes „);
delay(1500);}void Set_Hour_Off_LED_1(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Hour „);
delay(1500);}void Set_Min_Off_LED_1(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Minutes „);
delay(1500);}void Set_PWM_LED_1(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set PWM 0-255 „);
delay(1500);}void Set_Time_0_100_LED_1(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Time 0%-100%“);
delay(1500);}//************************************************************
void Set_Hour_On_LED_2(MenuItem* p_menu_item){
lcd.setCursor(0,1);delay(1500);}
void Set_Min_On_LED_2(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Minutes „);
delay(1500);}void Set_Hour_Off_LED_2(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Hour „);
delay(1500);}void Set_Min_Off_LED_2(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Minutes „);
delay(1500);}void Set_PWM_LED_2(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set PWM 0-255 „);
delay(1500);}void Set_Time_0_100_LED_2(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Time 0%-100%“);
delay(1500);}//******************************************************************
void Set_Hour_On_LED_3(MenuItem* p_menu_item){
lcd.setCursor(0,1);delay(1500);}
void Set_Min_On_LED_3(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Minutes „);
delay(1500);}void Set_Hour_Off_LED_3(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Hour „);
delay(1500);}void Set_Min_Off_LED_3(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Minutes „);
delay(1500);}void Set_PWM_LED_3(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set PWM 0-255 „);
delay(1500);}void Set_Time_0_100_LED_3(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„Set Time 0%-100%“);
delay(1500);}//*******************************************************
void Set_Main_Hour(MenuItem* p_menu_item){
lcd.setCursor(0,1);
lcd.print(„“);
delay(1500);}void Set_Main_Min(MenuItem* p_menu_item){
lcd.setCursor(0,0);
lcd.print(„“);
delay(1500);}void displayMenu(){
lcd.clear();
lcd.setCursor(0,0);
// Display the menu
Menu const* cp_menu = ms.get_current_menu();//lcd.print(„Current menu name: „);
lcd.print(cp_menu->get_name());lcd.setCursor(0,1);
lcd.print(cp_menu->get_selected()->get_name());
}void serialHandler(){
lcd_key = read_LCD_buttons();
switch (lcd_key)
{
case btnUP:{
if(!menuSelected) {
ms.prev();
displayMenu();
}
else if(x<23)
x++;
else if(y<11)
y++;delay(200);
break;
}case btnDOWN:{
if(!menuSelected) {
ms.next();
displayMenu();
}
else if(x>0)
x–;
else if(y>0)
y–;delay(200);
break;
}case btnRIGHT:{
ms.select();
displayMenu();
delay(200);
break;
}case btnLEFT:{
ms.back();
displayMenu();
delay(200);
break;
}case btnSELECT:{
menuSelected=false;
delay(200);
break;
}}
}void setup(){
Serial.begin(9600); // zapnutí seriové komunikace s PC
pinMode(backLight, OUTPUT); // nastavení pinu ovládající podsvícení lcd, na výstup
pinMode(led1, OUTPUT); // nastavení pinu led1, na výstup
pinMode(led2, OUTPUT); // nastavení pinu led2, na výstup
pinMode(led3, OUTPUT); // nastavení pinu led2, na výstuplcd.begin(16, 2); // nstartuje displej
backlightOn();
mm.add_menu(&mu1);
// menu mu1 – nastaveni LED 1
mu1.add_menu(&mu1_mu1);
mu1_mu1.add_item(&mu1_mu1_mi1, &Set_Hour_On_LED_1);
mu1_mu1.add_item(&mu1_mu1_mi2, &Set_Min_On_LED_1);
mu1.add_menu(&mu1_mu2);
mu1_mu2.add_item(&mu1_mu2_mi1, &Set_Hour_Off_LED_1);
mu1_mu2.add_item(&mu1_mu2_mi2, &Set_Min_Off_LED_1);
mu1.add_item(&mu1_mi1, &Set_PWM_LED_1);
mu1.add_item(&mu1_mi2, &Set_Time_0_100_LED_1);//připojení menu mu1 -nastaveni LED 2
mm.add_menu(&mu2);// menu mu2 – nastaveni LED 2
mu2.add_menu(&mu1_mu1);
mu2_mu1.add_item(&mu2_mu1_mi1, &Set_Hour_On_LED_2);
mu2_mu1.add_item(&mu2_mu1_mi2, &Set_Min_On_LED_2);
mu2.add_menu(&mu2_mu2);
mu2_mu2.add_item(&mu2_mu2_mi1, &Set_Hour_Off_LED_2);
mu2_mu2.add_item(&mu2_mu2_mi2, &Set_Min_Off_LED_2);
mu2.add_item(&mu2_mi1, &Set_PWM_LED_2);
mu2.add_item(&mu2_mi2, &Set_Time_0_100_LED_2);mm.add_menu(&mu3);
// menu mu3 – nastaveni LED 3
mu3.add_menu(&mu3_mu1);
mu3_mu1.add_item(&mu3_mu1_mi1, &Set_Hour_On_LED_3);
mu3_mu1.add_item(&mu3_mu1_mi2, &Set_Min_On_LED_3);
mu3.add_menu(&mu3_mu2);
mu3_mu2.add_item(&mu3_mu2_mi1, &Set_Hour_Off_LED_3);
mu3_mu2.add_item(&mu3_mu2_mi2, &Set_Min_Off_LED_3);
mu3.add_item(&mu3_mi1, &Set_PWM_LED_3);
mu3.add_item(&mu3_mi2, &Set_Time_0_100_LED_3);mm.add_menu(&mu4);
// menu mu4 – nastavení hlavního času
mu4.add_item(&mu4_mi1, &Set_Main_Hour);
mu4.add_item(&mu4_mi2, &Set_Main_Min);ms.set_root_menu(&mm);
}
void loop(){
unsigned long actualMillis = millis();
serialHandler();}
-
AutorPříspěvky
- Pro reakci na toto téma se musíte přihlásit.