Automatisera din vetenskapliga experiment (6 / 9 steg)
Steg 6: Skriva koden
Kopiera och klistra in koden nedan. Formateringen inklusive färgen på texten visas igen som i skärmdumpen ovan.
Import System.IO
Importerar strängarna = Microsoft.VisualBasic "så kan använda saker som vänster (och rätt (för strängar
Public Class Form1
Offentligt deklarera Sub sömn Lib "kernel32" (ByVal dwMilliseconds As Integer) "för sömn uttalanden
Dim WithEvents serialPort som nya IO. Ports.SerialPort "serieport deklarera
Dim PicaxeRegisters(0 To 13) som Byte "registrerar b0 till b13
Dim ModifyFlag som Boolean
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) hanterar Me.Load
Timer1.Enabled = True ' sätta detta i koden som standard false när skapade
Timer1.Interval = 5000' var 10 sekunder
PictureBox1.BackColor = Color.Gray ' börja med den comms lådor grå
ModifyFlag = False "om ändra värdet manuellt då hoppa nedladdning
RichTextBox1.Multiline = True "så kan visa mer än en rad
Label1.text = "Picaxe kommunikation. röd = inte fungerar, grön = ok "
Label2.text = "Platsen för datafilen"
Label3.text = "Datum och tid"
Label4.text = "Picaxe register"
TextBox3.Text = "c:\Datafile.csv" "namnet och platsen för datafilen
Kalla DisplayPicaxeRegisters() "Visa 14 register
End Sub
Sub SerialTxRx()
Dim DataPacket(0 To 17) som Byte ' hela datapaket "Data" + 14 byte
Dim jag As Integer ' jag är alltid bra för loopar etc
För i = 0 till 3
DataPacket(i) = Asc (mitten av ("Data", jag + 1, 1)) ' lägga till ordet "Data" i paketet
Nästa
För i = 0 till 13
DataPacket(i + 4) = PicaxeRegisters(i) ' lägga till alla byte i paketet
Nästa
Om serialPort.IsOpen sedan
serialPort.Close() "ifall redan öppnat
Slut om
Försök
Med serialPort
. PortName = "COM1" "de flesta nya datorer som standard till com1 men någon pre 1999 computern med en seriell mus kommer förmodligen standard till com2
. Baud = 2400 ' 2400 är Max hastigheten för små picaxes
. Paritet = IO. Ports.Parity.None ' ingen paritet
. DataBits = 8 ' 8 bitar
. StopBits = IO. Ports.StopBits.One "en stoppbit
. ReadTimeout = 1000' millisekunder så gånger i 1 sekund om inget svar
. Open() "öppna den seriella porten
. DiscardInBuffer() ' Rensa indatabufferten
. Skriva (DataPacket, 0, 18) "Skicka datapacket matrisen
Kalla Sleep(300) "100 millisekunder minsta vänta för data att komma tillbaka och mer om dataströmmen är längre
. Läs (DataPacket, 0, 18) "Läs tillbaka i matrisen data packet
. Close() ' stänga den seriella porten
Avsluta med
För i = 4 till 17
PicaxeRegisters (i - 4) = DataPacket(i) ' flytta nya datapaketet i arrayen register
Nästa
PictureBox1.BackColor = Color.GreenYellow ' arbetar
Fånga som undantag
PictureBox1.BackColor = Color.Red ' inte arbetande
Slutet försök
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar Timer1.Tick
Kalla SerialTxRx() "Skicka till picaxe och läsa den tillbaka
System.Windows.Forms.Application.DoEvents() "så att windows inte hänga
Kalla DisplayPicaxeRegisters() "uppdatera register på skärmen
Kalla SaveRegistersToLocalFile() "spara nummer till fil
Label3.text = nu ' uppdatera datum och tid på skärmen
End Sub
Sub DisplayPicaxeRegisters()
Dim jag som heltal
Dim registernumber As String
RichTextBox1.Multiline = True "så kan visa mer än en rad i textrutan
RichTextBox1.Clear() ' Rensa textrutan
För i = 0 till 13
registernumber = Trim(Str(i)) ' trim av ledande utrymmen
Om jag < 10 sedan
registernumber = "0" + registernumber "lägga till 0 i siffror under 10
Slut om
RichTextBox1.AppendText (registernumber + "=" + Str(PicaxeRegisters(i)) + Chr(13))
Nästa "chr(13) är transport tillbaka så ny linje
End Sub
Sub-SaveRegistersToLocalFile() ' Spara registret matris i en lokal textfil
"använda en fil med filnamnstillägget CSV för excel (comma separerade)
Dim jag som heltal
Dim DateTime som sträng
Dim LineOfText som sträng
ArkivÖppna (1, TextBox3.Text, OpenMode.Append) ' öppna textfilen i textrutan som heter
För i = 0 till 13
LineOfText = LineOfText + Str(PicaxeRegisters(i)) + ","
Nästa
DateTime = nu
LineOfText = LineOfText + DateTime ' Lägg till i datum
PrintLine (1, LineOfText)
FileClose(1) ' Stäng filen
End Sub
Slutet klass