vypis textu

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

bonatius
Stály člen
Stály člen
Príspevky: 334
Dátum registrácie: 14 Máj 2007, 00:00
Bydlisko: BA

vypis textu

Príspevok od používateľa bonatius » 28 Feb 2018, 12:24

Ahojte,
potreboval by som pomoct s tymto programom:

Kód: Vybrať všetko

byte prijate;
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
 
  if (Serial.available() > 0) {
    prijate = Serial.read();
    Serial.write(prijate+1);  // posunie hodnotu vrateneho znaku o 1 (ASCII)
     
  }
}
Program nacita zadany text z klavesnice a v serial monitore vypise text posunuty o jedna.
Problem je v tom, ze ked zadam dalsi text tak mi tento text zapise do toho isteho riadku, hned za minuly text.
Potreboval by som, aby tie texty zapisoval kazdy do ineho riadku.
Dakujem.
0

Používateľov profilový obrázok
djwiktor
Ultimate člen
Ultimate člen
Príspevky: 1624
Dátum registrácie: 01 Júl 2010, 00:00
Bydlisko: Šaľa
Vek: 36
Kontaktovať používateľa:

Re: vypis textu

Príspevok od používateľa djwiktor » 28 Feb 2018, 12:42

Pretoze serial.write posiela to co pride.

Ale nikde nevidim, ze by si po dokonceni cyklu poslal aj crlf teda Serial.write('\r\n');
0
Tlacim na 3D tlaciarni Felix 3.0 dual
Stormchasers.sk

lacog
Stály člen
Stály člen
Príspevky: 302
Dátum registrácie: 27 Mar 2007, 00:00

Re: vypis textu

Príspevok od používateľa lacog » 28 Feb 2018, 12:43

Nejako ti nerozumiem ale napr. ASCII 10 je LF a ASCII 13 je CR.
Alebo Serial.println

edit: dídžej bol rýchlejší
0

bonatius
Stály člen
Stály člen
Príspevky: 334
Dátum registrácie: 14 Máj 2007, 00:00
Bydlisko: BA

Re: vypis textu

Príspevok od používateľa bonatius » 28 Feb 2018, 13:00

tymto prikazom Serial.write('\r\n');
mi dany text rozseka do znakov a kazdy znak zobrazi v novom riadku
0

lacog
Stály člen
Stály člen
Príspevky: 302
Dátum registrácie: 27 Mar 2007, 00:00

Re: vypis textu

Príspevok od používateľa lacog » 28 Feb 2018, 13:08

to je dobre alebo zlé? :)
0

bonatius
Stály člen
Stály člen
Príspevky: 334
Dátum registrácie: 14 Máj 2007, 00:00
Bydlisko: BA

Re: vypis textu

Príspevok od používateľa bonatius » 28 Feb 2018, 13:16

zle

potrebujem vypisat vzdy novy text do noveho riadku

napr: napisem abcd a na serial monitore v prvom riadku sa mi zobrazi bcde
potom napisem efgh a v dalsom riadku sa mi zobrazi fghi
0

dan21
Ultimate člen
Ultimate člen
Príspevky: 3016
Dátum registrácie: 11 Apr 2007, 00:00
Bydlisko: ZA

Re: vypis textu

Príspevok od používateľa dan21 » 28 Feb 2018, 13:23

Nepoznam Arduino (jazyk) , ale predpokladam ze Serial.read nacita jeden znak vypise ho na terminal, da CRLF a vypise posunuty o jeden, da CRLF .............
0
Naposledy upravil/-a dan21 v 28 Feb 2018, 14:06, upravené celkom 1 krát.

lacog
Stály člen
Stály člen
Príspevky: 302
Dátum registrácie: 27 Mar 2007, 00:00

Re: vypis textu

Príspevok od používateľa lacog » 28 Feb 2018, 14:05

potrebuješ to po 4 znakoch alebo počet znakov je variabilný a nasleduje "Enter"?
0

Používateľov profilový obrázok
djwiktor
Ultimate člen
Ultimate člen
Príspevky: 1624
Dátum registrácie: 01 Júl 2010, 00:00
Bydlisko: Šaľa
Vek: 36
Kontaktovať používateľa:

Re: vypis textu

Príspevok od používateľa djwiktor » 28 Feb 2018, 14:46

Asi ocividne moc nerozumies tomu ako to vobec funguje.

Zalezi kam si to crlf das. v tvojom programe mas slucku if - ak je nieco na porte, a je to viac ako 0, tak vsetko co pride, odosle na port.

to crlf musis dat na koniec podmienky, to znamena ked uz na seriovom porte nic nie je .
0
Tlacim na 3D tlaciarni Felix 3.0 dual
Stormchasers.sk

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Re: vypis textu

Príspevok od používateľa roboulbricht » 28 Feb 2018, 23:46

Ak to má fungovať tak, že znak nového riadku to má vrátiť ako nový riadok a všetky ostatné znaky posunúť o 1, tak si iba uprav kód na riadku Serial.write(prijate+1);. Doplň si podmienky ak sa prijate rovná '\r' alebo '\n', tak vráť to isté, ináč vráť to čo vraciaš svojim pôvodným kódom. Potom by to malo byť odolné voči každej kombinácii nového riadku, ktorý môžeš v Serial Monitore nastaviť.
0

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1371
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: vypis textu

Príspevok od používateľa TomasNM » 01 Mar 2018, 13:22

Pridaj si priznak tak,aby ti to nepisalo CRLF donekonecna,ale iba ak nejaky text pride.

Kód: Vybrať všetko

boolean novyriadok=false;
byte prijate;

void setup() {
  Serial.begin(9600);
}

void loop() {

  if (Serial.available() > 0) {
    novyriadok=true;
    prijate = Serial.read();
    Serial.write(prijate+1);  // posunie hodnotu vrateneho znaku o 1 (ASCII)
  }
  if(novyriadok) { Serial.println();novyriadok=false; }
}
0

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Re: vypis textu

Príspevok od používateľa roboulbricht » 02 Mar 2018, 13:24

Použitie funkcie Serial.available() nie je najšťastnejšie na zisťovanie, či do Arduina dorazil riadok textu. Tá funkcia iba hovorí, že v bufferi má Arduino načítané nejaké znaky zo sériového portu. Pri sériovej komunikácii ale nič nezaručuje, že bude odosielateľ (v tomto prípade asi Serial Monitor) odosielať dáta po celých riadkoch. Dosť často to tak je, ale pretože na ceste medzi stlačením tlačidla na odoslanie a samotným mikrokontrolérom je veľa medzistupňov (Java, operačný systém, USBtoSerial prevodník), môže sa stať, že to niektorý z nich poseká aj na menšie časti. Jediná spoľahlivá metóda na detekciu konca riadku je sledovanie znakov '\r', '\n' alebo '\r\n'.
0

Používateľov profilový obrázok
roboulbricht
Stály člen
Stály člen
Príspevky: 156
Dátum registrácie: 07 Jan 2015, 12:01
Bydlisko: Banská Bystrica
Vek: 54
Kontaktovať používateľa:

Re: vypis textu

Príspevok od používateľa roboulbricht » 04 Mar 2018, 15:46

Dve pomôcky pre tých, čo chcú skúmať znaky, ktoré putujú po sériovom porte. Prvá mení prečítané znaky z počítača na ich HEX ekvivalenty. Môžete takto skúmať, aké znaky sa odošlú spolu s tými, ktoré napíšete do Serial Monitora. Druhá pomôcka je správne riešenie bonatiusovho problému.
0

peterple
Ultimate člen
Ultimate člen
Príspevky: 2328
Dátum registrácie: 25 Jún 2013, 21:06
Bydlisko: Krajné
Vek: 57
Kontaktovať používateľa:

Re: vypis textu

Príspevok od používateľa peterple » 04 Mar 2018, 16:11

a čo takto?

Kód: Vybrať všetko

void loop() {
  int prijate;
  if (Serial.available() > 0) {
    prijate = Serial.read();
    if (prijate>=' ') prijate++;
    Serial.write(prijate);  // riadiace znaky neposunute, ostatne posunute
  }
}
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok