Data do řetězce

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Data do řetězce

Příspěvek od Ludek » 22 kvě 2020, 09:30

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...

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Data do řetězce

Příspěvek od ondraN » 22 kvě 2020, 10:29

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.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Data do řetězce

Příspěvek od Ludek » 22 kvě 2020, 12:11

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?

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Data do řetězce

Příspěvek od ondraN » 22 kvě 2020, 14:21

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.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Data do řetězce

Příspěvek od Ludek » 22 kvě 2020, 16:19

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 :-(

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Data do řetězce

Příspěvek od ondraN » 22 kvě 2020, 20:45

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ů.

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Data do řetězce

Příspěvek od Ludek » 23 kvě 2020, 13:17

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 :-(

Uživatelský avatar
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

Příspěvek od pavel1tu » 23 kvě 2020, 16:31

Ludek píše:
23 kvě 2020, 13:17
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 :-(
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"

ondraN
Příspěvky: 932
Registrován: 08 srp 2019, 20:01
Reputation: 0

Re: Data do řetězce

Příspěvek od ondraN » 23 kvě 2020, 16:34

ulozis to takhle

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);
}

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 :mrgreen:

Ludek
Příspěvky: 289
Registrován: 02 pro 2019, 08:14
Reputation: 0
Bydliště: České Budějovice

Re: Data do řetězce

Příspěvek od Ludek » 23 kvě 2020, 17:28

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...

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů