Diskuze: Časovač
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Tak v určitých intervalech nebo v určitých časech? Trochu rozdíl
Máš 5 různých časů nebo máš jeden čas a pak 4 časové konstanty tipu 5 minut delay?
Na přesný kód určitě jo, na daní postupu jak na to je to fuk
Ahoj,
omlouvám se, psal jsem to narychlo a asi jsem neposkytl dostatek informací...
Zároveň se omlouvám, že to doplňuji až nyní.
Používám microcontroler ATmega328p s Arduino bootloaderem, tedy platforma Arduino.
Jsou to dané časy. Intervalem jsem myslel rozmezí dvou časů, po které
bude pin zapnutý. Ty časy by měli být uložené v nějaké proměnné,
ideálně asi poli, později je budu chtít měnit přes webové rozhraní. Ale
nevím přesně, jak časy ukládat, stačí to s přesností na minuty. Napadlo
mě jako dvě pole – jedno pro hodiny, druhé pro minuty, a nebo ukládat
např. počet minut od začátku dne...
Díky.
Řešení je jistě víc - já používám toto :
typedef struct
{
int startTime ;
int stopTime ;
} TimeInterval;
TimeInterval intervals[5];
intervals[1].startTime = 525;//atd....
Hodnoty jsou, tak jak jsi uvažoval v minutách - tedy v rozmezí 0-1440 pro
24h
A to celé samozřejmě zálohovat v eeprom
Díky, co je to to typedef struct? To je nějaký zvláštní typ pole?
A kam v tom dám kód pro zapnutí/vypnutí pinu? Do těch {} za stopTime něco
takového:?
digitalWrite(pin, !digitalRead(pin));
A jéje - mělo mně napadnout , že jsi C-čkem (téměř) nepolíbený
Ale v podstatě jsi jen obětí Arduinovského "instantního" přístupu k programování.
Nejdřív ti teda vysvětlím, a co se ptáš :
typedef struct znamená, že si definuješ vlastní datový typ a že to bude struktura - a ano, v jistém smyslu se dá říct,že struktura je jistý "zvláštní" typ pole jen se k jednotlivým položkám nepřistupuje pomocí jejich indexu, ale pomocí jejich jména
v té struktuře máš pojmenované dvě proměnné typu int kam se ukládají požadované časy - podle tvého zadání je to interval "od-do"
dále
TimeInterval intervals[5];
je už skutečné pole výše definovaných struktur a pomocí
intervals[1].startTime = 525;
int cas_x =intervals[2].stopTime ;
můžeš zapisovat/číst jejich hodnoty
a výstupy budeš ovládat
if(time_now == intervals[1].startTime )digitalWrite(pin, HIGH);
else if(time_now == intervals[1].stopTime )digitalWrite(pin, LOW);
přičemž time_now bude nějaký čas generovaný nějakým obvodem reálného času který tam jistě máš abys věděl, kdy spínat výstupy
na druhou stranu ale nečekej, že ti tu budeme dávat školení ze základů
jazyka C - v případě arduina dokonce C++
na to je spousta hotových tutoriálů - třeba právě zde
já osobně ti od této chvíle jsem ochotný pomoct s jakýmkoliv tvým řešením či pokusem o něj případně otázky spojené s hardwarem - na otázky "jak mám udělat ?" už reagovat nebudu
a ano, v jistém smyslu se dá říct,že struktura je jistý "zvláštní" typ pole jen se k jednotlivým položkám nepřistupuje pomocí jejich indexu, ale pomocí jejich jména
zajímavě podaná definice struktury
Pokud máš lepší vysvětlení pro někoho, kdo do dneška neměl o
existenci struktury tušení tak prosím.
Když se nad tím zamyslíš, tak struktura je fyzicky jen "pole" (chápej jako
oblast) bajtů v paměti
a tedy
int cislo[2];
a
struct
{
int cislo1;
int cislo2;
} cislo;
jedno jest a můžeš na to aplikovat co jsem napsal
Struktura je sdružený datový typ složený ze dvou nebo více proměnných nazývaných prvky (členy, složky) struktury. Na rozdíl od pole, kde jsou všechny prvky stejného typu, může mít každý prvek struktury svůj vlastní datový typ platný v jazyce C, který se může lišit od typu ostatních prvků.
Obecný formát definice struktury:
struct jmeno_typu {
typ prvek1;
typ prvek2;
...
typ prvekN;
} seznam_promennych;
Položka jmeno_typu a seznam_promennych není povinná, ale musí vždy být uvedena alespon jedna z nich. Pro pevný počet struktur není potřeba zadávat jmeno_typu. Uvedeme-li jmeno_typu, můžeme deklarovat proměnné zvlášt dle potřeby následujícím způsobem:
struct jmeno_typu seznam_promennych;
Zobrazeno 11 zpráv z 11.