Založen: Jan 13, 2007 Příspěvky: 15516 Bydliště: Olomouc
Zaslal: út červenec 04 2017, 5:30 Předmět:
Celeron napsal(a):
a když přijde, plním "vstupní buffer"- řetězec z paketu a když přijde koncový znak 0FFh, tak řetězec zpracuju, tedy zatím kontrolně vypíšu na PC. To mi chodí. Když jde další paket 34 znaků, tak se mi řadí do "vstupního bufferu"-řetězce za předešlý paket(
Když skočíš na začátek na čtení startovacího znaku, tak tam máš ten řetězec zároveň vynulovaný nebo jsi to vynulování udělal ještě před začátkem čtení startovacího znaku a skáčeš až za to vynulování?
Založen: Apr 02, 2011 Příspěvky: 17753 Bydliště: Nový Bydžov
Zaslal: út červenec 04 2017, 8:15 Předmět:
Ale já nevím, jak ten string vynulovat. Definuju ho ještě před void setup String dataJeti. Po příjmu prvního paketu je vše v pořádku. Pokud ho zkusím po vytištění stringu znova definovat jako String dataJeti, tak to nemá žádnej vliv a další paket se připojí na konec předešlýho. Pokud ho zkusím znova nadefinovat jako String dataJeti = (" 34 mezer ") tak se za první paket připojí 34 mezer a třetí paket se připojí za ty mezery.
Zkoušel jsem projít ten prográmek z odkazu, co jsi mi poslal, co napsal Graynomad Jan 27, 2011, 05:53 pm. Při překladu to hází mraky strukturálních chyb. Myslím, že to ani nevyzkoušel. Jedině že by to bylo mě naprosto neznámejma definicema těch jeho
readstring a c Vyzkoušel jsem char i int a stále stejný. _________________ Jirka
//-- process the pending string once a delim hit
void processString(){
//--- Check String
if( readString == "<T1>" ){
Serial.println("T1 Trigger");
} else {
Serial.println(readString);
}
// důležitý je tohle, tady tu proměnnou vyčistí
//--- Clear String for more reading
readString = "";
}
void loop(){
while (Serial.available() > 0) {
char c = Serial.read();
readString += c;
//-- If we see the end delim character ..
// then process the string, which clears it
if( c == 62 ){ //> char
processString();
}
}
}
Založen: Apr 02, 2011 Příspěvky: 17753 Bydliště: Nový Bydžov
Zaslal: út červenec 04 2017, 12:06 Předmět:
to dobrman: Tak to pomohlo, díky! Přikládám to co jsem zplodil a co mi vypisuje přijmutej string 32 Ascii znaků na sériovej monitor.
Neptej se mě, přoč co dělám, protože to nevím. Pouze jsem zpatlal dohromady systémem pokus omyl pár příkladů z netu.
kód:
#include "SoftwareSerialO2.h"
//**********deklarace proměnných*************
SoftwareSerial JetiSerial(-1, -1);
//char data; // jeden znak - z Jeti jdou data po znacích
String dataJeti=""; // relace dat z Jeti po jednom znaku ukládat do řetězce
bool newdata; // indikátor nových dat
//*************Nastavení**********************
void setup() {
// nastavení sériové linky z Jeti
JetiSerial.Init(9, 10); // RX pin, TX pin
JetiSerial.begin(9600, true, 2, 1); // rychlost, bit9, 2b stop, 1b parita
JetiSerial.rxMode(); // jen příjem
Serial.begin(115200); // rychlost do PC
while (!Serial) {;} // čekej na potvrzení z PC
Serial.println("Init done"); // výpis na PC
newdata = false;
}
//********Hlavní smyčka programu***************
void loop() {
nactidata(); // podprogram načtení string
if (newdata) zpracujdata();
newdata = false;
}
//***********************************
void nactidata()
{
if (JetiSerial.available()) //dokud jsou na výstupu Jeti data ke čtení
{
bool is9bit = false;
unsigned char data = JetiSerial.read9(&is9bit); //čteme po jednom znaku
if (data ==0xFF)
{
newdata = true;
return;
}
dataJeti = dataJeti + char (data); // přidání znaku do řetězce
}
}
//-------------------------------------
void zpracujdata()
{
dataJeti.remove(0,2);
Serial.println (dataJeti);
if (dataJeti.substring(2,6) == "Ulow")
{
Serial.print("Minimalni napeti");
// unsigned char cislo=dataJeti.substring(15,1);
}
dataJeti="";
}
V tom zpracuj data jsem se pokusil vyházet počáteční nepotřebný znaky a rozebrat přijatý řetěz. Ta Ulow mi chodí, ale nevím, jak z řetězce dolovat jednotlivý znaky do proměnný. Ten substring(15.1) je syntax err.
Prostě každej řádek je boj a hledání a učení toho je časově nezvládnutelný a už mě to přestává bavit. Kdybych se vykašlal na slavný Arduino, v A51 na Silabu bych to měl možná už napsaný a na rozdíl od tohodle bych aspoň věděl, co dělám a mohl se na HW emulátoru kouknout co se v tom procíku děje.
v tom výpisu je vlastně dvouřádkovej výpis telemetrí. Za 1 je první řádek, za 2 je druhý řádek. Pak tam je zkušební rozeznání hlášky Ulow.
Založen: Sep 19, 2007 Příspěvky: 3697 Bydliště: Praha
Zaslal: út červenec 04 2017, 23:54 Předmět:
Raději bych použil metodu String::remove() pro vymazání obsahu
kód:
dataJeti.remove(0);
a pro definici stringu konstruktor String::String(const char *cstr = "")
kód:
String dataJeti; // uplně to stačí vzhledem k defaultnímu parametru konstruktoru
Používání přetíženého operátoru = vede ke zbytečnému vyvolávání kopírování paměti. Pro bližší informaci viz soubory WString.h a WString.cpp.
Celeron napsal(a):
Prostě každej řádek je boj a hledání a učení toho je časově nezvládnutelný a už mě to přestává bavit. Kdybych se vykašlal na slavný Arduino, v A51 na Silabu bych to měl možná už napsaný a na rozdíl od tohodle bych aspoň věděl, co dělám a mohl se na HW emulátoru kouknout co se v tom procíku děje.
To není otázka Arduina, ale tvé neznalosti C/C++. Potom je to samozřejmě boj.
Znak na pozici n se získá metodou String::charAt(n)
Pokud máš HW debugger podporovaný v Atmel Studiu, VŘELE doporučuji zanechat práce v IDE Arduino a přejít na AS. Z Arduina používat jen knihovny, hlavně core knihovnu pro ovládání procesoru. Na netu je dobře popsáno na několik způsobů, jak přechod udělat.
http://www.engblaze.com/tutorial-using-atmel-studio-6-with-arduino-projects/
Jo a na desce Arduino je pak potřeba odpojit resetovací kondík, jinak nebude fungovat DebugWire.
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2
Strana 2 z 2
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
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.