Hodiny pro Arduino

Hardware PC Arduino Hodiny pro Arduino

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Jednoduchý program na zobrazování hodin na vašem Arduinu. Programováno pro Arduino Uno a DFRobot LCD Keypad Shield, v případě použití jiného je nutné PŘENASTAVIT PINY.

V základu jsou nastaveny Praha a Tokio, je možnost přenastavit (v kódu) na jiné.

Návod

Nastavení hodin se provádí pomocí LEFT (hodiny) a RIGHT (minuty) tlačítka. Odstartování hodin se provádí tlačítkem SELECT. Dokud nestisknete SELECT, čas neběží. Tokio čas se nastavuje automaticky s využitím Prahy, zobrazí se po první uběhnuté minutě časovače (předtím se nezobrazuje nic).

Pro jistotu odstartování SELECT chvíli podrž, jestli ho držíš se kontroluje každých 300 milisekund.


Galerie

Program byl vytvořen v roce 2014.

 

Stáhnout

Staženo 584x (2.24 kB)
Aplikace je včetně zdrojových kódů

 

 

Program pro vás napsal Michal Vašíček
Avatar
Jak se ti líbí článek?
5 hlasů
Autor je webař, čas od času udělá i mobilní appku. Před Windows dává přednost Linuxu, ale ještě raději má macOS. Podílí se na překladech v Mozille, dobrovolničí i jinde, k tomu se snaží rozvíjet sebe sama.
Miniatura
Všechny články v sekci
Arduino
Miniatura
Následující článek
Arduino - Hello World
Aktivity (1)

 

 

Komentáře
Zobrazit starší komentáře (18)

Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:7.2.2016 17:04

jednoduše si nech na sériový port vypisovat naměřenou analogovou hodnotu a pinu

Odpovědět 7.2.2016 17:04
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Hellinger Jiri:7.2.2016 17:21

a to se děla jak a v jaké, testu

 
Odpovědět 7.2.2016 17:21
Avatar
Martin Dráb
Redaktor
Avatar
Martin Dráb:7.2.2016 17:29

No, pokud se očekávají přesné analogové hodnoty pro ta tlačítka, tak to podle mě není zrovna dobře udělané. Moje zkušenost je, že při stisku tlačítka ne vždy dostaneš přesně ty hodnoty, spíš něco v jejich okolí. Takže je k tomu třeba mít kód tolerantní.

Odpovědět 7.2.2016 17:29
2 + 2 = 5 for extremely large values of 2
Avatar
Hellinger Jiri:7.2.2016 17:32

malinko nechapu

 
Odpovědět 7.2.2016 17:32
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
Adam Ježek:7.2.2016 18:40

samozřejmě, jenže to Michal Vašíček, dokonalej jablíčkář, nikdy nepochopí, že ne všechno je přesné.

Odpovědět  +1 7.2.2016 18:40
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Hellinger Jiri:7.2.2016 19:15

no ajak tesy mam otestovat ty tlačítka abych viděl na seriovem portu ten kod

 
Odpovědět 7.2.2016 19:15
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Hellinger Jiri
Martin Dráb:7.2.2016 20:26

Předpokládám, že ten shield posílá vstup z tlačítek na pin A0, takže by mělo stačit si přečíst hodnotu tohoto pinu:

analogRead(0);

A pak ji poslat třeba na sériovou linku. Přes nějaké Serial.write (podívej se do dokumentace pro třídu Serial). Když jsem si s těmi tlačítky hrál (než jsem ten shield rozbil :-) ), nechával jsem si to číslo vypsat přímo na LCD.

Pokud tohle nechceš dělat, můžeš zkusit upravit kód detekující, které tlačítko bylo stisknuto. Místo testování A0 na přesnou hodnotu definuj pro každé tlačítko interval (třeba (X-100;X+100), kde X je aktuálně testovaná hodnota pro tlačítko). ADC převodník u té ATmegy, co se používá v Arduinu, je AFAIK 10bitový, dává ti tedy hodnoty v rozmezí 0-1023, takže se s těmi intervaly můžeš poměrně rozšoupnout.

Odpovědět 7.2.2016 20:26
2 + 2 = 5 for extremely large values of 2
Avatar
Hellinger Jiri:7.2.2016 20:56

moc děkuji za každou pomoc ale jsem začatečník tak jestli mohu poprosit o trošku přesnější navod pro začatečníka diky moooooc

 
Odpovědět 7.2.2016 20:56
Avatar
Odpovídá na Hellinger Jiri
Radovan Cermak:28.7.2016 10:19

Na zjisteni hodnot tlačitek nahraj na desku :

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);        // delay in between reads for stability
}

otevři serial monitor v arduinu a napiš si hodnoty tlačitek ktere tě to vypíše a ty potom jen uprav ve zdrojovym kodu pro hodiny.

tady je zdrojak ktery jsem si upravil k moji desce, treba budou hodnoty stejne.

#include <LiquidCrystal.h>
int button;
int buttonread;
bool start;
int hodiny;
int minuty;
int hodiny2;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Program Hodiny");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Cekej");
  lcd.setCursor(0, 1);
  lcd.print("uz to bude");
  delay(2000);
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("Zimni  a");
  lcd.setCursor(11, 1);
  lcd.print("Letni");
  lcd.setCursor(0, 0);
}

void loop() {
  if (!start) {
    if (analogRead(A0) == 406) {
      if (hodiny != 24) {
        hodiny = hodiny + 1;
      }
      if (hodiny == 24) {
        hodiny = 0;
      }
    }
    if (analogRead(0) == 0) {
      if (minuty != 60) {
        minuty = minuty + 1;
      }
      if (minuty == 60) {
        minuty = 0;
        if (hodiny != 24) {
          hodiny = hodiny + 1;
        }
        if (hodiny == 24) {
          hodiny = 0;
        }
      }
    }
    lcd.setCursor(0, 0);
    if (hodiny < 10) {
      lcd.print("0");
      lcd.print(hodiny);
    } else {
      lcd.print(hodiny);
    }
    lcd.setCursor(2, 0);
    lcd.print(":");
    lcd.setCursor(3, 0);
    if (minuty < 10) {
      lcd.print("0");
      lcd.print(minuty);
    } else {
      lcd.print(minuty);
    }
    delay(300);
    if (analogRead(0) == 639) {
      start = 1;
      hodiny2 = hodiny + 1;
    }
  }
  if (start) {
    delay(60000);
    minuty = minuty + 1;
    if (minuty == 60) {
       hodiny = hodiny + 1;
      minuty = 0;
    }
    if (hodiny > 23) {
      hodiny = 0;
    }
    if (hodiny2 > 23) {
      hodiny2 = 0;
    }
    lcd.setCursor(0, 0);
    if (hodiny < 10) {
      lcd.print("0");
      lcd.print(hodiny);
    } else {
      lcd.print(hodiny);
    }
    lcd.setCursor(2, 0);
    lcd.print(":");
    lcd.setCursor(3, 0);
    if (minuty < 10) {
      lcd.print("0");
      lcd.print(minuty);
    } else {
      lcd.print(minuty);
    }
    lcd.setCursor(11, 0);
    if (hodiny2 < 10) {
      lcd.print("0");
      lcd.print(hodiny2);
    } else {
      lcd.print(hodiny2);
    }
    lcd.setCursor(13, 0);
    lcd.print(":");
    lcd.setCursor(14, 0);
    if (minuty < 10) {
      lcd.print("0");
      lcd.print(minuty);
    } else {
      lcd.print(minuty);
    }
  }
}
Editováno 29.7.2016 14:17
 
Odpovědět 28.7.2016 10:19
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Radovan Cermak
Adam Ježek:28.7.2016 10:32

MÁME TU TLAČÍTKO NA VLOŽENÍ KÓDU!

Odpovědět  +2 28.7.2016 10:32
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 28. Zobrazit vše