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Č
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
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
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[i];
}
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?
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
a to co chybí a neumim popisu jazykem Basic
dik za pomoc vydrž
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Č
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[i]=serial.read : next i // x[i] jsou 0-255 dec
// nasleduje kontrola pole a přenosu z a do monitoru
//for i = 0 to 199 :
Serial.print(char x[i]); // musi byt tisteno ve tvaru char
//next i
}
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
// 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[i]=serial.read : next i // x[i] jsou 0-255 dec
// nasleduje kontrola pole a přenosu z a do monitoru
//for i = 0 to 199 :
Serial.print(char x[i]); // 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 :-)
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
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Č
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[i]==Serial.read ();
}
}
for (int i=0;i<200;i++)
{
Serial.println( char x[i]); //nebo Serial.println(char x[i]); //odřádkuje po každé hodnotě
}
}
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 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[i]==Serial.read ();
}
}
for (int i=0;i<200;i++)
{
Serial.println (x[i]); //nebo Serial.println(char x[i]); //odřádkuje po každé hodnotě
}
}
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Č
aby program cekal na dalsi data a nepracoval hned ve smycce do konce
for
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
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ě
}
}
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
napisu tedy slepenec v TB s tim konecnikem
a vylepsenej o tisk zadanejch hodnot hned v prvni smycce
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
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?
- elnovy
- Doporučuje se dohled statného moderátora
- Příspěvky: 884
- Registrován: 04 črc 2010, 00:00
- Bydliště: JČ
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[i]==Serial.read ();
Serial.println (x[i]); // toto potvrzuje sparavnost dat v poli dat
// if posledni data =! komecnik (konecnik = pismeno A =41hex ) potom goto N100
}
}
Bydliště: JČ
Povolání: Vývoj elektroniky+DPS
Zájmy: Programování C++ ,assembler
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?
Abych se přiznal, nějak se trošku ztrácím v tom, co to má dělat. Přijmeš byte, vytiskneš ho, a zkontroluješ ho na hodnotu 0x41. A co dál? Stejně se to v té smyčce bude motat donekonečna.
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.