Hodiny pro Arduino

Hardware PC Arduino Hodiny pro Arduino

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 520x (2.24 kB)
Aplikace je včetně zdrojových kódů

 

  Aktivity (1)

Program pro vás napsal Michal Vašíček
Avatar
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.

Jak se ti líbí článek?
Celkem (5 hlasů) :
4.84.84.84.84.8


 


Miniatura
Všechny články v sekci
Arduino
Miniatura
Následující článek
Arduino - Hello World

 

 

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

Avatar
Adam Ježek
Tým ITnetwork
Avatar
Adam Ježek:

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

Odpovědět 7. února 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:

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

 
Odpovědět 7. února 17:21
Avatar
Martin Dráb
Redaktor
Avatar
Martin Dráb:

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. února 17:29
2 + 2 = 5 for extremely large values of 2
Avatar
Hellinger Jiri:

malinko nechapu

 
Odpovědět 7. února 17:32
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
Adam Ježek:

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. února 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:

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

 
Odpovědět 7. února 19:15
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na Hellinger Jiri
Martin Dráb:

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. února 20:26
2 + 2 = 5 for extremely large values of 2
Avatar
Hellinger Jiri:

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. února 20:56
Avatar
Odpovídá na Hellinger Jiri
Radovan Cermak:

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. července 14:17
 
Odpovědět 28. července 10:19
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Radovan Cermak
Adam Ježek:

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

Odpovědět  +2 28. července 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