Arduino mega 2560 - zápis do pole mimo jádro

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od Patrik » 16 dub 2020, 09:36

Ahoj,

chtěl bych se zeptat, jestli je nějaká možnost zapsat do jednorozměrného pole hodnoty a upravovat je (dejme tomu pole má 180 osmi ciferných čísel). A mým požadavkem je, aby někdo úplně neznalý mohl např. v poznámkovém bloku pouze upravovat tyto osmi ciferná čísla v poli (bez toho aniž by zasahoval do jádra programu a prováděl kompilaci a upgrade programu). To by mělo jít přes čtení souboru, že? Nebude to problém? Ukládal bych také tyto hodnoty do paměti EEPROM. Nyní zde mám asi 130 těchto hodnot - ke změně hodnot často nedochází.. Dejme tomu 10x do měsíce.

Děkuji.

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

Re: Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od ondraN » 16 dub 2020, 10:43

Jsou vpodstatě dvě možnosti. Buď použít SD kartu, načíst soubor a z něj vysosat data, nebo napsat do kódu jednoduchý terminál a dát možnost data prohlížet a upravovat na PC přes sériovou linku. Bez znalosti souvislostí nedokážu posoudit, co je vhodnější.

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od Patrik » 16 dub 2020, 13:36

Chci se zeptat, jestli je nutností použít právě tu SD kartu. Do EEPROM budu zapisovat opravdu tak 10x za měsíc. Paměti mám zatím dostatek. V paměti EEPROM je již uloženo 130 čísel v poli, chci jen o možnost změny jejich hodnot bez toho, aniž bych musel provést opetovnou kompilaci programu a nahrávání celého programu. Chci také znemožnit to aby mi někdo chtě, či nechtěně pomenil funkci programu.. Proto bych chtěl, aby bylo možné upravovat jen čísla v poli třeba v Excelu nebo textovém dokumentu. Např. v techtaku by bylo 8 cifer jednoho pole na každém řádku a vlastně každý Radek by znamenal pole o vyšším indexu.. Kdyby někdo zadal například 10 čísel, tak by se prostě nacetlo jen prvních osum z toho daného radku

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od kiRRow » 16 dub 2020, 13:51

Jaký datový typ mají ty hodnoty ?
Na čerpadlu to řeším displejem a rotačním enkoderém (dochází pouze k malým korekčním změnám), na jiném projektu je místo enkodéru 4x4 klávesnice (číslo 3111.76 bych opravdu nechtěl kroutit na enkodéru). Obsluha přes menu vybere kterou hodnotu chce změnit, provede změnu a následně uloží všechny provedené změny do eeprom. Pokud to neuloží, program pojede s novou konfigurací až do restartu.

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od Patrik » 16 dub 2020, 21:29

Datový typ je celočíselný - přesněji řečeno unsigned long int. Takže mám vlastně pole o 130 čísel (nakonec 6 ciferných). Používám také displej 1602. Je nějaká možnost, že bych připojil tuto klávesnici: https://arduino-shop.cz/arduino/824-ese ... gJrQPD_BwE

A prováděl případné změny v poli přes tuto klávesnici? A uložení těchto hodnot? Např. mě napadlo momentálně toto řešení - přes RFID čtečku bych přečetl čip - MASTER, kterým by byla umožněna změna konfigurace hodnot v poli. Napadlo mě, jestli by šlo s touto klávesnici a zároveň displejem nějak spolupracovat... Např. že by se mi po načtení čipu MASTER objevilo na displeji - zadej hodnotu pole (vše mám poznačeno na papíře a v PC - vím, tak které číslo je kde uloženo)... Obsluha by zadala třeba číslo pole 120... Na základě toho by se na displeji objevilo - proveď změnu: a zadal by 6 ciferné číslo a uložil... Myslíte, že je to reálné?

Děkuji.

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od kiRRow » 16 dub 2020, 21:57

