Hur skicka strängar via ASCII?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Mr Andersson
Inlägg: 1409
Blev medlem: 29 januari 2011, 21:06:30
Ort: Lapplandet

Re: Hur skicka strängar via ASCII?

Inlägg av Mr Andersson »

> Ja. 255. Skulle jag skicka 256 så blir det 0 igen.
Ja det stämmer. Anledningen till att 256 blir 0 är att 256 är 100000000 binärt (9 bitar), och när det "nerkonverteras" till 8 bitar faller 1:an bort och kvar blir (0000000)0.

> Med andra ord så har uint8 8 stycken 0:or eller 8 stycken 1:or, där en bit är antingen sant eller falskt.
Nä, alla bitar behöver inte ha samma värde.
Nerre
Inlägg: 27229
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Hur skicka strängar via ASCII?

Inlägg av Nerre »

Al_Bundy skrev: Som jag sa!
Mr Andersson skrev:> Jag brukar inte bry mig så mycket vad som egentligen händer.
Och det är väl där problemet ligger.
Som Mr Andersson sa... Att göra saker utan att förstå varför är inte direkt det optimala sättet.
Användarvisningsbild
SeniorLemuren
Inlägg: 8426
Blev medlem: 26 maj 2009, 12:20:37
Ort: Kristinehamn

Re: Hur skicka strängar via ASCII?

Inlägg av SeniorLemuren »

Al_Bundy skrev:Jag brukar inte bry mig så mycket vad som egentligen händer. När jag ser att decimaltalet försvinner när float -> int så accepterar jag att den bara hugger bort "svansen".
Är det kanske dags nu att hugga bort svansen från trollet nu också. :)
Användarvisningsbild
bit96
Inlägg: 2529
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: Hur skicka strängar via ASCII?

Inlägg av bit96 »

Alltså, trådar skapade av Mr "four-touchdowns-in-one-game" är bland forumets bästa. :)
Äkta skaparglädje och experimentlusta.
Full fart, testa, prova, skit i detaljerna, kör vidare, fråga nån hur man gör, fan vad hände nu, :doh: , ähh jag provar så här i stället. :lol:
På nåt sätt känner jag igen mig, och jag antar fler här på EF gör det, att det var ungefär så man själv började en gång i tiden.
Fortsätt du och experimentera vidare :tumupp:
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur skicka strängar via ASCII?

Inlägg av Al_Bundy »

Jag har lite funderingar!

När jag skickar över mySerial.write(50); från en arduino till en annan arduino som läser det som Serial.print(mySerial.read()); så får jag värdet 50. Det verkar vara allt i sin ordning då.

Men när jag skickar över värdet 50 från en arduino med mySerial.write(50); till en annan arduino som tar emot det och skickar det sedan till min dator där jag direkt läser av det via Arduinos Monitor, då ser jag talet 2, alltså ASCII tecknet. Jag använder inte Serial.print() för det finns inte tillgängligt i Simulink då man bara ska hantera signaler.

Alltså:
Programmerad arduino mySerial.write(50); -> Simulinkprogrammerad Arduino tar emot -> Simulinkprogrammerad Arduino skickar det till USB porten -> Arduino IDE's Monitorfunktion läser av det som ASCII tecknet 2.


Då är min fråga: Om Simulink lagrar dessa i en variabel istället för att skicka vidare till USB porten, skulle då denna variabel vara 2 eller 50?
Senast redigerad av Al_Bundy 13 februari 2015, 19:35:00, redigerad totalt 1 gång.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur skicka strängar via ASCII?

Inlägg av Al_Bundy »

bit96 skrev:Alltså, trådar skapade av Mr "four-touchdowns-in-one-game" är bland forumets bästa. :)
Äkta skaparglädje och experimentlusta.
Full fart, testa, prova, skit i detaljerna, kör vidare, fråga nån hur man gör, fan vad hände nu, :doh: , ähh jag provar så här i stället. :lol:
På nåt sätt känner jag igen mig, och jag antar fler här på EF gör det, att det var ungefär så man själv började en gång i tiden.
Fortsätt du och experimentera vidare :tumupp:
Learning by doing. Hört talas som det?
Jag tror ingen har lärt sig igenom att bara läsa massivs med böcker. I så fall så skulle en lärare inte behöva rätta tentor.
Du skapar ju kunskap igenom att relatera till något som har hänt.

Dessutom vet jag att du har bränt massvis med elektroniska komponenter under din tid, utan att tänkt dig för.
Nerre
Inlägg: 27229
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Hur skicka strängar via ASCII?

Inlägg av Nerre »

Som scout borde jag ju propagera för Learning by doing, problemet är att Learning by doing wrong är en oerhört ineffektiv metod för att lära sig.
Användarvisningsbild
MiaM
Inlägg: 12943
Blev medlem: 6 maj 2009, 22:19:19

Re: Hur skicka strängar via ASCII?

Inlägg av MiaM »

Al_Bundy skrev:Hängde inte med.
Jag skickar 65 och när jag tar Serial.println(mySerial.read()); så får jag fram vad mySerial.read() är för något.
Tänk att jag har två stycken arduinos. Ena är programmerad med Simulink där jag skickar talet 65 ut ur TX/RX gångarna och sedan till en annan Arduino som är programmerad med C.
Men då kör du inte ascii som du påstår i trådstarten, utan då kör du binärt.
Al_Bundy skrev:Om jag har talet 65.66 så måste jag dela upp 65 och 66 i två delar. 66 delar jag med 100 och sedan addera med 65.
Dela med 256 istället, så slösar du inte utrymme.
Al_Bundy skrev:Jag har lite funderingar!

När jag skickar över mySerial.write(50); från en arduino till en annan arduino som läser det som Serial.print(mySerial.read()); så får jag värdet 50. Det verkar vara allt i sin ordning då.

Men när jag skickar över värdet 50 från en arduino med mySerial.write(50); till en annan arduino som tar emot det och skickar det sedan till min dator där jag direkt läser av det via Arduinos Monitor, då ser jag talet 2, alltså ASCII tecknet. Jag använder inte Serial.print() för det finns inte tillgängligt i Simulink då man bara ska hantera signaler.

Alltså:
Programmerad arduino mySerial.write(50); -> Simulinkprogrammerad Arduino tar emot -> Simulinkprogrammerad Arduino skickar det till USB porten -> Arduino IDE's Monitorfunktion läser av det som ASCII tecknet 2.


Då är min fråga: Om Simulink lagrar dessa i en variabel istället för att skicka vidare till USB porten, skulle då denna variabel vara 2 eller 50?
Du måste förstå att du skickar alltid talet 50, serielänken kan skicka alla tal som ryms inom en uint8, d.v.s. 0-255.

Det normala (men inte enda) sättet att använda en serieport på är dock att skicka skrivbar text. När du tittar på skärmen och ser det som skickats så har datorn tittat på ställe 50 i en tabell och hittat en bild av hur siffran 2 ser ut, och kopierat det ur tabellen fram till skärmminnet. Att 2 är en siffra är bara ett sammanträffande.

För att det ska stå 50 på skärmen i ett vanligt terminalprogram så måste du alltså skicka först 53 (tecknet 5) och sen 48 (tecknet 0) efter varandra. Det är detta som print fixar till skillnad från write...
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Hur skicka strängar via ASCII?

Inlägg av Al_Bundy »

Nu vet jag inte hur Simulink ska läsa värderna av mySerial.write(50); och mySerial.write(48); direkt efter. Men det blir nog bra som du säger.
Idag har jag lärt mig grunderna i kommunikation mellan blockprogrammerad AVR och textprogrammerad AVR :)


Nu gäller det bara för mig att göra ett subsystem för alla dessa block :)
Användarvisningsbild
bit96
Inlägg: 2529
Blev medlem: 3 september 2007, 10:04:29
Ort: Säffle

Re: Hur skicka strängar via ASCII?

Inlägg av bit96 »

Al_Bundy skrev:
bit96 skrev:Alltså, trådar skapade av Mr "four-touchdowns-in-one-game" är bland forumets bästa. :)
Äkta skaparglädje och experimentlusta.
Full fart, testa, prova, skit i detaljerna, kör vidare, fråga nån hur man gör, fan vad hände nu, :doh: , ähh jag provar så här i stället. :lol:
På nåt sätt känner jag igen mig, och jag antar fler här på EF gör det, att det var ungefär så man själv började en gång i tiden.
Fortsätt du och experimentera vidare :tumupp:
Learning by doing. Hört talas som det?
Jag tror ingen har lärt sig igenom att bara läsa massivs med böcker. I så fall så skulle en lärare inte behöva rätta tentor.
Du skapar ju kunskap igenom att relatera till något som har hänt.

Dessutom vet jag att du har bränt massvis med elektroniska komponenter under din tid, utan att tänkt dig för.
Naturligtvis har jag eldat komponenter och värre än så. :)
Numer står brandsläckare utplacerade här och där. Fast det var i ungdomen de hade behövts. :roll:

Jag menar alltså vad jag skrev, helt uppriktigt. Jag är inte negativ på något sätt, ifall nån nu någon tolkade det så.
Jag uppmuntrar verkligen din experimentlusta. :tumupp:
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Hur skicka strängar via ASCII?

Inlägg av jesse »

för mycket text i den här tråden för att jag ska orka förstå alla detaljer.

Men, AlBundy, vad är det som ska kommuniceras?

Du har två apparater A och B, och A ska skicka data till B:

(A) ---------(data)-----------> (B)

Min fråga:

Vad för data har (A) , är det en float, t.ex. 123.45?

Vad för data ska (B) helst ha för att kunna tolka det?
Ska det skrivas direkt på skärmen (alltså ASCII tecknen 1 2 3 . 4 5)
eller vill den också ha ett float (123.45) att t.ex. kunna göra beräkningar med...?
svanted
Inlägg: 5280
Blev medlem: 30 augusti 2010, 21:20:38
Ort: Umeå

Re: Hur skicka strängar via ASCII?

Inlägg av svanted »

SeniorLemuren skrev:
Al_Bundy skrev:Jag brukar inte bry mig så mycket vad som egentligen händer. När jag ser att decimaltalet försvinner när float -> int så accepterar jag att den bara hugger bort "svansen".
Är det kanske dags nu att hugga bort svansen från trollet nu också. :)
kan ngn bevisa för mig att du har fel :oops:



det finns ingen som helst anledning att skicka ascii om det inte är till för en dum display utan beräkningskraft!!
för OM den kan utföra beräkningar, då behöver man absolut inte skicka ASCII då den borde kunna
num2str eller float2str....!"#€%&/ om det nu sitter ngn display som ska användas.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Hur skicka strängar via ASCII?

Inlägg av sodjan »

Den enda anledningen till att skicka (kompaktare) binär data är
för prestanda. Att skicka data "läsbart" har alla andra fördelar så
som t.ex. mycket enklare felsökning genom medhörning på linjen.

Dessutom finns det många olika format för att lagra värden binärt
och det är inte alls säkert att båda ändar använder samma standard.
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Hur skicka strängar via ASCII?

Inlägg av Icecap »

sodjan: det finns ytterligare ett skäl: okunnighet.

Men för personer som kan överskåda vad de gör har du helt rätt.
Användarvisningsbild
MiaM
Inlägg: 12943
Blev medlem: 6 maj 2009, 22:19:19

Re: Hur skicka strängar via ASCII?

Inlägg av MiaM »

Medhörning går iofs att ordna även för binära format, men då behöver man skriva medhörningsprogrammet.

M.v.h. cpt. obvious.
Skriv svar