Vzhledem k tomu, že mě tlačí čas, bych možná poprosil o něco víc.
Je někdo ochoten mi napsat program (i s popiskama) podle požadavků, které mu zadám? Jsem ochoten mu za to zaplatit. Můžeme se dohodnout, když mi napíšete soukromou zprávu. Děkuji.
FHonza.. máš pravdu! Děkuji, celé to teď funguje...
Jak říkám, je to tím, že ty programy nepíšu, jen vždy kopíruju a upravuji hodnoty.. a tady jsem si nevšiml, proč to má to číslo a díky Tobě jsem to pochopil.. děkuji
Založen: Nov 20, 2012 Příspěvky: 1453 Bydliště: Praha
Zaslal: čt duben 12 2018, 18:31 Předmět:
Když už teda OT: proč hned tak hanlivě ? Já když jsem potřeboval pomoc s pračkou tady na fóru, tak mě taky hned nikdo nenazval lepičem praček. A podle mého názoru Arduino tak trochu o tom "lepení" vlastně je a kvůli tomu i vzniklo. V tom dobrém slova smyslu.
Honzo to si asi neber osobně, hezky to vystihnul
Já jsem moc rád, že jsou tu ochotní lidé a říkám si že jak budu něčemu taky rozumět, rád tu zavítám a pomohu někomu dalšímu.
Tak další problém.. povedlo se mi úspěšně nastavit otvírání na 3 různá hesla, přičemž při každém se objekt otevře, ale na display to napíše pokaždé něco jiného
Ale stihl mě problém s tím, že se mi neaktualizuje čas. Tedy aktualizuje se tehdy, pokud v tom programu, který ten čas vypisuje napíšu
kód:
lcd.print(cas); // vypíše cas na displej
delay(1000);
lcd.celar()
ale ta funkce delay mi v celém program udělá neplechu, (asi proto, že pokaždé když tam program dojde, tak se na sekundu zastaví činnost), tak jsem chtěl použít funkci millis.. nastudoval jsem si ji a myslel, že bude fungovat správně, ale nefunguje vůbec. Dám sem kód s tím millis (díky němu se na displey nezobrazí nic ani nic nefunguje)
kód:
#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DS1307.h>
//#define Password_Lenght 5 //délka hesla 5
LiquidCrystal_I2C lcd(0x27,20,4);
//byte data_count = 0, master_count = 0;
//bool Pass_is_good;
char stisknutyznak;
char pressedKey[5] = {'0','0','0','0'}; // sem se budou ukládat stiskuté znaky
long vypiscasu;
char code[5] = {'1','9','4','7'}; // kód pro otevření dveří
char code2[5] = {'1','9','9','9'}; // kód pro otevření dveří
char code3[5] = {'4','0','9','5'}; // kód pro otevření dveří
byte rowPins[ROWS] = {
8,7,6,5}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
9,3,2}; //connect to the column pinouts of the keypad
Keypad klavesnice( makeKeymap(keys), rowPins, colPins, ROWS, COLS); //initialize an instance of class NewKeypad
int zamceno;
int magnet = 10;
int sirena = 0;
void setup()
{
pinMode(magnet, INPUT);
pinMode(sirena, OUTPUT);
lcd.begin();// initialize the lcd
lcd.backlight();
lcd.setCursor(4,0); // nastaví kurzor na pozici
RTC.set(DS1307_DATE,13); // nastaví den v měsíci
RTC.set(DS1307_MTH,4); // nastaví měsíc
RTC.set(DS1307_YR,18); // nastaví rok
RTC.set(DS1307_MIN,49); // nastaví minuty
RTC.set(DS1307_HR,11); // nastaví hodiny
RTC.start(); // spustí čas
}
void loop()
{char stisknutyznak = klavesnice.getKey();// vytvoří proměnnou, do které uloží znak stisknuté klávesy
{ if (millis() > (10000 + vypiscasu))
{
RTC.get(rtc,true);
// připraví pole znaků pro čas
char cas[15];
// zapíše do pole znaků cas hodnoty z rtc
lcd.setCursor(3,3); // nastaví kurzor na pozici
lcd.print(cas); // vypíše cas na displej
}
else
vypiscasu = millis();
}
if (stisknutyznak == '#') //když se stiskne křížek, objeví se na display zamčeno
{
zamceno=1;
lcd.setCursor (4,0);
lcd.print("Zamceno");
digitalWrite(magnet, HIGH);// a zapne se magneticky senzor
delay(1000) ;
lcd.clear(); // po 5ti sekundách se nápis "zamčeno" smaže
{
// přečte stiskuté tlačítko a uloží do customKey
if (stisknutyznak){
// když je stisknuto potvrzovací tlačítko *
if (stisknutyznak == '*')
{
// když se pole kódu rovná poli stiskutých talčítek
if ((pressedKey[0] == code[0]) && (pressedKey[1] == code[1]) && (pressedKey[2] == code[2]) && (pressedKey[3] == code[3]))
{
// když není stisknuto potvrzovací tlačítko #
else
{
//přidej znak do pole a znaky posuň
pressedKey[0] = pressedKey[1];
pressedKey[1] = pressedKey[2];
pressedKey[2] = pressedKey[3];
pressedKey[3] = stisknutyznak;
Založen: Nov 20, 2012 Příspěvky: 1453 Bydliště: Praha
Zaslal: pá duben 13 2018, 11:29 Předmět:
Takhle to ani fungovat nemůže, protože ta podmínka
kód:
if (millis() > (10000 + vypiscasu))
není nikdy splněná. Pokaždé se proměnná vypiscasu nastaví na hodnotu vrácenou funkcí millis(). Takže nebude nikdy o 10000 menší aktuální hodnota vrácená funkcí millis(). To dělá ta část kódu:
kód:
else
vypiscasu = millis();
• doplň inicializaci proměnné vypiscasu
• přesuň tu část kódu na konec těla podmínky
kód:
...
lcd.setCursor(3,3); // nastaví kurzor na pozici
lcd.print(cas); // vypíše cas na displej
vypiscasu = millis();
Edit: formátuj alespoň trochu zdrojový text, takhle je to nepřehledné a hůř se v tom dá vyznat. Je celá řada "zhezčovačů" kódu, např. tady
ještě mě napadlo udělat si takové počítadlo
dal bych
int pocitadlo;
void (setup)
pocitadlo = 0;
void (loop)
{
pocitadlo ++;
{ if (!(pocitadlo() % 500))
// aktualizoval by se čas na displeji
}
šlo by to i takto? mně to totiž píše, že nemůžu 'pocitadlo' použít jako funkci, takže asi ne..
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2, 3Další
Strana 2 z 3
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.