Index. proměnná v Arduinu
Moderátor: Moderátoři
problem ulozeni = precteni data n cidlem z uartu
dale odeslani dat uartem data n do esp 12e
---nasleduje zpracováni dat
pak se vse opakuje
viz blokovka
.....
jedna se o vykonny systém ale Ty indexy // mě nejdou
v TB snadné jako facka v Cpp gramatický problema pro mě
.....
Ve svete už řeši koronu tester bastlíři na indiegogo
dale odeslani dat uartem data n do esp 12e
---nasleduje zpracováni dat
pak se vse opakuje
viz blokovka
.....
jedna se o vykonny systém ale Ty indexy // mě nejdou
v TB snadné jako facka v Cpp gramatický problema pro mě
.....
Ve svete už řeši koronu tester bastlíři na indiegogo
el.návrhář HW a SW a DPS
OK, ten HW asi řešit nemusíme. tak v čem je vlastně ten problém?
Tak ho přesně popiš vlastními slovy.
Neumíš vytvořit pole?
//místo n zadej počet vzorků //např 28
#define pocet_vzorku 28 //počet vzorků v jedné operaci
uint16_t data_pole [pocet_vzorku];
//tím se ti vytvoří v paměti oblast, celkem v délce 28x16 bitů.
//proměnná data_pole[0] ti ukazuje na začátek toho pole, je to vlastně pointer.
//potřebuješ uložit do 10-ho prvku data?
data_pole[9]= 1010; //pole je indexované od 0, tak proto ta 9.
Neumíš v něm pracovat?
//potřebuješ sečíst třeba 28 prvků toho pole?
uint32_t vysledek=0; //pokud budeš mít těch dat hodně tak raději 32bit proměnná
for (int i =0; i<pocet_vzorku;i++)
{
vysledek=vysledek + data_pole;
}
potřebuješ průměr z toho součtu?
vysledek = vysledek/pocet_vzorku; //v int
float vysledek_float = vysledek/pocet_vzorku; //ve float
Nebo v čem je ten problém?
Tak ho přesně popiš vlastními slovy.
Neumíš vytvořit pole?
//místo n zadej počet vzorků //např 28
#define pocet_vzorku 28 //počet vzorků v jedné operaci
uint16_t data_pole [pocet_vzorku];
//tím se ti vytvoří v paměti oblast, celkem v délce 28x16 bitů.
//proměnná data_pole[0] ti ukazuje na začátek toho pole, je to vlastně pointer.
//potřebuješ uložit do 10-ho prvku data?
data_pole[9]= 1010; //pole je indexované od 0, tak proto ta 9.
Neumíš v něm pracovat?
//potřebuješ sečíst třeba 28 prvků toho pole?
uint32_t vysledek=0; //pokud budeš mít těch dat hodně tak raději 32bit proměnná
for (int i =0; i<pocet_vzorku;i++)
{
vysledek=vysledek + data_pole;
}
potřebuješ průměr z toho součtu?
vysledek = vysledek/pocet_vzorku; //v int
float vysledek_float = vysledek/pocet_vzorku; //ve float
Nebo v čem je ten problém?
posilam prvni slepenec nema cenu poslat hned vsechno dik.
spravne je to resit s pomoci postupne jak si popsal....
code:
// definice pole o velikosti 200 prvků = ?
int x[0] // prvni prvek pole ale bude jich 199
void setup() {
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
}
void loop() {
//for i = 0 to 199 : x=serial.read : next i // x jsou 0-255 dec
// nasleduje kontrola pole a přenosu z a do monitoru
//for i = 0 to 199 :
Serial.print(char x); // musi byt tisteno ve tvaru char
//next i
}
spravne je to resit s pomoci postupne jak si popsal....
code:
// definice pole o velikosti 200 prvků = ?
int x[0] // prvni prvek pole ale bude jich 199
void setup() {
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
}
void loop() {
//for i = 0 to 199 : x=serial.read : next i // x jsou 0-255 dec
// nasleduje kontrola pole a přenosu z a do monitoru
//for i = 0 to 199 :
Serial.print(char x); // musi byt tisteno ve tvaru char
//next i
}
el.návrhář HW a SW a DPS
code:
// definice pole o velikosti 200 prvků = ?
int x[0] // prvni prvek pole ale bude jich 199
void setup() {
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
}
void loop() {
//for i = 0 to 199 : x=serial.read : next i // x jsou 0-255 dec
// nasleduje kontrola pole a přenosu z a do monitoru
//for i = 0 to 199 :
Serial.print(char x); // musi byt tisteno ve tvaru char
//next i
}
// definice pole o velikosti 200 prvků = ?
int x[0] // prvni prvek pole ale bude jich 199
void setup() {
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
}
void loop() {
//for i = 0 to 199 : x=serial.read : next i // x jsou 0-255 dec
// nasleduje kontrola pole a přenosu z a do monitoru
//for i = 0 to 199 :
Serial.print(char x); // musi byt tisteno ve tvaru char
//next i
}
Kód: Vybrat vše
unsigned int x[200]; //pole o rozměru 200 prvků, doporučuji unsigned, zápornou hodnotu tam asi mít nebudeš
void setup()
{
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
}
void loop()
{
for (int i=0;i<200;i++)
{
if (Serial.available() > 0)
{
x[i]==Serial.read ();
}
}
for (int i=0;i<200;i++)
{
Serial.print( char x[i]); //nebo Serial.println(char x[i]); //odřádkuje po každé hodnotě
}
}
//jak v arduino něco tisknout nevím, už s ním moc nepracuju, tohle je klasické "C" křísnuté s CPP :-)
se prekladac zarazil na poslednim radku
s hlaskou
exit status 1
expected primary-expression before 'char'
stav ukončení 1
očekávaný primární výraz před „char“
viz vypis
unsigned int x[200]; //pole o rozměru 200 prvků, doporučuji unsigned, zápornou hodnotu tam asi mít nebudeš
void setup()
{
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
}
void loop()
{
for (int i=0;i<200;i++)
{
if (Serial.available() > 0)
{
x==Serial.read ();
}
}
for (int i=0;i<200;i++)
{
Serial.println( char x); //nebo Serial.println(char x); //odřádkuje po každé hodnotě
}
}
s hlaskou
exit status 1
expected primary-expression before 'char'
stav ukončení 1
očekávaný primární výraz před „char“
viz vypis
unsigned int x[200]; //pole o rozměru 200 prvků, doporučuji unsigned, zápornou hodnotu tam asi mít nebudeš
void setup()
{
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
}
void loop()
{
for (int i=0;i<200;i++)
{
if (Serial.available() > 0)
{
x==Serial.read ();
}
}
for (int i=0;i<200;i++)
{
Serial.println( char x); //nebo Serial.println(char x); //odřádkuje po každé hodnotě
}
}
el.návrhář HW a SW a DPS
jj uz to funguje + doplnil jsem pausy 3s
ale problem je v tom že se načtou nulove hodnoty do
pole X(1-200)
nasledne se vytisknou a jde to furt dokola
....
proste chybí poseckani v prvnim cyklu zadavani hodnot dat
....
jinak to maka :
unsigned int x[200]; //pole o rozměru 200 prvků, doporučuji unsigned, zápornou hodnotu tam asi mít nebudeš
void setup()
{
delay(3000); // startovaci pauza 1
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
delay(3000); // startovaci pauza 2
}
void loop()
{
for (int i=0;i<200;i++)
{
if (Serial.available() > 0)
{
x==Serial.read ();
}
}
for (int i=0;i<200;i++)
{
Serial.println (x); //nebo Serial.println(char x); //odřádkuje po každé hodnotě
}
}
ale problem je v tom že se načtou nulove hodnoty do
pole X(1-200)
nasledne se vytisknou a jde to furt dokola
....
proste chybí poseckani v prvnim cyklu zadavani hodnot dat
....
jinak to maka :
unsigned int x[200]; //pole o rozměru 200 prvků, doporučuji unsigned, zápornou hodnotu tam asi mít nebudeš
void setup()
{
delay(3000); // startovaci pauza 1
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
delay(3000); // startovaci pauza 2
}
void loop()
{
for (int i=0;i<200;i++)
{
if (Serial.available() > 0)
{
x==Serial.read ();
}
}
for (int i=0;i<200;i++)
{
Serial.println (x); //nebo Serial.println(char x); //odřádkuje po každé hodnotě
}
}
el.návrhář HW a SW a DPS
Kód: Vybrat vše
unsigned int x[200]; //pole o rozměru 200 prvků, doporučuji unsigned, zápornou hodnotu tam asi mít nebudeš
void setup()
{
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
}
void loop()
{
//dokud nejsou nějaká data dostupná, tak čekej
while (Serial.available() == 0){}; //doplň nějaký test na přítomost dat na vstupu...třeba takhle
for (int i=0;i<200;i++)
{
if (Serial.available() > 0)
{
x[i]==Serial.read ();
}
}
for (int i=0;i<200;i++)
{
Serial.print(x[i]); //nebo Serial.println(char x[i]); //odřádkuje po každé hodnotě
}
}
Ono se to ale má rozběhnout po přijetí jednoho data ![Smile :-)](./images/smilies/icon_smile.gif)
Pokud to má fungovat jinak, musíš říct, co to má dělat.
Má to čekat na příjem hodně dat, a pak se to spustit? Kolik je hodně dat? Třeba 50?
tak oprav tu vstupní podmínku:
while (Serial.available() <= 50){}; //max je 64 bytů
Nebo to má fungovat jinak?
![Smile :-)](./images/smilies/icon_smile.gif)
Pokud to má fungovat jinak, musíš říct, co to má dělat.
Má to čekat na příjem hodně dat, a pak se to spustit? Kolik je hodně dat? Třeba 50?
tak oprav tu vstupní podmínku:
while (Serial.available() <= 50){}; //max je 64 bytů
Nebo to má fungovat jinak?
oprava = takto s navestim N100:
unsigned int x[200]; //pole o rozměru 200 prvků, doporučuji unsigned, zápornou hodnotu tam asi mít nebudeš
void setup()
{
delay(3000); // startovaci pauza 1
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
delay(3000); // startovaci pauza 2
}
void loop()
{
for (int i=0;i<200;i++)
{
N100: if (Serial.available() > 0)
{
x==Serial.read ();
Serial.println (x); // toto potvrzuje sparavnost dat v poli dat
// if posledni data =! komecnik (konecnik = pismeno A =41hex ) potom goto N100
}
}
unsigned int x[200]; //pole o rozměru 200 prvků, doporučuji unsigned, zápornou hodnotu tam asi mít nebudeš
void setup()
{
delay(3000); // startovaci pauza 1
Serial.begin(9600); // pozdeji bude navolena vyssi rychlost
int bytesSent = Serial.write("---PROPOJENO---");
delay(3000); // startovaci pauza 2
}
void loop()
{
for (int i=0;i<200;i++)
{
N100: if (Serial.available() > 0)
{
x==Serial.read ();
Serial.println (x); // toto potvrzuje sparavnost dat v poli dat
// if posledni data =! komecnik (konecnik = pismeno A =41hex ) potom goto N100
}
}
el.návrhář HW a SW a DPS
Kód: Vybrat vše
void loop()
{
for (int i=0;i<200;i++)
{
while (Serial.available() > 0) //pokud jsou nějaká data k dispozici
{
x[i]==Serial.read (); //načti byte do x
Serial.print(x[i]); //vytiskni data do UART
if (x[i]==0x41); //je hodnota načteného bytu rovna 0x41?
{
break; //tak mazej na začátek
}
}
}
}
Takhle?
Tohle není problém programování, ale zadání.
Zkus to popsat jako popis jednotlivých kroků:
1. Čekej na příjem dat.
2. Přijat byte - ulož ho do proměnné
3. Vytiskni ho.
4. Zkontroluj, zda je jeho hodnota 0x41. Ta hodnota 0x41 má nějaký speciální význam? Má se vynulovat index a začít počítat od znovu?
5. Pokud ano - udělej co?
6. Pokud ne - udělej co?
7. vrať se na začátek a čekej na další byte.
Doplň ty ano - ne.
Naposledy upravil(a) popopepe dne 27 bře 2020, 22:08, celkem upraveno 1 x.