Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   252 / 854
(#) kapu48 válasza Daszkalosz hozzászólására (») Aug 13, 2016 /
 
Tovább fejleszted az eddigieket.
Pl. ’0’-re RTC helyet memóriába mented a beállításokat, és azt figyeled a loop-ban.
Ha egyezés van, bekapcsolod a relét.

Vagy tud az RTC-is megszakítást kérni, beállítót időpontban.
Mindig a következő időre programozod.

A programozás csak fantázia kérdése!

Na és valami vélemény?
A hozzászólás módosítva: Aug 13, 2016
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 13, 2016 /
 
Köszönöm!
Jó lesz igen. Működik szépen.Szép munka Csak még tanulgatnom kell,hogy önállóan is meg tudjak csinálni egy ilyen kapcsolást és tovább tudjam folytatni.
A hozzászólás módosítva: Aug 13, 2016
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 13, 2016 /
 
Bár menürendszerben gondolkodom. Mind a 4 relét külön lehetne beállítani. A kódod jó kiindulási alap.
(#) zosza18 válasza Daszkalosz hozzászólására (») Aug 13, 2016 /
 
Szia!
Engem is érdekel a dolog, ahogy van időm, megpróbálok besegíteni és kialakítani, ha netán nem lenne meg még akkora.
(#) Daszkalosz válasza zosza18 hozzászólására (») Aug 13, 2016 /
 
Köszi! Nem lesz meg,hiszen tudásom elég gyér
A terv az lenne,hogy egy 4-es kontaszettbe építeném be. Így megszünne a sok időkapcsoló óra.
Az lcd kijelzőn mondjuk a felső sorba lenne az idő kiíratva és alatta.meg menü rendszerben lenne a relénkénti beállítási lehetőség. Ha van kedved és időd akkor szerkezdheted a kódot. felrakom mindjárt a javított verziót.
A hozzászólás módosítva: Aug 13, 2016
(#) zosza18 válasza Daszkalosz hozzászólására (») Aug 13, 2016 /
 
Értem.
Rendben van. Ahogy ráérek kicsit akkor segítek szívesen.
Én se vagyok nagy agymen benne, még elég gyerekcipőbe járok, de már csináltam menüt, szóval valahogy megoldjuk.
Ami kéne még, hogy egy folyamat leírás nem ártana, hogy miként működne az áramkör.
Értem ezalatt pl.: -Bekapcsolás --> Üdvözlő szöveg
-1-es gomb --> Relék beállítása
-2-es gomb --> Idő beállítása
... és így tovább.
(#) Daszkalosz válasza zosza18 hozzászólására (») Aug 13, 2016 /
 
Lehet üdvözlő szöveg,ahogy gondolod.
egy 1x4-es membrán keypadom van,de ha nyomógombra írod az sem baj.
szerintem az 1-es gombbal belépsz a menübe a 2-es,3-as gombbal lehetne az időt állítani,a 4,es gombbal meg le okézni és vagy kilépni a menüből.De lehethogy a kijelző 4 szegmense csak relé beállítása. PL:
1- Relé // És itt lehetne az időt állítani,hogy mikor kapcsoljon be és ki
2- Relé // A többinél ugyan az lenne
3- Relé
4- Relé

Én ilyenre gondoltam,de meghalgatom,ha van más ötleted is
Persze lehetne másodpercet is állítani,mert nekem szükségem van egy 6 másodperces kapcsolásra
A hozzászólás módosítva: Aug 13, 2016
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 13, 2016 /
 
Szia!
Nos tesztelgetem. Kicsit át kellett alakítani AzRTC dolgot,mert nem mentette el az időt,de most már elmenti!
Már csak azt kéne megoldani,hogy a kívánt időbe kapcsoljon,hiszen ez a lényeg!
(#) kapu48 válasza Daszkalosz hozzászólására (») Aug 13, 2016 /
 
Én így képzelem:
  1. ...
  2.                  //relays adat structure
  3.          struct relays {
  4.           // bekapcsolás
  5.             uint16_t Rbe_year;
  6.             uint8_t Rbe_mon;
  7.             uint8_t Rbe_day;          
  8.             uint8_t Rbe_hour;
  9.             uint8_t Rbe_min;
  10.             uint8_t Rbe_sec;
  11.           // kikapcsolás
  12.             uint16_t Rki_year;
  13.             uint8_t Rki_mon;
  14.             uint8_t Rki_day;          
  15.             uint8_t Rki_hour;
  16.             uint8_t Rki_min;
  17.             uint8_t Rki_sec;            
  18.           };
  19.  
  20.       relays  relaysT[4];   // Van tömböd 4 relének
  21.      
  22.      //..............................................................setup()..............................................      
  23.         void setup(){
  24.           Serial.begin(9600);
  25.          
  26.          Wire.begin();
  27.          RTC.begin();
  28.          lcd.init();
  29.          lcd.begin(20, 4);
  30.          lcd.backlight();
  31.          
  32.         digitalWrite(REL1, HIGH);
  33.         digitalWrite(REL2, HIGH);
  34.         digitalWrite(REL3, HIGH);
  35.         digitalWrite(REL4, HIGH);
  36.          
  37.          
  38.         pinMode(REL1, OUTPUT);
  39.         pinMode(REL2, OUTPUT);
  40.         pinMode(REL3, OUTPUT);
  41.         pinMode(REL4, OUTPUT);
  42.          // Ezt csak 1* futatjukle, utánna megjegyzésbe rakjuk és ujra programozzuk
  43.          RTC.adjust(DateTime(2016, 8, 14, 10, 0, 0));
  44.  
  45.         // Valahol feltöltöd az  relay tömböt
  46.           // bekapcsolás
  47.             relaysT[0].Rbe_year = 2016;
  48.             relaysT[0].Rbe_mon = 8;
  49.             relaysT[0].Rbe_day = 14;          
  50.             relaysT[0].Rbe_hour = 10;
  51.             relaysT[0].Rbe_min = 30;
  52.             relaysT[0].Rbe_sec = 0;
  53.           // kikapcsolás
  54.             relaysT[0].Rki_year = 2016;
  55.             relaysT[0].Rki_mon = 8;
  56.             relaysT[0].Rki_day = 14;          
  57.             relaysT[0].Rki_hour = 10;
  58.             relaysT[0].Rki_min = 50;
  59.             relaysT[0].Rki_sec = 0;  
  60.              
  61.          
  62.  
  63.         }
  64.      
  65.      //..............................................................loop()..............................................      
  66.         void loop(){
  67.           now_ = RTC.now();
  68.  
  69.          // Figyeled az órát és össze hasinlítod a tömb éertékekkel! relé be
  70.          if((relaysT[0].Rbe_hour == now_.hour()) && (relaysT[0].Rbe_min == now_.minute())){
  71.             digitalWrite(REL1, HIGH);        
  72.          }
  73.          // relé ki
  74.          if((relaysT[0].Rki_hour == now_.hour()) && (relaysT[0].Rki_min == now_.minute())){
  75.             digitalWrite(REL1, LOW);        
  76.          }  
  77.  ...
(#) kapu48 válasza kapu48 hozzászólására (») Aug 13, 2016 1 /
 
Vagy mind a 4 relét 1 ciklusban:
  1. ...
  2. //..............................................................loop()..............................................      
  3.         void loop(){
  4.           now_ = RTC.now();
  5.  
  6.       for(uint8_t i = 0; i < 4; i++){
  7.          // relé be
  8.          if((relaysT[i].Rbe_hour == now_.hour()) && (relaysT[i].Rbe_min == now_.minute())){
  9.             digitalWrite(REL1 + i, HIGH);        
  10.          }
  11.          // relé ki
  12.          if((relaysT[i].Rki_hour == now_.hour()) && (relaysT[i].Rki_min == now_.minute())){
  13.             digitalWrite(REL1 + i, LOW);        
  14.          }  
  15.       }
  16. ...
A hozzászólás módosítva: Aug 13, 2016
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 14, 2016 /
 
Köszi ismét a segítséget a külön ciklus a jó,hiszen különböző időpontban kapcsolnak majd a lámpák. Nappali világítás kb 9:00-20:00 ig,aztán váltja az éjszakai stb. Köszi a segítséget
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 14, 2016 /
 
Szia!
Ez így miért nem működik? Annyival kiegészítettem,hogy figyelje a másodpercet is

  1. void loop(){
  2.           now_ = RTC.now();
  3.            
  4.  
  5.          // Figyeled az órát és össze hasinlítod a tömb éertékekkel! relé be
  6.          if((relaysT[0].Rbe_hour == now_.hour()) && (relaysT[0].Rbe_min == now_.minute()) && (relaysT[0].Rbe_sec == now_.sec())){
  7.             digitalWrite(REL1, HIGH);        
  8.          }
  9.          // relé ki
  10.          if((relaysT[0].Rki_hour == now_.hour()) && (relaysT[0].Rki_min == now_.minute()) && (relaysT[0].Rki_sec == now_.sec())){
  11.             digitalWrite(REL1, LOW);        
  12.          }
(#) kapu48 válasza Daszkalosz hozzászólására (») Aug 14, 2016 1 /
 
Figyelj a nevekre!
  1. (relaysT[0].Rki_sec == now_.second())
A hozzászólás módosítva: Aug 14, 2016
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 14, 2016 /
 
Oh és tényleg Nem láttam a fától az erdőt KÖszi
(#) kapu48 válasza kapu48 hozzászólására (») Aug 14, 2016 /
 
Most oldjuk meg, hogy ne kapcsolgassa ismételten feleslegesen a reléket be/ki.
Úgy nevezet jelző biteket használunk.
  1. // Relay flags
  2.      #define Rel1  0
  3.      #define Rel2  1
  4.      #define Rel3  2
  5.      #define Rel4  3
  6.  
  7.      // Relék állapotjelző bitek
  8.      uint8_t relayF = 0;
  9.                                        
  10.       relays  relaysT[4];   // Van 4 relének tömböd
  11.  
  12.     //..............................................................setup()..............................................      
  13. void setup(){
  14.          //   Példa flag használatára
  15.          //relayF |= (1 << Rel1);   // Jelző set
  16.          //relayF &= ~(1 << Rel1);   // Jelző reset
  17.          //if(relayF &(~(1 << Rel1))){};  // flag vizsgálat bekapcsoltra
  18.          //if(!(relayF &(~(1 << Rel1)))){};  // flag vizsgálat kikapcsoltra
  19.  }
  20.     //..............................................................loop()..............................................      
  21. void loop(){
  22.           now_ = RTC.now();
  23.       for(uint8_t i = 0; i < 4; i++){
  24.          // relé be
  25.  
  26. if(!(relayF &(~(1 << i)))){   // Ha flag = 0
  27.           if((relaysT[i].Rbe_hour == now_.hour()) && (relaysT[i].Rbe_min == now_.minute()) && (relaysT[0].Rbe_sec == now_.second())){
  28.             digitalWrite(REL1 + i, HIGH);
  29.             relayF |= (1 << i);   // Jelző set        
  30.           }
  31.          }
  32.          // relé ki
  33.          if(relayF &(~(1 << i))){   // Ha flag = 1
  34.           if((relaysT[i].Rki_hour == now_.hour()) && (relaysT[i].Rki_min == now_.minute()) &&(relaysT[0].Rki_sec == now_.second()) ){
  35.             digitalWrite(REL1 + i, LOW);
  36.             relayF &= ~(1 << i);   // Jelző reset        
  37.           }
  38.          }  
  39.       }  
  40. ...
A hozzászólás módosítva: Aug 14, 2016
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 14, 2016 /
 
Köszönöm
De ez már nekem nagyon bonyolult Már nem tudom követni! Esetleg egy összefűzést kérhetek tőled,az egész mindenséggel? Nagyon megköszönném!!
(#) kapu48 válasza Daszkalosz hozzászólására (») Aug 14, 2016 1 /
 
Úgy látom, hogy nem érted!

A különböző időpontba kapcsolást, a különbözően feltöltött tömbök határozzák meg.
Készítesz menüket, ahol feltöltöd a tömbjeidet, mind a 4 relének:

  1. // Valahol feltöltöd az első relay tömböt
  2.           // relé1 bekapcsolás
  3.             relaysT[0].Rbe_year = 2016;
  4.             relaysT[0].Rbe_mon = 8;
  5.             relaysT[0].Rbe_day = 14;          
  6.             relaysT[0].Rbe_hour = 10;
  7.             relaysT[0].Rbe_min = 30;
  8.             relaysT[0].Rbe_sec = 0;
  9.           // kikapcsolás
  10.             relaysT[0].Rki_year = 2016;
  11.             relaysT[0].Rki_mon = 8;
  12.             relaysT[0].Rki_day = 14;          
  13.             relaysT[0].Rki_hour = 10;
  14.             relaysT[0].Rki_min = 50;
  15.             relaysT[0].Rki_sec = 0;
  16.  
  17.           // Valahol feltöltöd az 2. relay tömböt
  18.           // relé2 bekapcsolás
  19.             relaysT[1].Rbe_year = 2016;
  20.             relaysT[1].Rbe_mon = 8;
  21.             relaysT[1].Rbe_day = 14;          
  22.             relaysT[1].Rbe_hour = 20;
  23.             relaysT[1].Rbe_min = 30;
  24.             relaysT[1].Rbe_sec = 0;
  25.           // kikapcsolás
  26.             relaysT[1].Rki_year = 2016;
  27.             relaysT[1].Rki_mon = 8;
  28.             relaysT[1].Rki_day = 14;          
  29.             relaysT[1].Rki_hour = 6;
  30.             relaysT[1].Rki_min = 0;
  31.             relaysT[1].Rki_sec = 0;
  32.          // tovább ...


Ha minden nap egyforma időben akarsz kapcsolni?
Akkor a dátum részt akár ki is hagyhatod!
A hozzászólás módosítva: Aug 14, 2016
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 14, 2016 /
 
A 4 relének már megcsináltam a 4 tömböt. Most már értem Igen végül is csak az óra,perc,másodperc kell nekem. Azt majd kiveszem.
Viszont akkor ezeket nem kell módosítani? mert jelenleg ezzel csak az óra időbeállítást tudom vele állítani és nem a relé kapcsolási idejét!
  1. //.....................................................hour_setting().......................................................    
  2.          void hour_setting(){
  3.             char keypressed;
  4.      
  5.             hour_ =  now_.hour();
  6.        
  7.             lcd.setCursor(0,0);
  8.             lcd.print("Set hour:          ");  
  9.             lcd.setCursor(0,1);
  10.             lcd.print("Ora =               ");
  11.             if(hour_ < 10) lcd.print(" ");
  12.             lcd.print(hour_);      
  13.          do {                                                    // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
  14.                delay(100);
  15.               lcd.setCursor(6,1);
  16.               if(hour_ < 10) lcd.print(" ");
  17.               lcd.print(hour_);
  18.               keypressed =customKeypad.getKey();                   //keypressed v�ltoz� szint�n a setupban kell defini�lni
  19.               if (keypressed=='1')                                //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  20.                 {
  21.                   if(hour_ < 24){
  22.                       hour_++;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  23.                    }else{
  24.                       hour_ = 0;
  25.                    }
  26.                    
  27.                  }
  28.                 if (keypressed=='2')                              //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  29.                 {
  30.                   if(hour_ > 0){
  31.                       hour_--;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  32.                    }else{
  33.                       hour_ = 23;
  34.                    }                                //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  35.                  }
  36.                //delay(100);
  37.               } while(keypressed != '3');                         // Azaz m�g nem a h�rmas gombot nyomja
  38.             now_ = RTC.now();
  39.             year_ =  now_.year();
  40.             month_ =  now_.month();
  41.             day_ =  now_.day();
  42.             //hour_ =  now_.hour();
  43.             minute_ =  now_.minute();
  44.             second_ =  now_.second();  
  45.              RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));  
  46.              _day=32;         // LCD frissítés kényszerítése
  47.              _second=60;  
  48.          }  
  49.      
  50.       //...........................................................minute_setting().................................................        
  51.          void minute_setting()
  52.          {
  53.             char keypressed;
  54.            
  55.             minute_ =  now_.minute();
  56.            
  57.             lcd.setCursor(0,0);
  58.             lcd.print("Set perc:          ");  
  59.             lcd.setCursor(0,1);
  60.             lcd.print("Perc = ");
  61.             if(minute_ < 10) lcd.print(" ");
  62.             lcd.print(minute_);      
  63.          do {                                                    // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
  64.                delay(100);
  65.               lcd.setCursor(7,1);
  66.               if(minute_ < 10) lcd.print(" ");
  67.               lcd.print(minute_);
  68.               keypressed =customKeypad.getKey();                   //keypressed v�ltoz� szint�n a setupban kell defini�lni
  69.               if (keypressed=='1')                                //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  70.                 {
  71.                   if(minute_ < 60){
  72.                       minute_++;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  73.                    }else{
  74.                       minute_ = 0;
  75.                    }
  76.                    
  77.                  }
  78.                 if (keypressed=='2')                              //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  79.                 {
  80.                   if(minute_ > 0){
  81.                       minute_--;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  82.                    }else{
  83.                       minute_ = 59;
  84.                    }                                //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  85.                  }
  86.                //delay(100);
  87.               } while(keypressed != '3');                         // Azaz m�g nem a h�rmas gombot nyomja    
  88.            now_ = RTC.now();
  89.            year_ =  now_.year();
  90.             month_ =  now_.month();
  91.             day_ =  now_.day();
  92.             hour_ =  now_.hour();
  93.             //minute_ =  now_.minute();
  94.             second_ =  now_.second();  
  95.              RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));
  96.               _day=32;         // LCD frissítés kényszerítése
  97.              _second=60;
  98.          }  
  99.            
  100.            
  101.      //............................................................sec_settting()................................................    
  102.         void sec_settting()
  103.          {
  104.             char keypressed;
  105.            
  106.             second_ =  now_.second();
  107.            
  108.             lcd.setCursor(0,0);
  109.             lcd.print("Set second:         ");  
  110.             lcd.setCursor(0,1);
  111.             lcd.print("mPerc = ");
  112.             if(second_ < 10) lcd.print(" ");
  113.             lcd.print(second_);        
  114.          do {                                                    // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
  115.                delay(100);
  116.               lcd.setCursor(8,1);
  117.               if(second_ < 10) lcd.print(" ");
  118.               lcd.print(second_);
  119.               keypressed =customKeypad.getKey();                   //keypressed v�ltoz� szint�n a setupban kell defini�lni
  120.               if (keypressed=='1')                                //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  121.                 {
  122.                   if(second_ < 60){
  123.                       second_++;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  124.                    }else{
  125.                       second_ = 0;
  126.                    }
  127.                    
  128.                  }
  129.                 if (keypressed=='2')                              //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  130.                 {
  131.                   if(second_ > 0){
  132.                       second_--;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  133.                    }else{
  134.                       second_ = 59;
  135.                    }                                //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  136.                  }
  137.                //delay(100);
  138.               } while(keypressed != '3');                         // Azaz m�g nem a h�rmas gombot nyomja    
  139.             now_ = RTC.now();
  140.             year_ =  now_.year();
  141.             month_ =  now_.month();
  142.             day_ =  now_.day();
  143.             hour_ =  now_.hour();
  144.             minute_ =  now_.minute();
  145.             //second_ =  now_.second();  
  146.             RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));  
  147.              _day=32;         // LCD frissítés kényszerítése
  148.              _second=60;
  149.       }


Vagy ez maradhat?
A hozzászólás módosítva: Aug 14, 2016
(#) kapu48 válasza Daszkalosz hozzászólására (») Aug 14, 2016 1 /
 
Nincsen készen az egész mindenség!
Épen azért, mert téged is munkára akarlak ösztökélni!

Úgy látom kevés sikerrel!
Amit eddig össze dobáltam:
  1. /* @file Idokapcsolo.ino
  2.         || @version 1.0
  3.         || @author kapu48
  4.         || @contact
  5.         ||
  6.         || @description
  7.         || | Demonstrates changing the keypad size and key values.
  8.         || #
  9.         */
  10.         #include <Keypad.h>
  11.         #include <Wire.h>
  12.         #include "RTClib.h"
  13.         #include <LiquidCrystal_I2C.h>
  14.         #include <Keypad.h>
  15.        
  16.         LiquidCrystal_I2C lcd(0x27, 20, 4);
  17.          RTC_DS1307 RTC;
  18.          int _year, year_;
  19.          int _month, month_;
  20.          int _day=32, day_;
  21.          int _hour, hour_;
  22.          int _minute, minute_;
  23.          int _second=60, second_;
  24.          
  25.          const int REL1 = 7;
  26.          const int REL2 = 8;
  27.          const int REL3 = 9;
  28.          const int REL4 = 10;
  29.          
  30.         const byte ROWS = 4; //four rows
  31.         const byte COLS = 1; //four columns
  32.         //define the cymbols on the buttons of the keypads
  33.         char hexaKeys[ROWS] = {'0','1','2','3'};
  34.          
  35.          
  36.         byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
  37.         byte colPins[1] = {8}; //connect to the column pinouts of the keypad
  38.          
  39.         //initialize an instance of class NewKeypad
  40.         Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
  41.         DateTime now_;
  42.  
  43.                  //relays adat structure
  44.          struct relays {
  45.           // bekapcsolás
  46.             uint16_t Rbe_year;
  47.             uint8_t Rbe_mon;
  48.             uint8_t Rbe_day;          
  49.             uint8_t Rbe_hour;
  50.             uint8_t Rbe_min;
  51.             uint8_t Rbe_sec;
  52.           // kikapcsolás
  53.             uint16_t Rki_year;
  54.             uint8_t Rki_mon;
  55.             uint8_t Rki_day;          
  56.             uint8_t Rki_hour;
  57.             uint8_t Rki_min;
  58.             uint8_t Rki_sec;            
  59.           };
  60.  
  61.       // Relay flags
  62.      #define Rbe1  0
  63.      #define Rbe2  1
  64.      #define Rbe3  2
  65.      #define Rbe4  3
  66.  
  67.      // Relék állapot jelző bitek
  68.      uint8_t relayF = 0;
  69.                                        
  70.       relays  relaysT[4];   // Van 4 relének tömböd
  71.  
  72.      
  73.      //..............................................................setup()..............................................      
  74.         void setup(){
  75.           Serial.begin(9600);
  76.          
  77.          Wire.begin();
  78.          RTC.begin();
  79.          lcd.init();
  80.          lcd.begin(20, 4);
  81.          lcd.backlight();
  82.          
  83.         digitalWrite(REL1, HIGH);
  84.         digitalWrite(REL2, HIGH);
  85.         digitalWrite(REL3, HIGH);
  86.         digitalWrite(REL4, HIGH);
  87.          
  88.          
  89.         pinMode(REL1, OUTPUT);
  90.         pinMode(REL2, OUTPUT);
  91.         pinMode(REL3, OUTPUT);
  92.         pinMode(REL4, OUTPUT);
  93.          // Ezt csak 1* futatjukle, utánna megjegyzésbe rakjuk és ujra programozzuk
  94.          RTC.adjust(DateTime(2016, 8, 14, 10, 0, 0));
  95.  
  96.         // Valahol feltöltöd az első relay tömböt
  97.           // relé1 bekapcsolás
  98.             relaysT[0].Rbe_year = 2016;
  99.             relaysT[0].Rbe_mon = 8;
  100.             relaysT[0].Rbe_day = 14;          
  101.             relaysT[0].Rbe_hour = 10;
  102.             relaysT[0].Rbe_min = 30;
  103.             relaysT[0].Rbe_sec = 0;
  104.           // kikapcsolás
  105.             relaysT[0].Rki_year = 2016;
  106.             relaysT[0].Rki_mon = 8;
  107.             relaysT[0].Rki_day = 14;          
  108.             relaysT[0].Rki_hour = 10;
  109.             relaysT[0].Rki_min = 50;
  110.             relaysT[0].Rki_sec = 0;
  111.  
  112.           // Valahol feltöltöd az  relay tömböt
  113.           // relé2 bekapcsolás
  114.             relaysT[1].Rbe_year = 2016;
  115.             relaysT[1].Rbe_mon = 8;
  116.             relaysT[1].Rbe_day = 14;          
  117.             relaysT[1].Rbe_hour = 10;
  118.             relaysT[1].Rbe_min = 30;
  119.             relaysT[1].Rbe_sec = 0;
  120.           // kikapcsolás
  121.             relaysT[1].Rki_year = 2016;
  122.             relaysT[1].Rki_mon = 8;
  123.             relaysT[1].Rki_day = 14;          
  124.             relaysT[1].Rki_hour = 10;
  125.             relaysT[1].Rki_min = 50;
  126.             relaysT[1].Rki_sec = 0;
  127.          // tovább ...  
  128.                        
  129.          //   Példa flag használatára
  130.          //relayF |= (1 << Rbe1);   // Jelző set
  131.          //relayF &= ~(1 << Rbe1);   // Jelző reset
  132.          //if(relayF &(~(1 << Rbe1))){};  // flag vizsgálat bekapcsoltra
  133.          //if(!(relayF &(~(1 << Rbe1)))){};  // flag vizsgálat kikapcsoltra
  134.         }
  135.      
  136.      //..............................................................loop()..............................................      
  137.         void loop(){
  138.           now_ = RTC.now();
  139.       for(uint8_t i = 0; i < 4; i++){
  140.          // relé be
  141.           if(!(relayF &(~(1 << i)))){   // Ha flag = 0
  142.           if((relaysT[i].Rbe_hour == now_.hour()) && (relaysT[i].Rbe_min == now_.minute()) && (relaysT[0].Rbe_sec == now_.second())){
  143.             digitalWrite(REL1 + i, HIGH);
  144.             relayF |= (1 << i);   // Jelző set        
  145.           }
  146.          }
  147.          // relé ki
  148.          if(relayF &(~(1 << i))){   // Ha flag = 1
  149.           if((relaysT[i].Rki_hour == now_.hour()) && (relaysT[i].Rki_min == now_.minute()) &&(relaysT[0].Rki_sec == now_.second()) ){
  150.             digitalWrite(REL1 + i, LOW);
  151.             relayF &= ~(1 << i);   // Jelző reset        
  152.           }
  153.          }  
  154.       }  
  155.          
  156.         if(_day != now_.day()){         // LCD frissítés szükséges?      
  157.           _day = now_.day();
  158.           lcd.setCursor(0,0);
  159.           lcd.print(now_.year());
  160.           lcd.print(". ");
  161.           if(now_.month() < 10) lcd.print(" ");
  162.           lcd.print(now_.month());
  163.           lcd.print(". ");
  164.           if(now_.day() < 10) lcd.print(" ");
  165.           lcd.print(now_.day());
  166.           lcd.print(".  ");
  167.           }
  168.          
  169.         if(_second != now_.second()){         // LCD frissítés szükséges?
  170.           _second = now_.second();
  171.           lcd.setCursor(0,1);
  172.           if(now_.hour() < 10) lcd.print(" ");
  173.           lcd.print(now_.hour());
  174.           lcd.print(": ");
  175.           if(now_.minute() < 10) lcd.print(" ");
  176.           lcd.print(now_.minute());
  177.           lcd.print(": ");
  178.           if(now_.second() < 10) lcd.print(" ");
  179.           lcd.print(now_.second());
  180.           lcd.print("   ");
  181.           }
  182.          
  183.           char customKey = customKeypad.getKey();
  184.          
  185.           if (customKey){
  186.             Serial.println(customKey);  
  187.           }
  188.           if (customKey == '0'){
  189.             hour_setting();
  190.           } else if (customKey == '1'){
  191.             minute_setting();
  192.           } else if (customKey == '2'){
  193.             sec_settting();
  194.           }else{}
  195.      
  196.         }
  197.          
  198.       //.....................................................hour_setting().......................................................    
  199.          void hour_setting(){
  200.             char keypressed;
  201.      
  202.             hour_ =  now_.hour();
  203.        
  204.             lcd.setCursor(0,0);
  205.             lcd.print("Set hour:          ");  
  206.             lcd.setCursor(0,1);
  207.             lcd.print("Ora =               ");
  208.             if(hour_ < 10) lcd.print(" ");
  209.             lcd.print(hour_);      
  210.          do {                                                    // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
  211.                delay(100);
  212.               lcd.setCursor(6,1);
  213.               if(hour_ < 10) lcd.print(" ");
  214.               lcd.print(hour_);
  215.               keypressed =customKeypad.getKey();                   //keypressed v�ltoz� szint�n a setupban kell defini�lni
  216.               if (keypressed=='1')                                //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  217.                 {
  218.                   if(hour_ < 24){
  219.                       hour_++;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  220.                    }else{
  221.                       hour_ = 0;
  222.                    }
  223.                    
  224.                  }
  225.                 if (keypressed=='2')                              //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  226.                 {
  227.                   if(hour_ > 0){
  228.                       hour_--;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  229.                    }else{
  230.                       hour_ = 23;
  231.                    }                                //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  232.                  }
  233.                //delay(100);
  234.               } while(keypressed != '3');                         // Azaz m�g nem a h�rmas gombot nyomja
  235.             now_ = RTC.now();
  236.             year_ =  now_.year();
  237.             month_ =  now_.month();
  238.             day_ =  now_.day();
  239.             //hour_ =  now_.hour();
  240.             minute_ =  now_.minute();
  241.             second_ =  now_.second();  
  242.              RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));  
  243.              _day=32;         // LCD frissítés kényszerítése
  244.              _second=60;  
  245.          }  
  246.      
  247.       //...........................................................minute_setting().................................................        
  248.          void minute_setting()
  249.          {
  250.             char keypressed;
  251.            
  252.             minute_ =  now_.minute();
  253.            
  254.             lcd.setCursor(0,0);
  255.             lcd.print("Set perc:          ");  
  256.             lcd.setCursor(0,1);
  257.             lcd.print("Perc = ");
  258.             if(minute_ < 10) lcd.print(" ");
  259.             lcd.print(minute_);      
  260.          do {                                                    // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
  261.                delay(100);
  262.               lcd.setCursor(7,1);
  263.               if(minute_ < 10) lcd.print(" ");
  264.               lcd.print(minute_);
  265.               keypressed =customKeypad.getKey();                   //keypressed v�ltoz� szint�n a setupban kell defini�lni
  266.               if (keypressed=='1')                                //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  267.                 {
  268.                   if(minute_ < 60){
  269.                       minute_++;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  270.                    }else{
  271.                       minute_ = 0;
  272.                    }
  273.                    
  274.                  }
  275.                 if (keypressed=='2')                              //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  276.                 {
  277.                   if(minute_ > 0){
  278.                       minute_--;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  279.                    }else{
  280.                       minute_ = 59;
  281.                    }                                //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  282.                  }
  283.                //delay(100);
  284.               } while(keypressed != '3');                         // Azaz m�g nem a h�rmas gombot nyomja    
  285.            now_ = RTC.now();
  286.            year_ =  now_.year();
  287.             month_ =  now_.month();
  288.             day_ =  now_.day();
  289.             hour_ =  now_.hour();
  290.             //minute_ =  now_.minute();
  291.             second_ =  now_.second();  
  292.              RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));
  293.               _day=32;         // LCD frissítés kényszerítése
  294.              _second=60;
  295.          }  
  296.            
  297.            
  298.      //............................................................sec_settting()................................................    
  299.         void sec_settting()
  300.          {
  301.             char keypressed;
  302.            
  303.             second_ =  now_.second();
  304.            
  305.             lcd.setCursor(0,0);
  306.             lcd.print("Set second:         ");  
  307.             lcd.setCursor(0,1);
  308.             lcd.print("mPerc = ");
  309.             if(second_ < 10) lcd.print(" ");
  310.             lcd.print(second_);        
  311.          do {                                                    // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
  312.                delay(100);
  313.               lcd.setCursor(8,1);
  314.               if(second_ < 10) lcd.print(" ");
  315.               lcd.print(second_);
  316.               keypressed =customKeypad.getKey();                   //keypressed v�ltoz� szint�n a setupban kell defini�lni
  317.               if (keypressed=='1')                                //Annyit tudni kell itt, hogy most 1-et �rtam be, de neked pl az 1-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  318.                 {
  319.                   if(second_ < 60){
  320.                       second_++;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  321.                    }else{
  322.                       second_ = 0;
  323.                    }
  324.                    
  325.                  }
  326.                 if (keypressed=='2')                              //Annyit tudni kell itt, hogy most 2-et �rtam be, de neked pl az 2-es gomb megnyom�s�ra lehet nem ezt adja vissza, hanem azt amit te adt�l meg, sz�val az kell majd neki itt megadni
  327.                 {
  328.                   if(second_ > 0){
  329.                       second_--;                                 //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  330.                    }else{
  331.                       second_ = 59;
  332.                    }                                //A sec v�ltoz�t a setupban int k�nt kell defini�lni
  333.                  }
  334.                //delay(100);
  335.               } while(keypressed != '3');                         // Azaz m�g nem a h�rmas gombot nyomja    
  336.             now_ = RTC.now();
  337.             year_ =  now_.year();
  338.             month_ =  now_.month();
  339.             day_ =  now_.day();
  340.             hour_ =  now_.hour();
  341.             minute_ =  now_.minute();
  342.             //second_ =  now_.second();  
  343.             RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));  
  344.              _day=32;         // LCD frissítés kényszerítése
  345.              _second=60;
  346.       }


Most már hagyom, hogy meg emészd az eddigieket!
Valaki ígért itt neked menü készítést!
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 14, 2016 /
 
Hidd el én lennék a világon a legboldogabb,ha meg tudnám csinálni. Igyekszem tanulgatni.
Igen ígérte valaki,majd jelentkezik,addig is átnézem az általad írt kódot és tanulgatom. Köszönöm türelmed és segítő készségedet
(#) kapu48 válasza Daszkalosz hozzászólására (») Aug 14, 2016 1 /
 
Jut eszemben, az általad talált hiba megoldását közölhetnéd!?
Mivel nekem nincs HW össze rakva így nem tudom tesztelni!

Jó tanulást!
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 14, 2016 /
 
Ezt javítottam! Így elmenti az időt és nem kell minden egyes alkalommal újra állítani
  1. if (! RTC.isrunning()) {
  2.         Serial.println("RTC is NOT running!");
  3.         // Beállítja az RTC dáum és idő vázlatát
  4.         RTC.adjust(DateTime(__DATE__, __TIME__));


köszi szépen
A hozzászólás módosítva: Aug 14, 2016
(#) kapu48 válasza Daszkalosz hozzászólására (») Aug 14, 2016 1 /
 
Igen!

Szerintem ne várj másra!

Mivel a menü RTC beállító része már készen van, mintaként használhatod.
1 példa:
Akár copi -> paszte, aztán át nevezgeted : void relaySec_settting()
, hogy az RTC helyet a relaysT[i].Rki_sec tömbbe mentse az értéket.
(#) kapu48 válasza kapu48 hozzászólására (») Aug 14, 2016 1 /
 
Mivel csak 4 gombod van.
(Bár nem értem mért nem használsz 4*4-es mátrix tasztatúrát? Egyszerűbb lenne az egész kezelés! )

Írsz 1 főmenüt, amiből tudsz hívni 4 almenüt, azokból megint 4 - 4 menüt hívhatsz.
Természetesen az LCD-n folyamatosan jelzed, hol tartasz, és éppen mit állítasz be.
(#) Daszkalosz válasza kapu48 hozzászólására (») Aug 14, 2016 /
 
Van 4x4es keypadom is,de az túl nagy. Ez egy kontaszetbe lenne beépítve és a kijelző alatt lenne a keypad. De lehet nyomógombra is átírni,még nem tudom. Holnap nekiugrom délután a menü rendszernek. Ma meg tanulgatok egy kicsit.
(#) Kovidivi válasza Daszkalosz hozzászólására (») Aug 14, 2016 /
 
4 gombra én OK, vissza, + - funkciókat programoznék le. Tehát egyik gombbal mindig belépsz a főmenübe, almenübe, a másikkal visszalépsz, a maradék kettővel pedig növeled/csökkented/változtatod a megfelelő értéket.
Össze kellene írnod a menürendszered, hogy fog kinézni, ahhoz lehet igazítani a gombjaidat.
(#) Daszkalosz válasza Kovidivi hozzászólására (») Aug 14, 2016 /
 
Valahogy én is úgy gondoltam. 1-es gomb menübe lépés, 2-3gomb érték váltoutatás,4 gomb OK.
A z hogy a.menű,hogy néz ki,azt még átgondolom és összeírom
(#) Danesz6 hozzászólása Aug 15, 2016 /
 
Sziasztok!

Rendeltem egy Nanot és egy Uno-t is, most jöttek meg, gondoltam megnézem így csupaszon mit tud. Most kezdek ezzel foglalkozni, nem tudom mit lehet egy ilyen boarddal magában.
De inkább a lényeg, hogy az USB porton keresztül nem ismeri fel egyiket sem.
Az eszközkezelőben látom, hogy van bedugva valami USB2.0 serial, de azt írja, hogy nincs az eszközzel kompatibilis illesztőprogram, valamint ha frissíteni akarom windowsosan nem talál semmit.

Van ezekhez külön driver? Magát csak a programozófelületet raktam fel, ott sem látok a PORT menüben semmilyen opciót, szürke.

Köszi előre is...
(#) david10 válasza Danesz6 hozzászólására (») Aug 15, 2016 /
 
Ha adol linket arról, amit vettél, akkor tudunk adni drivert.
Az eredetiekben FT232, a klónokban általában CH340 vagy PL2302-es USB-Serial IC található.
Ezekhez mind különféle driver jár.
(#) Danesz6 válasza david10 hozzászólására (») Aug 15, 2016 /
 
Megnéztem a rendeléseket, CH340 van rajtuk.
Következő: »»   252 / 854
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem