Fråga:
Seriedata visas konstigt
sachleen
2014-02-17 08:24:00 UTC
view on stackexchange narkive permalink

Jag har en enkel skiss som skriver ut "Hello World" till serien, men jag får en massa gibberish istället.

  void setup () {Serial.begin (9600 );} void loop () {Serial.println ("Hello World"); delay (1000);}  

Varför skriver inte "Hello World" ut som koden säger?

Har du kontrollerat om initialiseringen av den seriella porten är korrekt och matchar datorns seriella terminal? Installationen () bör ha något som Serial.begin (9600);
@Rajendra den raden finns i kodexemplet jag gav. Dessutom har jag faktiskt inte problemet. Det är en vanlig fråga för nybörjare och jag svarade på frågan nedan.
Tre svar:
#1
+8
sachleen
2014-02-17 08:24:00 UTC
view on stackexchange narkive permalink

Kortet och terminalen använder antagligen inte samma överföringshastighet. Kontrollera det nedre högra hörnet av Arduino Serial Terminal och se till att den är inställd på 9600.

Seriell data

Seriell kommunikation fungerar genom att skicka hela dataströmmen en bit i taget. Detta står i kontrast till standard parallellport som skickar en byte åt gången. Båda enheterna måste veta i vilken hastighet data skickas. Dessutom måste båda enheterna arbeta med samma hastighet. Detta kallas baudhastighet.

Baudhastighet

Baud betyder egentligen bara pulser per sekund. I samband med seriell kommunikation betyder det hur många bitar som sänds per sekund. Ett av de vanligaste värdena är 9600, men det finns andra vanliga som är faktorer eller multiplar av 9600. Det spelar dock ingen roll, så länge båda enheterna arbetar med samma hastighet.

Om jag skickar meddelanden snabbare än du får dem förlorar du data. Om jag skickar meddelanden långsammare än du tar emot dem blir du nonsens blandat med vad jag skickade dig.

Data, paritet, stoppbitar

Om du tittar på dokumentationen för start () ser du att det kan ta två parametrar:

  Serial.begin (speed) Serial.begin (speed , config)  

Förhoppningsvis förstår du hastighet nu, det är bitarna per sekund som Arduino kommer att kommunicera med.

Den andra parametern, config kod>, låter dig konfigurera några andra saker om seriell dataöverföring. Dessa är data-, paritet och stoppbitarna. Du ser på sidan att den har värden som 5N1 , 6N1 och SERIAL_8N1 (standard)

Den första antal representerar hur många databitar. Den andra karaktären berättar vilken typ av paritetsbit det finns. E för jämn paritet, O för udda paritet eller N för ingen paritet. Det tredje numret berättar hur många stoppbitar.

Så verkligen, med 8N1 har vi 10 bitar som skickas för varje 8 bitar av "dina" data. 1 startbit, 8 databitar och 1 stoppbit.

Hur som helst måste båda sidor komma överens om denna information såväl som hastigheten. Arduino Serial Terminal ger dig inte möjlighet att ändra dessa inställningar, men andra gör det, så du måste vara säker på att alla dessa konfigurationsinställningar är desamma.

Mer information på wiki: Asynkron seriekommunikation

#2
  0
tmaster
2017-04-02 14:33:56 UTC
view on stackexchange narkive permalink

Jag tillbringade en halvtimme med att försöka lösa det, och det var min Arduino Pro Mini som är 3.3V och jag hade valt 5V i Arduino IDE (på PC). Serietryck fungerar aldrig så även med samma baudhastighet definierad.

Välj rätt kort i Arduino IDE.

För att vara tydlig, rätt processor (spänning / klockhastighet) under fliken Verktyg måste väljas.

#3
  0
John Doe
2018-07-11 06:25:08 UTC
view on stackexchange narkive permalink

Sachleens svar (ovan) säger:

  Kortet och terminalen använder antagligen inte samma överföringshastighet. Kontrollera det nedre högra hörnet av Arduino Serial Terminal och se till att den är inställd på 9600.  

Om detta nummer är 9600 och du fortfarande får förvrängda data, kontrollera utdata du fick när du laddade upp koda. Den ska läsa ungefär som:

  Sketch använder 2754 byte (8%) av programlagringsutrymmet. Maximalt är 30720 byte. Globala variabler använder 195 byte (9%) av det dynamiska minnet, vilket lämnar 1853 byte för lokala variabler. Max är 2048 byte.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: Version 6.3, sammanställd 17 januari 2017 kl 12: 00:53 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch Systemets breda konfigurationsfil är "C: \ Program Files (x86) \ Arduino \ hardware \ tools \ avr / etc / avrdude.conf "Använda port: COM5 med programmerare: arduino Överstyrande överföringshastighet: 57600  

Den här nedersta raden (av vad jag har lagt upp) säger vad din enhets standard är baudrat är. För mig ändrade jag Serial.begin (9600); -> Serial.begin (57600); och kontrollerade att det nedre högra hörnet på min Arduino Serial Terminal läste 57600 .

Efter att jag körde det här och det fungerade kunde jag växla tillbaka till 9600 och få data som inte var förvrängda. Arduino verkar vara finig ...



Denna fråga och svar översattes automatiskt från det engelska språket.Det ursprungliga innehållet finns tillgängligt på stackexchange, vilket vi tackar för cc by-sa 3.0-licensen som det distribueras under.
Loading...