Til at starte med, ville jeg undersøge om der er en interface beskrivelse til det der arduino board. Der må være en beskrivelse af, hvordan kommandoerne skal modtages.
I det eksempel du har linket til er der følgende opdeling som jeg lige gennemgår, så du ved hvad det laver. Det du skal prøve kommer til aller sidst i dette indlæg.
Dette køres når der klikkes på Start knappen i en form.
- private void buttonStart_Click(object sender, EventArgs e)
- {
- serialPort1.PortName = "COM1"; // Dette skal du ændre til den com-port hvor du har sat dit "board" til på pc'en
- serialPort1.BaudRate = 9600; // Dette er nok ok, men interface beskrivelsen til dit "board" vil kunne fortælle det
-
- serialPort1.Open(); // Her åbnes seriel-porten
- // Hele "if" herunder sætte bare knapper og textbox hvis den er åben
- if (serialPort1.IsOpen)
- {
- buttonStart.Enabled = false;
- buttonStop.Enabled = true;
- textBox1.ReadOnly = false;
- }
- }
Denne kode køres når der klikkes på "Stop" knappen i en form.
- private void buttonStop_Click(object sender, EventArgs e)
- {
- if (serialPort1.IsOpen) // Hvis den er åben
- {
- serialPort1.Close(); // så lukkes den igen og knapperne aktiveres igen herunder
- buttonStart.Enabled = true;
- buttonStop.Enabled = false;
- textBox1.ReadOnly = true;
- }
- }
Her lukkes seriel-forbindelsen, hvis vinduet lukkes:
- private void Form1_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (serialPort1.IsOpen) serialPort1.Close();
- }
Så til det spændende :-) Denne kode modtager de karakterer som tastes i en textbox på formen og sender til seriel-porten. Så det er denne der er interessant for dig, da den med serialPort1.Write sender data til serie-porten.
- private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
- {
- // If the port is closed, don't try to send a character.
-
- if(!serialPort1.IsOpen) return; // Hvis porten ikke er åben, så sker der ikke noget
-
- // If the port is Open, declare a char[] array with one element.
- char[] buff = new char[1]; // Her laves et array på en enkelt karakter
-
- // Load element 0 with the key character.
-
- buff[0] = e.KeyChar; // Her sættes array'et til den karakter der er tastet i textboxen
-
- // Send the one character buffer.
- serialPort1.Write(buff, 0, 1); // Her skrives til den åbne seriel-port og dette er den "spændende" linje for dig.
-
- // Set the KeyPress event as handled so the character won't
- // display locally. If you want it to display, omit the next line.
- e.Handled = true;
- }
Denne metode lægger bare teksten som modtages fra seriel-porten til textboxen på formen. Data kommer fra serialPort1_DataRecieved metoden:
- private void DisplayText(object sender, EventArgs e)
- {
- textBox1.AppendText(RxString);
- }
Den sidste metode fanger når event "DataReceived" skydes afsted og modtager karakterer fra bufferen.
- private void serialPort1_DataReceived
- (object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
- {
- RxString = serialPort1.ReadExisting();
- this.Invoke(new EventHandler(DisplayText)); // Her sendes data fra seriel-porten til DisplayText metoden.
- }
Så du burde kunne samle det til noget simpelt ala dette (som jeg af gode grunde ikke kan teste :-) )
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Text;
-
- namespace EtBoardSkriverProgram
- {
- public class MitBoard
- {
- static void Main(string[] args)
- {
- serialPort1.PortName = "COM1";
- serialPort1.BaudRate = 9600;
- serialPort1.Open();
- if (serialPort1.IsOpen)
- {
- char[] buff = new char[1];
- // Fyld din buffer her med den kommando som dit "Board" skal modtage - udvid evt. dit array mde flere karakterer
- serialPort1.Write(buff, 0, 1); // Husk at rette bufferlængden her også
- serialPort1.Close();
- }
- }
- }
- }
Indlæg senest redigeret d. 18.05.2011 11:24 af Bruger #9814