Stap 7: Seriële communicatie (deel 1)
Ik heb overwogen verschillende opties voor het verzenden van gegevens tussen de laptop en de auto. Wi-Fi of bluetooth leek te zijn van de hand liggende oplossingen, maar noch het bereik ik kan bieden. De meeste draadloze arduino projecten lijken te gebruiken XBee modules, die rekenen op seriële communicatie, dus heb ik besloten om een seriële interface gebruiken.
De mededeling van de auto/laptop werkt als volgt:
1. de auto stuurt een seriële string (met een vaste structuur), met bekende begin en einde van bericht tekens.
2. de C#-programma voortdurend opiniepeilingen de laptop de seriële interface. Wanneer zij een seriële tekenreeks ontvangt, zowel de verwachte begin- en eind tekens, het C#-programma bereidt zijn eigen seriële string (met een vaste structuur) en stuurt het naar de auto.
3. de auto krijgt de seriële string, doet een snelle controle (gebaseerd op een einde van bericht karakter en lengte van het bericht), trekt en verwerkt de gegevens als het bericht "geldig", en op een opgegeven vertraging wacht voordat voorbereiden en een andere boodschap - en de cyclus herhaalt.
Opmerking: Als het ontvangen bericht is niet geldig "" op de Arduino, de Arduino schets zal stoppen met de auto en centrum van het stuurwiel.
De berichtenstructuur voor berichten verzonden naar de auto, vanuit de C#-programma is:
500,500, F, D00, Z
De betekenis van deze tekenreeks is:
Eerste veld: Throttle (gecentreerd rond 500)
Tweede veld: stuurinrichting (gecentreerd rond 500)
Derde veld: Slowmode - F: Fast, S: Slow (max gashendel is halfspeed)
Vierde veld: koplampen
Eerste teken: D: Dark (lichten uit), L: lichten op
Tweede teken: helderheid (0 - 9)
Derde teken: lichte reeks (0 - 9)
Laatste veld: einde van bericht teken (Z)
Meer bijzonderheden over sommige velden zullen worden verstrekt in latere stappen
De berichtenstructuur voor berichten verzonden vanuit de auto, naar de C#-programma, is:
A, 500, 500 F, R, D00 Z
Eerste veld: begin van bericht karakter (A)
Tweede veld: Throttle (gecentreerd rond 500)
Derde veld: Stuurinrichting (gecentreerd rond 500)
Vierde veld: Slowmode - F: Fast, S: Slow (max gashendel is halfspeed)
Vijfde veld: koplampen
Eerste teken: D: Dark (lichten uit), L: lichten op
Tweede teken: helderheid (0 - 9)
Derde teken: lichte reeks (0 - 9)
Zesde veld: rumble (R - rumble, O - uit)
Laatste veld: einde van bericht teken (Z)
De meeste van deze velden zijn alleen in navolging van wat werd ontvangen door de Arduino. Dit werd gedaan als een visuele indicator van de gezondheid van de seriële interface. Als de interface functioneert goed, moeten de output en input tekenreeksen weergegeven in het C#-programma overeenkomen.
Deze seriële communicatie-methode werd oorspronkelijk ontwikkeld met behulp van een seriële kabel verbinding (dat wil zeggen met behulp van de Arduino USB-kabel). Ik kon de vertraging instellen op de Arduino-kant aan 20ms, zodat het bericht frequentie ongeveer 50Hz was. Met de USB-kabel, ik had geen problemen met communicatie en stabiele berichtbevestiging kon krijgen aan beide uiteinden. De baud-rate is ingesteld op 38400.