Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Pomoc s programem - arduino uno
Jdi na stránku Předchozí  1, 2, 3  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další)
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: st duben 11 2018, 18:08    Předmět: Citovat

Přijde mi už divné
kód:
int rtc[68]

a poté
kód:
 RTC.get(rtc, true)


Proč by se z DS1307 četlo 68 "dvojbajtů" ?
Dej sem prosím odkaz na DS1307.h který používáš (po internetu jich koluje celá řada).

A hlavně
kód:
char cas[9];
  // zapíše do pole znaků cas hodnoty z rtc
 
 sprintf(cas, "%02d.%02d.%02d  %02d:%02d", rtc[4],rtc[5],rtc[6],rtc[2],rtc[1]);

vyhradíš si 10 byte a to je evidentně málo. sprintf ti píše "za roh" po paměti
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
passion



Založen: Jul 22, 2005
Příspěvky: 900
Bydliště: Žilina

PříspěvekZaslal: st duben 11 2018, 18:29    Předmět: Citovat

Máš 68bajtový čas,ten ti vymaže zvyšok LCD.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: st duben 11 2018, 18:38    Předmět: Citovat

no
kód:
int rtc[68]
není 68 byte
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
passion



Založen: Jul 22, 2005
Příspěvky: 900
Bydliště: Žilina

PříspěvekZaslal: st duben 11 2018, 19:23    Předmět: Citovat

Ušlo mi to int, 2x. Sorry
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
luki28n



Založen: Mar 06, 2018
Příspěvky: 23

PříspěvekZaslal: st duben 11 2018, 19:26    Předmět: Citovat

http://www.santy.cz/moduly-c22/arduino-nano-mega-cas-time-datum-date-modul-baterie-mereni-i26/?gclid=Cj0KCQiAuZXQBRDKARIsAMwpUeTJX__KlewxIxAa2mJk0hSp4HlpwGMbVl7JGp211WBvVxV-ZHNpsqUaAl_UEALw_wcB
tady je odkaz..

program na ten čas mám z nějaké stránky, nemůžu ji najít teď..

já tomu relativně rozumím, pochopím příkazy některé, jak mají fungovat, ale víc do hloubky nevidím.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
luki28n



Založen: Mar 06, 2018
Příspěvky: 23

PříspěvekZaslal: čt duben 12 2018, 8:32    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: čt duben 12 2018, 11:19    Předmět: Citovat

Zkus nejdřív změnit tu deklaraci
kód:
char cas[9]

na
kód:
char cas[15]


Doufám že dobře počítám: 5x "dvojcifra" + 2x tečka + 1x dvojtečka + 2x mezera + #0
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
luki28n



Založen: Mar 06, 2018
Příspěvky: 23

PříspěvekZaslal: čt duben 12 2018, 14:42    Předmět: Citovat

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
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Atlan



Založen: May 10, 2004
Příspěvky: 4507
Bydliště: Košice

PříspěvekZaslal: čt duben 12 2018, 16:20    Předmět: Citovat

Ved to arduinisti... Takzvany lepici kodov. Ale su medzi nimi aj machri ktory to stym vedia.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: čt duben 12 2018, 18:31    Předmět: Citovat

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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
luki28n



Založen: Mar 06, 2018
Příspěvky: 23

PříspěvekZaslal: čt duben 12 2018, 21:00    Předmět: Citovat

Honzo to si asi neber osobně, hezky to vystihnul Smile
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.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
luki28n



Založen: Mar 06, 2018
Příspěvky: 23

PříspěvekZaslal: pá duben 13 2018, 11:13    Předmět: Citovat

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ří
 
int rtc[68];
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}
};

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
 
 sprintf(cas, "%02d.%02d.%02d  %02d:%02d", rtc[4],rtc[5],rtc[6],rtc[2],rtc[1]);
   
  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
 
}
  if(digitalRead(magnet) == HIGH and zamceno==1){

digitalWrite(sirena, HIGH);
delay(3000);
digitalWrite(sirena,LOW);
}

else{

digitalWrite(sirena, LOW);

}

{
  // 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]))
        {
         
          lcd.print("Vitej Luki");
          zamceno=0;
          delay(2000);
          lcd.clear();
         
          // vynuluj stiskuté tlačítka
          pressedKey[0] = '0';
          pressedKey[1] = '0';
          pressedKey[2] = '0';
          pressedKey[3] = '0';
        }
   else if ((pressedKey[0] == code2[0]) && (pressedKey[1] == code2[1]) && (pressedKey[2] == code2[2]) && (pressedKey[3] == code2[3]))
    {
    lcd.print("Vitej mami");
          zamceno=0;
          delay(2000);
          lcd.clear();
         
          // vynuluj stiskuté tlačítka
          pressedKey[0] = '0';
          pressedKey[1] = '0';
          pressedKey[2] = '0';
          pressedKey[3] = '0';
   
    }
    else if ((pressedKey[0] == code3[0]) && (pressedKey[1] == code3[1]) && (pressedKey[2] == code3[2]) && (pressedKey[3] == code3[3]))
    {
    lcd.print("Vitej tati");
          zamceno=0;
          delay(2000);
          lcd.clear();
         
          // vynuluj stiskuté tlačítka
          pressedKey[0] = '0';
          pressedKey[1] = '0';
          pressedKey[2] = '0';
          pressedKey[3] = '0';
   
    }
   
   
    }
   
    // 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; 
 
   
    }
}
}
}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: pá duben 13 2018, 11:29    Předmět: Citovat

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
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
luki28n



Založen: Mar 06, 2018
Příspěvky: 23

PříspěvekZaslal: pá duben 13 2018, 11:37    Předmět: Citovat

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..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
FHonza



Založen: Nov 20, 2012
Příspěvky: 1453
Bydliště: Praha

PříspěvekZaslal: pá duben 13 2018, 11:41    Předmět: Citovat

No proměnná nejde používat jako funkce, překladač má vždy pravdu Smile
Vyhoď ty dvě závorky.
kód:
 if (!(pocitadlo % 500))



A pročíst základy C/C++ není na škodu. Např. https://www.sallyx.org/sally/c/

a ještě edit: nedávej podmínku do složených závorek, je to zbytečné a znepřehledňuje to kód
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další) Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3  Další
Strana 2 z 3

 
Přejdi na:  
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

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

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.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.16 sekund