Close

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.
Aktuálně je na stránce zobrazen 1 příspěvek (celkem z 1)
  • Autor
    Příspěvky
  • #6452
    pedrous
    Úč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.html

    Nyní 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 11

    int 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 5

    int 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ýstup

    lcd.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();

    }

Aktuálně je na stránce zobrazen 1 příspěvek (celkem z 1)
  • Pro reakci na toto téma se musíte přihlásit.