Přesně tuto klávesnici připojuji v projektu přes i2c IO expandér. Existuje pro to i knihovna, ale já ji nepoužil. Asi bych to napsal tak, že po stisku nějaké "funkční klávesy (já mám třeba C=ENTER a D=ESCAPE)" by si to vyžádalo nějaký PIN. Po zadání správného pinu mi bude umožněn vstup do programovacího módu. Zadám index číslo pole, které chci editovat, enter, zobrazím si data které tam momentálně jsou, zadám data která chci vložit, potvrdím enterem, kdykoliv můžu odejít escape bez změny. Pamatuj ale, že int zabírá dva bajty a na jednu adresu v eeprom se vlze bajt jenom jeden. Proměnná pole[2] bude na dvou adresách a to [2]*2 a ([2]*2)+1.

PS :
Místo PINu (myšleno jako kód) by šel třeba použít spínač na klíč ... vložíš klíč, otočíš (propojí to piny) a můžeš programovat.

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od Patrik » 16 dub 2020, 22:46

Jsi moc hodný, děkuji ti moc za rady. Ano, věděl jsem, že se do EEPROM na adresu vleze 1 Byte a proto jsem si říkal, jestli to také nebude nějaký problém... Ovšem po tvém vysvětlení tomu rozumím, že jsou vlastně adresy dvě, že ano? Musím nad tím pouvažovat, zda-li nekoupím nějakou SD kartu a nejlépe to zkusit naprogramovat s tou klávesnicí a displejem co mám. Možná než klávesnici a klíč, jak píšeš bych raději využil tu RFID čtečku, ne? Právě já čtu čísla karet v binární podobě... A ty převedu do desítkové a pracuji jen s posledními 6 ciframi (právě, abych si zbytečně nezaplňoval paměť). No, původně jsem pracoval pouze se 4 ciframi, ale při 120 kartách se mi stalo, že prostě poslední část binárních čísel byla stejná a mně tak vyšly třeba 3 karty v desítkové podobě se stejným číslem... Jde mi vlastně jen o to, přidávat do toho pole čísla v desítkové podobě nových RFID karet a případně zrušit přístup do systému vymazání daného čísla z paměti pole.

Edit: To znamená, že bych si vytvořil nějakou kartu s čipem styl - MASTER (a pokud by byla splněna podmínka) - načtení této karty s tímto desítkovým číslem, tak by proběhla funkce, která by umožnila právě editovat toto pole. Ušetřil bych tak náklady, ale hlavně čas s řešením nějakého klíče, či klávesnicí a jiných zásahů.

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od gilhad » 17 dub 2020, 02:48

Jen par poznamek
- 2 byty ma usigned int 0..65,535, cili pouze 4 mista
- unsigned long int jsou 4 byty - https://www.arduino.cc/reference/en/lan ... ignedlong/ - cili 0..4,294,967,295
- cili tam muzes ulozit 9 mist, nejen 6
- EEPROM ma na 2560 celkem 4kB, takze muzes ulozit az 1024 unsigned long
- nebo muzes pouzit unsigned long long, ktery ti ulozi 19 mist a muzes tam mit 512 karet https://en.wikipedia.org/wiki/C_data_types

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od Patrik » 18 dub 2020, 09:05

Chci se zeptat... Včera jsem nahrál dalších 100 karet, které mi jdou bez problémů.. Ovšem těch 127 které jsem měl nahrané nejdou... Fungovaly normálně.. Ale teď ta karta vrací jiné číslo, než vracela před tím.. Mám zveřejnit kód, který používám? Napadlo mě, jestli se neprepsaly nějak adresy.. Kód jsem neměnil, jestli jsem se nepreklepl.. Jen přidal 100 karet.

Patrik
Příspěvky: 199
Registrován: 02 dub 2020, 09:58
Reputation: 0

Re: Arduino mega 2560 - zápis do pole mimo jádro

Příspěvek od Patrik » 18 dub 2020, 09:42

Patrik píše:
18 dub 2020, 09:05
Chci se zeptat... Včera jsem nahrál dalších 100 karet, které mi jdou bez problémů.. Ovšem těch 127 které jsem měl nahrané nejdou... Fungovaly normálně.. Ale teď ta karta vrací jiné číslo, než vracela před tím.. Mám zveřejnit kód, který používám? Napadlo mě, jestli se neprepsaly nějak adresy.. Kód jsem neměnil, jestli jsem se nepreklepl.. Jen přidal 100 karet.
EDIT: Gilhaldovi děkuji za cenné informace... :-)

Odpovědět

Kdo je online

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