Fórum témák
- • ESR mérő
- • Áramváltó trafóval áram mérés, hogy?
- • Kombikazán működési hiba
- • Villanypásztor
- • Számítógép hiba, de mi a probléma?
- • Rossz HDD javítás, mentés
- • Rádió adó építése
- • PLC kérdések
- • Rádióamatőrök topikja
- • Elektromos távirányítós kapunyitó
- • Klíma beszerelése, fűtés-hűtés házilag
- • Hegesztő inverter javítás
- • Boombox javítás
- • Mosogatógép hiba
- • TV-k tulajdonságai, vásárlás
- • Kapcsolóüzemű táp 230V-ról
- • Kapcsolási rajzot keresek
- • Klíma szervizelés, javítás
- • Fejhallgató erősítő
- • Kazettás magnó (deck) javítása
- • TV hiba, mi a megoldás?
- • Villanyszerelés
- • Audiofil, High End Audio
- • Felajánlás, azaz ingyen elvihető
- • Eredményjelző
- • Gáz fogyasztás monitorozása
- • Crystal radio - detektoros rádió
- • Erősítő mindig és mindig
- • Csere-bere
- • Hűtőgép kompresszor
- • Mosógép vezérlők és általános problémáik
- • Mobiltelefon hiba
- • Sütő javítás
- • Mikrofon előerősítő
- • ESP32 bootloader
- • Retro számítógépek
- • Autós fejegységek kapcsolási rajza
- • Analóg oszcilloszkóp javítása
- • Hűtőgép probléma
- • Opel Astra elektromos hibák
- • Elfogadnám, ha ingyen elvihető
- • Transzformátor készítés, méretezés
- • Dióda helyettesítés
- • Vezetéknélküli termosztát
- • Oszcilloszkóp, avagy hogyan kell használni?
- • Vicces - mókás történetek
- • A műhely (bemutató topik, ahol az alkotások készülnek)
- • Arduino
- • Rádió áthangolása, OIRT - CCIR konverter
- • Tápegységgel kapcsolatos kérdések
- • Labortáp javítás
- • MOSFET-ek
- • Sprint-Layout NYÁK-tervező
- • Tápegység
- • Androidos okos telefonok
» Több friss téma
|
A klónok CH340 Soros-USB illesztőjének drivere ( Letöltés)
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
Köszönöm!
Jó lesz igen. Működik szépen.Szép munka ![](/pic/smile/smile.gif) 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
Bár menürendszerben gondolkodom. Mind a 4 relét külön lehetne beállítani. A kódod jó kiindulási alap.
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.
Köszi! Nem lesz meg,hiszen tudásom elég gyér ![](/pic/smile/sad.gif)
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
Értem.
Rendben van. Ahogy ráérek kicsit akkor segítek szívesen. ![](/pic/smile/smile.gif)
É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. ![](/pic/smile/smile.gif)
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.
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
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!
Én így képzelem:
...
//relays adat structure
struct relays {
// bekapcsolás
uint16_t Rbe_year;
uint8_t Rbe_mon;
uint8_t Rbe_day;
uint8_t Rbe_hour;
uint8_t Rbe_min;
uint8_t Rbe_sec;
// kikapcsolás
uint16_t Rki_year;
uint8_t Rki_mon;
uint8_t Rki_day;
uint8_t Rki_hour;
uint8_t Rki_min;
uint8_t Rki_sec;
};
relays relaysT[4]; // Van tömböd 4 relének
//..............................................................setup()..............................................
void setup(){
Serial.begin(9600);
Wire.begin();
RTC.begin();
lcd.init();
lcd.begin(20, 4);
lcd.backlight();
digitalWrite(REL1, HIGH);
digitalWrite(REL2, HIGH);
digitalWrite(REL3, HIGH);
digitalWrite (REL4, HIGH );
pinMode(REL1, OUTPUT);
pinMode(REL2, OUTPUT);
pinMode(REL3, OUTPUT);
// Ezt csak 1* futatjukle, utánna megjegyzésbe rakjuk és ujra programozzuk
RTC.adjust(DateTime(2016, 8, 14, 10, 0, 0));
// Valahol feltöltöd az relay tömböt
// bekapcsolás
relaysT[0].Rbe_year = 2016;
relaysT[0].Rbe_mon = 8;
relaysT[0].Rbe_day = 14;
relaysT[0].Rbe_hour = 10;
relaysT[0].Rbe_min = 30;
relaysT[0].Rbe_sec = 0;
// kikapcsolás
relaysT[0].Rki_year = 2016;
relaysT[0].Rki_mon = 8;
relaysT[0].Rki_day = 14;
relaysT[0].Rki_hour = 10;
relaysT[0].Rki_min = 50;
relaysT[0].Rki_sec = 0;
}
//..............................................................loop()..............................................
void loop(){
now_ = RTC.now();
// Figyeled az órát és össze hasinlítod a tömb éertékekkel! relé be
if((relaysT[0].Rbe_hour == now_.hour()) && (relaysT[0].Rbe_min == now_.minute())){
digitalWrite(REL1, HIGH);
}
// relé ki
if((relaysT[0].Rki_hour == now_.hour()) && (relaysT[0].Rki_min == now_.minute())){
digitalWrite(REL1, LOW);
}
...
Vagy mind a 4 relét 1 ciklusban:
...
//..............................................................loop()..............................................
void loop(){
now_ = RTC.now();
for(uint8_t i = 0; i < 4; i++){
// relé be
if((relaysT[i].Rbe_hour == now_.hour()) && (relaysT[i].Rbe_min == now_.minute())){
digitalWrite(REL1 + i, HIGH);
}
// relé ki
if((relaysT[i].Rki_hour == now_.hour()) && (relaysT[i].Rki_min == now_.minute())){
digitalWrite(REL1 + i, LOW);
}
}
...
A hozzászólás módosítva: Aug 13, 2016
Köszi ismét a segítséget ![](/pic/smile/smile.gif) 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
Szia!
Ez így miért nem működik? Annyival kiegészítettem,hogy figyelje a másodpercet is
void loop(){
now_ = RTC.now();
// Figyeled az órát és össze hasinlítod a tömb éertékekkel! relé be
if((relaysT[0].Rbe_hour == now_.hour()) && (relaysT[0].Rbe_min == now_.minute()) && (relaysT[0].Rbe_sec == now_.sec())){
digitalWrite(REL1, HIGH);
}
// relé ki
if((relaysT[0].Rki_hour == now_.hour()) && (relaysT[0].Rki_min == now_.minute()) && (relaysT[0].Rki_sec == now_.sec())){
digitalWrite(REL1, LOW);
}
Figyelj a nevekre!
(relaysT[0].Rki_sec == now_.second())
A hozzászólás módosítva: Aug 14, 2016
Oh és tényleg ![](/pic/smile/smile.gif) Nem láttam a fától az erdőt ![](/pic/smile/smile.gif) KÖszi
Most oldjuk meg, hogy ne kapcsolgassa ismételten feleslegesen a reléket be/ki.
Úgy nevezet jelző biteket használunk.
// Relay flags
#define Rel1 0
#define Rel2 1
#define Rel3 2
// Relék állapotjelző bitek
uint8_t relayF = 0;
relays relaysT[4]; // Van 4 relének tömböd
//..............................................................setup()..............................................
void setup(){
…
// Példa flag használatára
//relayF |= (1 << Rel1); // Jelző set
//relayF &= ~(1 << Rel1); // Jelző reset
//if(relayF &(~(1 << Rel1))){}; // flag vizsgálat bekapcsoltra
//if(!(relayF &(~(1 << Rel1)))){}; // flag vizsgálat kikapcsoltra
}
//..............................................................loop()..............................................
void loop(){
now_ = RTC.now();
for(uint8_t i = 0; i < 4; i++){
// relé be
if(!(relayF &(~(1 << i)))){ // Ha flag = 0
if((relaysT[i].Rbe_hour == now_.hour()) && (relaysT[i].Rbe_min == now_.minute()) && (relaysT[0].Rbe_sec == now_.second())){
digitalWrite(REL1 + i, HIGH);
relayF |= (1 << i); // Jelző set
}
}
// relé ki
if(relayF &(~(1 << i))){ // Ha flag = 1
if((relaysT[i].Rki_hour == now_.hour()) && (relaysT[i].Rki_min == now_.minute()) &&(relaysT[0].Rki_sec == now_.second()) ){
digitalWrite(REL1 + i, LOW);
relayF &= ~(1 << i); // Jelző reset
}
}
}
...
A hozzászólás módosítva: Aug 14, 2016
Köszönöm ![](/pic/smile/smile.gif)
De ez már nekem nagyon bonyolult ![](/pic/smile/sad.gif) 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!!
Ú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:
// Valahol feltöltöd az első relay tömböt
// relé1 bekapcsolás
relaysT[0].Rbe_year = 2016;
relaysT[0].Rbe_mon = 8;
relaysT[0].Rbe_day = 14;
relaysT[0].Rbe_hour = 10;
relaysT[0].Rbe_min = 30;
relaysT[0].Rbe_sec = 0;
// kikapcsolás
relaysT[0].Rki_year = 2016;
relaysT[0].Rki_mon = 8;
relaysT[0].Rki_day = 14;
relaysT[0].Rki_hour = 10;
relaysT[0].Rki_min = 50;
relaysT[0].Rki_sec = 0;
// Valahol feltöltöd az 2. relay tömböt
// relé2 bekapcsolás
relaysT[1].Rbe_year = 2016;
relaysT[1].Rbe_mon = 8;
relaysT[1].Rbe_day = 14;
relaysT[1].Rbe_hour = 20;
relaysT[1].Rbe_min = 30;
relaysT[1].Rbe_sec = 0;
// kikapcsolás
relaysT[1].Rki_year = 2016;
relaysT[1].Rki_mon = 8;
relaysT[1].Rki_day = 14;
relaysT[1].Rki_hour = 6;
relaysT[1].Rki_min = 0;
relaysT[1].Rki_sec = 0;
// 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
A 4 relének már megcsináltam a 4 tömböt. Most már értem ![](/pic/smile/smile.gif) 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!
//.....................................................hour_setting().......................................................
void hour_setting(){
char keypressed;
hour_ = now_.hour();
lcd.setCursor(0,0);
lcd.print("Set hour: ");
lcd.setCursor(0,1);
lcd.print("Ora = ");
if(hour_ < 10) lcd.print(" ");
lcd.print(hour_);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
delay(100);
lcd.setCursor(6,1);
if(hour_ < 10) lcd.print(" ");
lcd.print(hour_);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
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
{
if(hour_ < 24){
hour_++; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
hour_ = 0;
}
}
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
{
if(hour_ > 0){
hour_--; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
hour_ = 23;
} //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
now_ = RTC.now();
year_ = now_.year();
month_ = now_.month();
day_ = now_.day();
//hour_ = now_.hour();
minute_ = now_.minute();
second_ = now_.second();
RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));
_day=32; // LCD frissítés kényszerítése
_second=60;
}
//...........................................................minute_setting().................................................
void minute_setting()
{
char keypressed;
minute_ = now_.minute();
lcd.setCursor(0,0);
lcd.print("Set perc: ");
lcd.setCursor(0,1);
lcd.print("Perc = ");
if(minute_ < 10) lcd.print(" ");
lcd.print(minute_);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
delay(100);
lcd.setCursor(7,1);
if(minute_ < 10) lcd.print(" ");
lcd.print(minute_);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
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
{
if(minute_ < 60){
minute_++; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
minute_ = 0;
}
}
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
{
if(minute_ > 0){
minute_--; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
minute_ = 59;
} //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
now_ = RTC.now();
year_ = now_.year();
month_ = now_.month();
day_ = now_.day();
hour_ = now_.hour();
//minute_ = now_.minute();
second_ = now_.second();
RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));
_day=32; // LCD frissítés kényszerítése
_second=60;
}
//............................................................sec_settting()................................................
void sec_settting()
{
char keypressed;
second_ = now_.second();
lcd.setCursor(0,0);
lcd.print("Set second: ");
lcd.setCursor(0,1);
lcd.print("mPerc = ");
if(second_ < 10) lcd.print(" ");
lcd.print(second_);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
delay(100);
lcd.setCursor(8,1);
if(second_ < 10) lcd.print(" ");
lcd.print(second_);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
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
{
if(second_ < 60){
second_++; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
second_ = 0;
}
}
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
{
if(second_ > 0){
second_--; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
second_ = 59;
} //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
now_ = RTC.now();
year_ = now_.year();
month_ = now_.month();
day_ = now_.day();
hour_ = now_.hour();
minute_ = now_.minute();
//second_ = now_.second();
RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));
_day=32; // LCD frissítés kényszerítése
_second=60;
}
Vagy ez maradhat? A hozzászólás módosítva: Aug 14, 2016
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:
/* @file Idokapcsolo.ino
|| @version 1.0
|| @author kapu48
|| @contact
||
|| @description
|| | Demonstrates changing the keypad size and key values.
|| #
*/
#include <Keypad.h>
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int _year, year_;
int _month, month_;
int _day=32, day_;
int _hour, hour_;
int _minute, minute_;
int _second=60, second_;
const int REL1 = 7;
const int REL2 = 8;
const int REL3 = 9;
const byte ROWS = 4; //four rows
const byte COLS = 1; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS] = {'0','1','2','3'};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[1] = {8}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
DateTime now_;
//relays adat structure
struct relays {
// bekapcsolás
uint16_t Rbe_year;
uint8_t Rbe_mon;
uint8_t Rbe_day;
uint8_t Rbe_hour;
uint8_t Rbe_min;
uint8_t Rbe_sec;
// kikapcsolás
uint16_t Rki_year;
uint8_t Rki_mon;
uint8_t Rki_day;
uint8_t Rki_hour;
uint8_t Rki_min;
uint8_t Rki_sec;
};
// Relay flags
#define Rbe1 0
#define Rbe2 1
#define Rbe3 2
#define Rbe4 3
// Relék állapot jelző bitek
uint8_t relayF = 0;
relays relaysT[4]; // Van 4 relének tömböd
//..............................................................setup()..............................................
void setup(){
Serial.begin(9600);
Wire.begin();
RTC.begin();
lcd.init();
lcd.begin(20, 4);
lcd.backlight();
digitalWrite(REL1, HIGH);
digitalWrite(REL2, HIGH);
digitalWrite(REL3, HIGH);
digitalWrite (REL4, HIGH );
pinMode(REL1, OUTPUT);
pinMode(REL2, OUTPUT);
pinMode(REL3, OUTPUT);
// Ezt csak 1* futatjukle, utánna megjegyzésbe rakjuk és ujra programozzuk
RTC.adjust(DateTime(2016, 8, 14, 10, 0, 0));
// Valahol feltöltöd az első relay tömböt
// relé1 bekapcsolás
relaysT[0].Rbe_year = 2016;
relaysT[0].Rbe_mon = 8;
relaysT[0].Rbe_day = 14;
relaysT[0].Rbe_hour = 10;
relaysT[0].Rbe_min = 30;
relaysT[0].Rbe_sec = 0;
// kikapcsolás
relaysT[0].Rki_year = 2016;
relaysT[0].Rki_mon = 8;
relaysT[0].Rki_day = 14;
relaysT[0].Rki_hour = 10;
relaysT[0].Rki_min = 50;
relaysT[0].Rki_sec = 0;
// Valahol feltöltöd az relay tömböt
// relé2 bekapcsolás
relaysT[1].Rbe_year = 2016;
relaysT[1].Rbe_mon = 8;
relaysT[1].Rbe_day = 14;
relaysT[1].Rbe_hour = 10;
relaysT[1].Rbe_min = 30;
relaysT[1].Rbe_sec = 0;
// kikapcsolás
relaysT[1].Rki_year = 2016;
relaysT[1].Rki_mon = 8;
relaysT[1].Rki_day = 14;
relaysT[1].Rki_hour = 10;
relaysT[1].Rki_min = 50;
relaysT[1].Rki_sec = 0;
// tovább ...
// Példa flag használatára
//relayF |= (1 << Rbe1); // Jelző set
//relayF &= ~(1 << Rbe1); // Jelző reset
//if(relayF &(~(1 << Rbe1))){}; // flag vizsgálat bekapcsoltra
//if(!(relayF &(~(1 << Rbe1)))){}; // flag vizsgálat kikapcsoltra
}
//..............................................................loop()..............................................
void loop(){
now_ = RTC.now();
for(uint8_t i = 0; i < 4; i++){
// relé be
if(!(relayF &(~(1 << i)))){ // Ha flag = 0
if((relaysT[i].Rbe_hour == now_.hour()) && (relaysT[i].Rbe_min == now_.minute()) && (relaysT[0].Rbe_sec == now_.second())){
digitalWrite(REL1 + i, HIGH);
relayF |= (1 << i); // Jelző set
}
}
// relé ki
if(relayF &(~(1 << i))){ // Ha flag = 1
if((relaysT[i].Rki_hour == now_.hour()) && (relaysT[i].Rki_min == now_.minute()) &&(relaysT[0].Rki_sec == now_.second()) ){
digitalWrite(REL1 + i, LOW);
relayF &= ~(1 << i); // Jelző reset
}
}
}
if(_day != now_.day()){ // LCD frissítés szükséges?
_day = now_.day();
lcd.setCursor(0,0);
lcd.print(now_.year());
lcd.print(". ");
if(now_.month() < 10) lcd.print(" ");
lcd.print(now_.month());
lcd.print(". ");
if(now_.day() < 10) lcd.print(" ");
lcd.print(now_.day());
lcd.print(". ");
}
if(_second != now_.second()){ // LCD frissítés szükséges?
_second = now_.second();
lcd.setCursor(0,1);
if(now_.hour() < 10) lcd.print(" ");
lcd.print(now_.hour());
lcd.print(": ");
if(now_.minute() < 10) lcd.print(" ");
lcd.print(now_.minute());
lcd.print(": ");
if(now_.second() < 10) lcd.print(" ");
lcd.print(now_.second());
lcd.print(" ");
}
char customKey = customKeypad.getKey();
if (customKey){
Serial.println(customKey);
}
if (customKey == '0'){
hour_setting();
} else if (customKey == '1'){
minute_setting();
} else if (customKey == '2'){
sec_settting();
}else{}
}
//.....................................................hour_setting().......................................................
void hour_setting(){
char keypressed;
hour_ = now_.hour();
lcd.setCursor(0,0);
lcd.print("Set hour: ");
lcd.setCursor(0,1);
lcd.print("Ora = ");
if(hour_ < 10) lcd.print(" ");
lcd.print(hour_);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
delay(100);
lcd.setCursor(6,1);
if(hour_ < 10) lcd.print(" ");
lcd.print(hour_);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
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
{
if(hour_ < 24){
hour_++; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
hour_ = 0;
}
}
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
{
if(hour_ > 0){
hour_--; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
hour_ = 23;
} //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
now_ = RTC.now();
year_ = now_.year();
month_ = now_.month();
day_ = now_.day();
//hour_ = now_.hour();
minute_ = now_.minute();
second_ = now_.second();
RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));
_day=32; // LCD frissítés kényszerítése
_second=60;
}
//...........................................................minute_setting().................................................
void minute_setting()
{
char keypressed;
minute_ = now_.minute();
lcd.setCursor(0,0);
lcd.print("Set perc: ");
lcd.setCursor(0,1);
lcd.print("Perc = ");
if(minute_ < 10) lcd.print(" ");
lcd.print(minute_);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
delay(100);
lcd.setCursor(7,1);
if(minute_ < 10) lcd.print(" ");
lcd.print(minute_);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
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
{
if(minute_ < 60){
minute_++; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
minute_ = 0;
}
}
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
{
if(minute_ > 0){
minute_--; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
minute_ = 59;
} //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
now_ = RTC.now();
year_ = now_.year();
month_ = now_.month();
day_ = now_.day();
hour_ = now_.hour();
//minute_ = now_.minute();
second_ = now_.second();
RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));
_day=32; // LCD frissítés kényszerítése
_second=60;
}
//............................................................sec_settting()................................................
void sec_settting()
{
char keypressed;
second_ = now_.second();
lcd.setCursor(0,0);
lcd.print("Set second: ");
lcd.setCursor(0,1);
lcd.print("mPerc = ");
if(second_ < 10) lcd.print(" ");
lcd.print(second_);
do { // ez az�rt kell, hogy addig nyomkodjon, mig jo v�laszt nem ad
delay(100);
lcd.setCursor(8,1);
if(second_ < 10) lcd.print(" ");
lcd.print(second_);
keypressed =customKeypad.getKey(); //keypressed v�ltoz� szint�n a setupban kell defini�lni
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
{
if(second_ < 60){
second_++; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
second_ = 0;
}
}
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
{
if(second_ > 0){
second_--; //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}else{
second_ = 59;
} //A sec v�ltoz�t a setupban int k�nt kell defini�lni
}
//delay(100);
} while(keypressed != '3'); // Azaz m�g nem a h�rmas gombot nyomja
now_ = RTC.now();
year_ = now_.year();
month_ = now_.month();
day_ = now_.day();
hour_ = now_.hour();
minute_ = now_.minute();
//second_ = now_.second();
RTC.adjust(DateTime(year_, month_, day_, hour_, minute_, second_));
_day=32; // LCD frissítés kényszerítése
_second=60;
}
Most már hagyom, hogy meg emészd az eddigieket!
Valaki ígért itt neked menü készítést!
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
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!
Ezt javítottam! Így elmenti az időt és nem kell minden egyes alkalommal újra állítani
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// Beállítja az RTC dáum és idő vázlatát
RTC.adjust(DateTime(__DATE__, __TIME__));
köszi szépen A hozzászólás módosítva: Aug 14, 2016
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.
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.
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.
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.
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
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...
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.
Megnéztem a rendeléseket, CH340 van rajtuk.
|
|