Seriële gegevens verschijnen raar
2014-02-17 08:24:00 UTC
Ik heb een eenvoudige schets die "Hallo wereld" afdrukt naar de serie, maar in plaats daarvan krijg ik een hoop onzin.
void setup () {Serial.begin (9600 );} void loop () {Serial.println ("Hallo wereld"); delay (1000);}
Waarom drukt het niet "Hallo wereld" af zoals de code zegt?
Heeft u gecontroleerd of de initialisatie van de seriële poort correct is en overeenkomt met de seriële pc-terminal? De setup () zou zoiets als Serial.begin (9600) moeten hebben;
@Rajendra die regel staat in het codevoorbeeld dat ik heb gegeven. Bovendien heb ik het probleem niet echt. Het is een veelvoorkomend probleem voor beginners en ik heb de onderstaande vraag beantwoord.
Het bord en de terminal gebruiken waarschijnlijk niet dezelfde baudrate. Controleer de rechter benedenhoek van de Arduino Serial Terminal en zorg ervoor dat deze is ingesteld op 9600.
Seriële gegevens
Seriële communicatie werkt door de volledige datastroom bit voor bit te verzenden. Dit in tegenstelling tot de standaard parallelle poort die één byte tegelijk verzendt. Beide apparaten moeten weten met welke snelheid de gegevens worden verzonden. Bovendien moeten beide apparaten met dezelfde snelheid werken. Dit wordt de baudrate genoemd.
Baud betekent eigenlijk alleen maar pulsen per seconde. In de context van seriële communicatie betekent dit hoeveel bits er per seconde worden verzonden. Een van de meest voorkomende waarden is 9600, maar er zijn andere veelvoorkomende, namelijk factoren of veelvouden van 9600. Het maakt echter niet zoveel uit, zolang beide apparaten maar op dezelfde snelheid werken.
Als ik u sneller berichten stuur dan u ze ontvangt, gaan er gegevens verloren. Als ik je langzamer berichten stuur dan dat je ze ontvangt, krijg je onzin vermengd met wat ik je heb gestuurd.
Data, pariteit, stopbits
Als je de documentatie bekijkt voor begin () , zie je dat er twee parameters nodig zijn:
Serial.begin (snelheid) Serial.begin (snelheid , config)
Hopelijk begrijp je nu snelheid, het zijn de bits per seconde waarmee de Arduino zal communiceren.
De tweede parameter, config , laat u enkele andere dingen configureren over de seriële datatransmissie. Dit zijn de gegevens-, pariteit en stopbits. Je ziet op de pagina dat het waarden heeft als 5N1 , 6N1 en SERIAL_8N1 (standaard)
De eerste getal geeft aan hoeveel databits. Het tweede karakter vertelt je wat voor soort pariteitsbit er is. E voor even pariteit, O voor oneven pariteit of N voor geen pariteit. Het derde cijfer geeft aan hoeveel stopbits.
Dus echt, met 8N1, worden er 10 bits verzonden voor elke 8 bits van "jouw" gegevens. 1 startbit, 8 databits en 1 stopbit.
Hoe dan ook, beide partijen moeten het eens zijn over deze informatie en over de snelheid. De Arduino Serial Terminal geeft je niet de mogelijkheid om deze instellingen te wijzigen, maar andere wel, dus je moet er zeker van zijn dat al deze configuratie-instellingen hetzelfde zijn.
Meer info over wiki: Asynchrone seriële communicatie
2017-04-02 14:33:56 UTC
Ik heb een half uur besteed aan het proberen om dat op te lossen, en het was mijn Arduino Pro Mini die 3.3V is en ik had 5V geselecteerd in de Arduino IDE (op pc). Seriële print werkt nooit zo, zelfs niet als dezelfde baudrate is gedefinieerd.
Selecteer het juiste bord in de Arduino IDE.
Voor alle duidelijkheid: de juiste processor (spanning / kloksnelheid) onder het tabblad Tools moet worden geselecteerd.
2018-07-11 06:25:08 UTC
Sachleens antwoord (hierboven) zegt:
Het bord en de terminal gebruiken waarschijnlijk niet dezelfde baudrate. Controleer de rechteronderhoek van de Arduino Serial Terminal en zorg ervoor dat deze is ingesteld op 9600.
Als dit nummer 9600 is en je krijgt nog steeds onleesbare gegevens, controleer dan de uitvoer die je hebt verkregen bij het uploaden van de code. Het zou iets moeten zijn als:
Sketch gebruikt 2754 bytes (8%) programmaopslagruimte. Het maximum is 30720 bytes. Globale variabelen gebruiken 195 bytes (9%) dynamisch geheugen, waardoor er 1853 bytes overblijven voor lokale variabelen. Het maximum is 2048 bytes. C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr / bin / avrdude -CC: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr / etc / avrdude.conf -v -patmega328p -carduino -PCOM5 -b57600 -D -Uflash: w: C: \ Users \ Owner \ AppData \ Local \ Temp \ arduino_build_457862 / LockCode.ino.hex: i avrdude: Versie 6.3, samengesteld op 17 januari 2017 om 12: 00:53 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch Systeemomvattende configuratiebestand is "C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr / etc / avrdude.conf "Port gebruiken: COM5 Programmer gebruiken: arduino Baudrate overschrijven: 57600
Deze onderste regel (van wat ik heb gepost) zegt wat de standaard van je apparaat is baudrate is. Voor mij veranderde ik Serial.begin (9600); -> Serial.begin (57600); en controleerde ik of de rechter benedenhoek van mijn Arduino Serial Terminal 57600 las .
Nadat ik dit had uitgevoerd, en het werkte, kon ik terugschakelen naar 9600 en niet-vervormde gegevens ophalen. Arduino lijkt kieskeurig te zijn ...