Stap 2: Leren seriële communicatie
Voordat we in proces van ontwikkeling duiken, wil ik u om te gaan over wat voorbereidend lezen om te begrijpen wat we proberen te doen. Ik heb reeds gecompileerd een eenvoudige tutorial over seriële communicatie (tweede link), zodat zodra u klaar bent, we met het ontwikkelen van een volledig functionele programma beginnen kunnen aan onze doeleinden.
LEZING MATERIALEN:
Wij zullen beginnen met het maken van 2 eenvoudige functies, waarmee zal openen en sluiten van de verbinding van de UART.
Hiervoor moet u MS Visual C++, paar handen en cafeïne-geïnfundeerd hersenen.
De initialisatie van de COM-poort is een ongecompliceerd proces: eerst maken we poort configuratie portDCB, waarin de communicatie-instellingen, en wijs wij de poortingang. Merk op, dat poort wordt geïnitialiseerd met CreateFile() functie-aanroep, en net als met conventionele bestanden kunnen we gebruik ReadFile() en WriteFile() gegevens uit te wisselen.
Wijs wij de nieuwe configuratie met SetCommState() functie-aanroep. Als we bij elke stap in dit proces een fout optreedt, zullen wij het juiste bericht afdrukken en FALSE terug te keren.
Anders, keren we terug waar en als gevolg van de uitvoering van UART_Init(), poort variabele nu verwijst naar een seriële poort handvat.
Met het oog op flexibiliteit krijgt de naam van de COM-poort en de baud-rate als argumenten van deze functie. Standaardinstellingen worden ingesteld op 8 transmissie de bitlengte met 1 stopbit. Pariteit, foutcorrectie en elk soort datatransportbesturing zijn standaard uitgeschakeld.
Sluiten van de COM-poort is heel eenvoudig. Alles wat we moeten doen is vrij van de greep (lijn 2) en stel * haven aanwijzer op NULL, zodat we per ongeluk geen toegang heeft tot de oude greep.
UART_Close() functie resulteert in ONWAAR als we proberen te sluiten van een niet-geïnitialiseerde of eerder gesloten poortingang.
Zoals u al hebt geraden, de volgende logische stap zal de uitvoering van functies voor verzenden/ontvangen van berichten van de UART. Het sleutelmoment van dit deel is dat we communicatie evenementen, beschreven in MSDN-artikel eerder vermeld zal gebruiken.
Ervan uitgaande dat onze arduino op het moment van verzending kan worden bezet en niet een passend antwoord kon bieden, willen wij wachten EV_RXCHAR gebeurtenis telkens RX binnenkomende gegevens heeft. Om aan te pakken dit probleem zullen we zetten een communicatie-masker en wachten op ons evenement voordat het lezen van de volgende byte.
Deze vier functies moet genoeg om fundamentele UART communicatie tussen Arduino en uw PC.
Nu, laten we het evalueren van de functionaliteit van onze code met een eenvoudige UART loopbacktest. We moeten eerst voltooien van de programma's _tmain() functie:
Deze code initialiseert haven COM8, dat mijn USB-UART-kabel is (Vergeet niet te veranderen dat deel aan uw port #). Vervolgens 100 berichten verstuurt via UART en afdrukken van zowel origineel bericht en antwoord. Uitvoering van de gebeurtenislistener mededeling eerder echt afbetaald aan het einde. Als u dit programma nauwkeurig bekijkt, ziet u dat wij alleen hebben gebruikt over een dozijn effectieve coderegels te laten werken!
Nu, laten we onze Arduino te werken als UART loopback apparaat instellen. We implementeert ook een UART gebeurtenisgestuurde mededeling te kunnen doen wat andere dingen terwijl het niet verzenden.
Toegankelijk opwaarts uw Arduino IDE en gebruik deze code als voorbeeld:
Nu kunt u uploaden van de schets aan de Arduino, de C++-project compileren en testen!