Index. proměnná v Arduinu
Moderátor: Moderátoři
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
Index. proměnná v Arduinu
potřebuji použít v programu Cpp arduina více proměnných
typu float a(n) kde n = 1 až 200
indexovanou proměnnou jayzk neumí jak to obejít ???
….
specifikovat proměnné např a , b ,c , x , y , z je nedostačující a zdlouhavé
děkuji za rady
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
elnovy píše:indexovanou proměnnou jayzk neumí
https://www.arduino.cc/reference/tr/lan ... pes/array/
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
int x1
int x2
int x3
…….
int x200
ale ten index mi tam stále chybí pro jednoduché zpracování vysledků
odpoveď pole vede na složité zpracování hodnot x(n)
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
ale indexovana promenna jako v TB by bylo daleko lepši ....
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
elnovy píše:Na přežití korony potřebuji poradit s programováním :
potřebuji použít v programu Cpp arduina více proměnných
typu float a(n) kde n = 1 až 200
indexovanou proměnnou jayzk neumí jak to obejít ???
….
specifikovat proměnné např a , b ,c , x , y , z je nedostačující a zdlouhavé
děkuji za rady
V C++ index pole začíná od nuly.
Kód: Vybrat vše
float mojePole[199];
mojePole[0] = 3.14;
mojePole[66] = mojePole[0] / 3;
Nevím jaký máš cílový µC (kolik paměti), ale u "malých" AVR takovým polem spotřebuješ téměř celou dostupnou datovou paměť.
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
a pak mám ESP 12 ta je asi 100x větši ....
snad to zvládnu
jedná se mi načist ze senzoru
v čase 1 --- 200 hodnoty int x (1) .....int x (200)
po načtení provést
1. Součet všech hodnot na to bych nepotřeboval indexy
2. ostatní operace různé ..tzn různé operace pro různé indexy
indexy se budou v čase měnit dle programu
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
Ten index od jedničky se dá vyřešit prostým přičtením jedničky:
Kód: Vybrat vše
mojePole[n+1] =
...
ale lepší (kód je pak taky kratší) je prostě si zvyknout že první buňka pole má index nula.
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
int mojePole x[199];
mojePole x[0] = 3;
mojePole x[1] = 8;;
...
mojePole x[199] = 2888;
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
a parametrem je řidící napětí proměnné v čase // něco jako polarograf //
--------------
Senzorem bude externe umisteny attiny 13 smd merici adc 10 bit data bude odesilat
přes UART 9600Bd bezdrátově na zpracování balíčků dat o objemu cca 0-199 hodnot
následně po rychlém zpracování odešle zase po UARTU výsledek .
Řešení přes pole zatím mi nefunguje
zítra pošlu program ...modifikovaný na deset hodnot s ukázkou zpracování dat jak by to mělo vypadat….
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
Nebo budeš snímat jenom ten rozsah 0-1V (což je číselně 0 až cca 200 v 10 bit ADC)?
To není float, to je obyčejný uint, a s tím omezením 0-200 dokonce jenom byte.
Jestli ti můžu doporučit, utíkej od floatů co nejdál můžeš, obzvláště na uC, který nemá MPU jednotku (a to atmega nemá). Jednak to zpracování dlouho trvá, jednak přesnost není nic moc.
Předpokládám, že teda potom to celé pole chceš sečíst, vydělit počtem prvků v poli a ten výsledek někam poslat? Pak ti stačí jenom jedna proměnná float, do které umístíš ten konečný výsledek. Všechno ostatní budou byte nebo int.
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
to co radis je jen cast toho co chci
strucne
cidlo : adci snimani s citlivosti 1mV
prenos pres vzdálenostni bariéru cca 12m bezdrátově Uartem
do cidla x(n)=data(n) o hodnotě 0-255
z čidla do ESP12E = vykponný 32bit procesor data y(n) o hodnotě 0-1024
…….
Esp 12 zpracuje tento balik dat jako integrál v času n od 0 do 199
Pokud pole nebude potreba budu rád
ale stejně vidím problém v přenosu dat do čidla
pak ten integrální výpočet
a nasledné odeslání zase ven uartem
…….
pokud to ještě není jasné poslu blokove schema
zitra poslu program furt mi to preklqdac nebere = hlasi chybu
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
Máš nějaké čidlo ( na výstupu čidla měříš napětí v rozsahu cca 0-1V-> připojeno k ADC ATINY).
Atiny bude napájené dejme tomu 5V, takže reference pro to ADC bude 5V, děleno 1024 (10bit AC), bude jeden bit cca 5mV. Nikoliv 1mV. Plus nějaké chyby převodu, takže spíš horší. To jen pro upřesnění. Pokud to nemáš vymyšleno nějak jinak
Ta ATINY pošle (buď jeden nebo více výsledků převodu z ADC)-> převodník UART-> ESP.
, ESP s tím provede nějakou operaci (integraci) a ten výsledný parametr zase pošleš zpět kam ? To čidlo má nějaký další vstup, který je řízen tím výsledkem té operace? A ten žere data, nebo napětí?
Jinak bez toho pole je to sice řešitelné, ale asi to nebude to pravé ořechové. Přesně pro tohle jsou ta pole vymyšlena. Jenom hýbeš pointerem a mrskáš se v poli jako ryba ve vodě