Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Index. proměnná v Arduinu
Jdi na stránku Předchozí  1, 2, 3  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
elnovy



Založen: Jul 04, 2010
Příspěvky: 847

PříspěvekZaslal: pá březen 27 2020, 18:11    Předmět: Citovat

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



blokovka index n.png
 Komentář:
 Velikost:  19.38 kB
 Zobrazeno:  109 krát

blokovka index n.png



_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
popopepe



Založen: Oct 26, 2005
Příspěvky: 552

PříspěvekZaslal: pá březen 27 2020, 18:35    Předmět: Citovat

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[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?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
elnovy



Založen: Jul 04, 2010
Příspěvky: 847

PříspěvekZaslal: pá březen 27 2020, 19:21    Předmět: Citovat

jj za chvili poslu slepenec Cpp a TB
a to co chybí a neumim popisu jazykem Basic
dik za pomoc vydrž

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
elnovy



Založen: Jul 04, 2010
Příspěvky: 847

PříspěvekZaslal: pá březen 27 2020, 20:00    Předmět: Citovat

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[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
}

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
popopepe



Založen: Oct 26, 2005
Příspěvky: 552

PříspěvekZaslal: pá březen 27 2020, 20:15    Předmět: Citovat

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
}

kód:

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 :-)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
elnovy



Založen: Jul 04, 2010
Příspěvky: 847

PříspěvekZaslal: pá březen 27 2020, 20:34    Předmět: Citovat

hned to ozkousim a napisu
_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
elnovy



Založen: Jul 04, 2010
Příspěvky: 847

PříspěvekZaslal: pá březen 27 2020, 20:45    Předmět: Citovat

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[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ě
}

}

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
popopepe



Založen: Oct 26, 2005
Příspěvky: 552

PříspěvekZaslal: pá březen 27 2020, 20:49    Předmět: Citovat

Zkus ten serial změnit:

Serial.println(x[i]); //dej ten char pryč
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
elnovy



Založen: Jul 04, 2010
Příspěvky: 847

PříspěvekZaslal: pá březen 27 2020, 20:59    Předmět: Citovat

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[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ě
}

}

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
elnovy



Založen: Jul 04, 2010
Příspěvky: 847

PříspěvekZaslal: pá březen 27 2020, 21:03    Předmět: Citovat

proste kazde zadavane data bude muset byt zakocene konecnikem
aby program cekal na dalsi data a nepracoval hned ve smycce do konce
for

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
popopepe



Založen: Oct 26, 2005
Příspěvky: 552

PříspěvekZaslal: pá březen 27 2020, 21:06    Předmět: Citovat

kód:

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ě
 }

}
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
elnovy



Založen: Jul 04, 2010
Příspěvky: 847

PříspěvekZaslal: pá březen 27 2020, 21:13    Předmět: Citovat

zase se to rozbehne po prvnim zadani data
napisu tedy slepenec v TB s tim konecnikem
a vylepsenej o tisk zadanejch hodnot hned v prvni smycce

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
popopepe



Založen: Oct 26, 2005
Příspěvky: 552

PříspěvekZaslal: pá březen 27 2020, 21:21    Předmět: Citovat

Ono se to ale má rozběhnout po přijetí jednoho data Smile


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?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
elnovy



Založen: Jul 04, 2010
Příspěvky: 847

PříspěvekZaslal: pá březen 27 2020, 21:24    Předmět: Citovat

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

}
}

_________________
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail
popopepe



Založen: Oct 26, 2005
Příspěvky: 552

PříspěvekZaslal: pá březen 27 2020, 21:38    Předmět: Citovat

kód:

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.


Naposledy upravil popopepe dne pá březen 27 2020, 22:08, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Programování PIC, ATMEL, EEPROM a dalších obvodů Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2, 3  Další
Strana 2 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.18 sekund