Olen uusi Arduinossa ja minulla on seuraavat:
int delaynum; char cval[12]; void setup() { Serial.begin(9600); Serial.print("Enter Number"); Serial.flush(); int i=0; while(i<12) { if(Serial.available()>0) { char ch=Serial.read(); if(ch>="0"&&ch<="9") { cval[i]=ch; i++; } else { cval[i]=0; delaynum=atoi(cval); break; } } } } void loop() { Serial.println(delaynum); exit(0); }
Koodilähtö virtuaalisessa leipätaulussa: (i syötetty 100)
Mutta kun poistan Serial.flush()
Tuloksen, kuten (i kirjoitti 100)
Odotan tulosta:
Syötä numero (haluan syöttää) numero 100 lähdön jälkeen)
100
Miksi koodi ei toimi?
Käytän Arduino IDE: tä virtuaalisen leipätaulun (ATMega328p) kanssa
Kommentit
- se on emulaation virhe. Serial.flush () odottaa vain, kunnes tiedot lähetetään kokonaan.
Vastaa
En tiedä mitä virtuaalilevyä tekee normaalilla Arduinolla se tekisi seuraavaa:
Serial.flush () tyhjentää puskurin ja tämä vaatii normaalia aikaa, odota vähintään noin 100 ms: n aikaa kirjoittaa / lukea puskuriin uudelleen.
Kun koodisi suoritetaan asennuksessa (vain kerran), sarja ei ole käytettävissä, koska se silti punastuu ja tulos.
Kuten nimiasetuksen mukaan tätä tulisi käyttää vain HW / SW: n asetuksiin, mutta ei suoritettavaksi rutiinit, sillä saatat saada kaikenlaisia outoja tuloksia.
Jos käytät ”\ n” alias newline -päätteitä viestinnässä, voit mennä niihin ja huuhtelu olisi tarpeen vain, jos yhteys katkeaa ja sinun on lähetettävä tietoja uudelleen.
MUOKKAA
Waits for the transmission of outgoing serial data to complete.
Jos lähetät merkin, se sijoitetaan puskuriin lähetystä varten. Jokaisen merkin lähettäminen vie aikaa, koska sarja on hidas. Kun se on puskurissa, se lähetetään automaattisesti taustalla, kun ohjelma siirtyy välittömästi seuraavaan lauseeseen. Tämä tehdään niin, että ohjelma ei tuhlaa aikaa merkkien lähettämisen odottamiseen.
flush () on tapa odottaa lähettämistä sen sijaan, että se siirtyisi heti käyttäjän sisään Ohjelma.
Joten soitettuasi flush () -sivun, voit olla varma, että kaikki tiedot on lähetetty ja puskuri on tyhjä. Joten sinun ei ole mitään järkeä siinä tapauksessa, missä sijoitit sen.
Kommentit
- Voitteko selittää yksityiskohtaisemmin ja Arduino käyttää samaa puskuria sekä tuloon että lähtöön tai sarjaan. flush () huuhtele sekä tulo- että lähtöpuskurit?
- Katso edellinen muokkaus. Merkitse hyväksytyksi, jos se on ok
- Joten sinun ei tarvitse olla mieltä, mihin sijoitit, miksi? Arduino ei odota asetustoiminnossa ja mikä on ratkaisu voisitko selittää, olen tässä uusi.
- Lue Arduino.cc -sivulta basic101, en aio opettaa täällä ratkaisemme yhden ongelman kerrallaan
- jotenkin tämä vastaus ei ' älä sano mitään vastaamaan ongelmaan