Data do řetězce
Re: Data do řetězce
Ondro, pomohlo mi to, díky. Místo Random, jsem dal analog vstup s potenciometrem, abych mohl zkoušet.
Ale ono se to sekne. Nevadí, je to pro mne vodítko, jak to mohu vyřešit. Toto mi pomohlo.
Abych vysvětlil. Potřebuji zadat třeba 5 klíčenek se dvěma tlačítky, dálkového ovládání a pak mít výstup A a B.
Nedokázal jsem najít nic, co by to umělo. Dají se koupit Rx přijímače 433MHz, ale oni neumí klíčenky od Proteco.
A tak jsem chtěl toto řešit Arduínkem...
Ale ono se to sekne. Nevadí, je to pro mne vodítko, jak to mohu vyřešit. Toto mi pomohlo.
Abych vysvětlil. Potřebuji zadat třeba 5 klíčenek se dvěma tlačítky, dálkového ovládání a pak mít výstup A a B.
Nedokázal jsem najít nic, co by to umělo. Dají se koupit Rx přijímače 433MHz, ale oni neumí klíčenky od Proteco.
A tak jsem chtěl toto řešit Arduínkem...
Re: Data do řetězce
Možná jsem to blbě pochopil. Ten prográmek vyžaduje po každém číslu stisk nějakého tlačítka, jinak nepokračuje. Taky po každém vypnutí nebo resetu se vše vymaže. Pokud to má nějak dále sloužit, doporučuji oddělit učící a detekční fázi a obsah polí si uložit do EEPROM. Pak se zase můžou obnovit po resetu. Taky je dobré, si nejdříve dát dohromady, jak to má přesně fungovat a toho se držet při psaní kódu.
Re: Data do řetězce
OK rozumím... učení je jen při nějakém Setupu a pak se to jen čte a on ovládá relé A nebo B.
Ještě prosím, snad poslední dotaz... Jak se pole uloží do EEPROM a jak se pak zase načte po Resetu?
Ještě prosím, snad poslední dotaz... Jak se pole uloží do EEPROM a jak se pak zase načte po Resetu?
Re: Data do řetězce
Asi by bylo dobré si trochu prostudovat základní knihovny arduina https://www.arduino.cc/en/Reference/Libraries
EEPROM je paměť, která drží data i při vypnutí napájení, ale je dost pomalá a snese jen omezený počet zápisů (cca 100.000).
Pro tvůj účel, by bylo nejlepší,udělat si strukturu, ve které by byly obě pole i jejich indexy. Struktura jde potom zapsat celá příkazem EEPROM.put() a načíst zase příkazem EEPROM.get().
Pro nastavení režimů, mě třeba napadá, držet stisknuté tlačítko Ignore a zapnout nebo resetovat arduino. To si v části programu, která bude probíhat pouze jednou na začátku, zjistí že je zmáčknuté tlačítko a začne se provádět větev pro setup. Po skončení zadání kódů zase arduino restartovat bez stisknutého tlačítka a ono se vydá do větve detekce a spínání. Taky, jakmile začneš něco ukládat do EEPROM, tak musíš mít i prostředek, jak to odstranit nebo nějaký kód přepsat. To už začne být o dost složitější, takže nejdřív si zkus udělat funkční kód se strukturou a jenom s editací v RAMce a teprve pak začít experimentovat s EEPROM.
EEPROM je paměť, která drží data i při vypnutí napájení, ale je dost pomalá a snese jen omezený počet zápisů (cca 100.000).
Pro tvůj účel, by bylo nejlepší,udělat si strukturu, ve které by byly obě pole i jejich indexy. Struktura jde potom zapsat celá příkazem EEPROM.put() a načíst zase příkazem EEPROM.get().
Pro nastavení režimů, mě třeba napadá, držet stisknuté tlačítko Ignore a zapnout nebo resetovat arduino. To si v části programu, která bude probíhat pouze jednou na začátku, zjistí že je zmáčknuté tlačítko a začne se provádět větev pro setup. Po skončení zadání kódů zase arduino restartovat bez stisknutého tlačítka a ono se vydá do větve detekce a spínání. Taky, jakmile začneš něco ukládat do EEPROM, tak musíš mít i prostředek, jak to odstranit nebo nějaký kód přepsat. To už začne být o dost složitější, takže nejdřív si zkus udělat funkční kód se strukturou a jenom s editací v RAMce a teprve pak začít experimentovat s EEPROM.
Re: Data do řetězce
Jasňačka... mám se co učit stále, ale nejvíc se naučím, když něco bastlím, to mě dá nejvíc. O počtu zápisů EEPROM vím,
V tomto mém případě jsem usoudil, že k zápisu dojde vždy pouze při zadání nové klíčenky, jednou za čas.
A tak se snažím vrátit se o krok zpět a zkusit třeba z toho analogového vstupu postupně zadat třeba 5 hodnot do pole - stiskem tlačítka A
pak stiskem tlačítka B toto pole zobrazit a pak to dokázat, když provedu Reset. Takže to uložení do EEPROM mi nejde
V tomto mém případě jsem usoudil, že k zápisu dojde vždy pouze při zadání nové klíčenky, jednou za čas.
A tak se snažím vrátit se o krok zpět a zkusit třeba z toho analogového vstupu postupně zadat třeba 5 hodnot do pole - stiskem tlačítka A
pak stiskem tlačítka B toto pole zobrazit a pak to dokázat, když provedu Reset. Takže to uložení do EEPROM mi nejde
Re: Data do řetězce
Nesmíš zapomenout, že v poli máš typ long, zatímco v EEPROM je to byte. Velikost long v bytech zjistíš pomocí funkce sizeof(long). Takže třeba první člen pole dáš pomocí EEPROM.put() od adresy 0. Ale on zabere víc, než jeden byte. Takže další musíš dát od předešlé EEPROM adresy + sizeof(long), jinak se ti přepíšou a pak tam budou nesmysly. Indexy jsou byte, takže je to bez problémů.
Re: Data do řetězce
Tak jsem blbější, než jsem si myslel. Už mi funguje vše, ale uložit to neumím...
Nikde nemohu najít, jak toto pole uložit a jak ho zase načíst... tak to snad vzdám. Asi patřím mezi ty, co si berou velké sousto
Nikde nemohu najít, jak toto pole uložit a jak ho zase načíst... tak to snad vzdám. Asi patřím mezi ty, co si berou velké sousto
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Data do řetězce
Najdi si příklady na internetu, Arduina tu jsou už opravdu dlouho a prakticky vše je k nalezení, včetně ukládání do EEPROM i větších dat - a to i v češtině.
Tady je to sice v angličtině, ale jsou tal už hotové funkce pro ukládání a čtení FLOAT
http://www.alexenglish.info/2014/05/sav ... ng-unions/
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Data do řetězce
ulozis to takhle
zpět to dostaneš podobně, ale místo update dáš read a bude se to ukládat do proměnných. Místo put zase použiješ get. To už si zkus sám
Kód: Vybrat vše
int EEAdr=0; //pocatecni adresa v EEPROM
EEPROM.update(EEAdr,IdxA);
EEAdr++; //ulozil se jeden byte, tak index EEPROM posuneme o jednu
EEPROM.update(EEAdr,IdxB);
EEAdr++;
for(byte i=0; i<MaxNum; i++){ //ulozi hodnoty pole A
EEPROM.put(EEAdr,A[i]);
EEAdr=EEAdr+sizeof(long);
}
for(byte i=0; i<MaxNum; i++){ //ulozi hodnoty pole B
EEPROM.put(EEAdr,B[i]);
EEAdr=EEAdr+sizeof(long);
}
Re: Data do řetězce
HEUREKA !!! Funguje to, jsi borec. Díky moc. Mám to na UNU a chtěl jsem to dát na ATtiny85, ale on neumí RCswitch.
Tak musím většího brouka...
Tak musím většího brouka...
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 17 hostů