Hela världen microcontroller länk för under $20 (8 / 15 steg)
Steg 8: Lägga till lite kod
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 "behöver allt sånt skräp - .net uttrycker det i automatiskt när gå form1events ovan / ladda
Timer1.Enabled = True ' sätta detta i koden som standard false när skapade
Timer1.Interval = 20000' var 20 sekund
PictureBox1.BackColor = Color.Gray ' börja med den comms lådor grå
PictureBox2.BackColor = Color.Gray
ModifyFlag = False "om ändra värdet manuellt då hoppa nedladdning
RichTextBox1.Multiline = True "så kan visa mer än en rad
Kalla DisplayPicaxeRegisters() "Visa 14 register
Kalla ReadFTPFilename() "Läs filnamnet av disken (omsparade varje 20 sekunder)
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
Sub FTPUpload (ByVal filnamn som sträng)
Dim localFile As String "plats att lagra data
Dim remoteFile As String "filnamn är så känsliga detta är verkligen viktigt
CONST host As String = "ftp://ftp.0catch.com" "notera 0 är en nolla inte ett tecken O
CONST användarnamn As String = "picaxe.0catch.com"
CONST lösenord As String = "picaxetester"
Dim URI som sträng
localFile = filnamn "kanske inte behövs men om definierar en plats t.ex c:\mydirectory lätt kan tillfoga hitåt
remoteFile = "/" + filnamn "fil på FTP-servern behöver" / "till framför
URI = värd + remoteFile
Försök
Dim ftp som System.Net.FtpWebRequest = CType(System.Net.FtpWebRequest.Create(URI), System.Net.FtpWebRequest)
ftp.Credentials = ny System.Net.NetworkCredential(username, password) "logga in
ftp.KeepAlive = False ' kommer att koppla bort en gång gjort
ftp.UseBinary = True ' använda binär komm
ftp.Timeout = 9000' timeout efter 9 sekunder - mycket användbar som ftp ibland dör
"timeout (och klockfrekvens på 20 sekunder) kan behöva vara långsammare för uppringda anslutningar
ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile ' börja skicka filen
Dim fs som nya FileStream(localFile, FileMode.Open) "öppna lokal fil
Dim filecontents(fs. Längd) som Byte ' läsa i minnet
FS. Läsa (filecontents, 0, fs. Längd)
FS. Close() ' Stäng filen
Dim requestStream som ström = ftp.GetRequestStream() ' starta FTP-länk
requestStream.Write (filecontents, 0, filecontents. Längd) "skicka den
requestStream.Close() ' Stäng länken
PictureBox2.BackColor = Color.GreenYellow ' ändra rutan till green att säga fungerade ok
Label2.text = "FTP-ansluten" "texten säger att det anslutna
Fånga "kan inte ansluta
PictureBox2.BackColor = Color.Red ' om du vill red som ingen anslutning
Label2.text = "FTP ladda upp misslyckas" "text säger Anslutning misslyckades
Slutet försök
End Sub
Sub FTPDownload (ByVal filnamn som sträng)
' hämtar remotefile till localfile
Dim localFile As String "plats att lagra data
Dim remoteFile As String "filnamn är så känsliga detta är verkligen viktigt
CONST host As String = "ftp://ftp.0catch.com"
CONST användarnamn As String = "picaxe.0catch.com"
CONST lösenord As String = "picaxetester"
Dim URI som sträng
"localFile ="C:\"+ filnamn ' lagra i rotkatalogen men kan ändra detta
localFile = filnamn "så kan lägga till c:\ om måste definiera faktiska placering
remoteFile = "/" + filnamn ' lagt till remote FTP-plats
URI = värd + remoteFile "utgör fullständiga adress
Försök
Dim ftp som System.Net.FtpWebRequest = CType(System.Net.FtpWebRequest.Create(URI), System.Net.FtpWebRequest)
ftp.Credentials = ny System.Net.NetworkCredential(username, password) "logga in
ftp.KeepAlive = False ' kommer att kopplas från efter färdig
ftp.UseBinary = True "binärt läge
ftp.Timeout = 9000' timeout efter 9 sekunder
ftp.Method = System.Net.WebRequestMethods.Ftp.DownloadFile ' Hämta en fil
"Läs i bitar som inte vet hur stor filen är
Med hjälp av svar som System.Net.FtpWebResponse = bförebild (ftp.GetResponse, System.Net.FtpWebResponse)
Med hjälp av responseStream som IO. Ström = svar. GetResponseStream
Med fs som nya IO. FileStream (localFile, IO. FileMode.Create)
Dim buffer(2047) som Byte
Dim läsa As Integer = 0
Göra
Läs = responseStream.Read (buffert, 0, buffert. Längd) ' bit från ftp
FS. Skriva (buffert, 0, Läs) "och skriva till fil
Loop tills läste = 0' tills inga fler bitar
responseStream.Close() ' Stäng FTP-filen
FS. Flush() "spola klart
FS. Close() "och stäng filen
Sluta med
responseStream.Close() ' stänga den även om ingenting var där
Sluta med
svar. Close()
PictureBox2.BackColor = Color.GreenYellow ' green box som det fungerade
Label2.text = "FTP-ansluten" "och texten säger att det fungerat
Sluta med
Fånga "sätta felkoder här
PictureBox2.BackColor = Color.Red ' röd låda som det fungerade
Label2.text = "FTP-Hämta misslyckas" "och meddelande att säga detta
Slutet försök
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar Timer1.Tick
Om ModifyFlag = False Then "om användaren har ändrat en byte sedan inte hämta
Label3.text = "Hämtar"
System.Windows.Forms.Application.DoEvents() "så att nya etikettext visas
Ring FTPDownload(TextBox3.Text) ' Hämta fjärrfil
Label3.text = "Hämtade"
System.Windows.Forms.Application.DoEvents()
Kalla ReadRemoteFileToRegisters() "spara filnummer till arrayen register
Label3.text = "Talande till picaxe"
System.Windows.Forms.Application.DoEvents()
Annat
ModifyFlag = False ' återställa flaggan
Slut om
Kalla SerialTxRx() "Skicka till picaxe och läsa den tillbaka
Label3.text = "skickat och tagit emot från picaxe"
System.Windows.Forms.Application.DoEvents()
Kalla DisplayPicaxeRegisters()
Kalla SaveRegistersToLocalFile() "spara nummer till fil
Label3.text = "Ladda upp"
System.Windows.Forms.Application.DoEvents()
Kalla FTPUpload(TextBox3.Text) "skicka tillbaka upp till FTP-platsen benämn så mitt namn
Label3.text = "Vilar"
Kalla SaveFTPFilename() "så läser i när starta om
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
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar Button1.Click
Dim jag som heltal
"först kontrollera utanför intervallet
Jag = Val(TextBox1.Text)
Om jag < 0 eller jag > 13 sedan
TextBox1.Text = 0
Slut om
Jag = Val(TextBox2.Text)
Om jag < 0 eller jag > 255 sedan
TextBox2.Text = 0
Slut om
PicaxeRegisters(Val(TextBox1.Text)) = Val(TextBox2.Text) ' ändra värdet
Kalla DisplayPicaxeRegisters() "och uppdatera datavisningen
ModifyFlag = True "och nästa FTP-länken hoppa nedladdning
End Sub
Sub-SaveRegistersToLocalFile() ' Spara registret matris i en lokal textfil
Dim jag som heltal
ArkivÖppna (1, TextBox3.Text, OpenMode.Output) ' öppna textfilen i textrutan som heter
För i = 0 till 13
PrintLine (1, Str(PicaxeRegisters(i))) ' Spara 14 värden
Nästa
FileClose(1) ' Stäng filen
End Sub
Sub-ReadRemoteFileToRegisters() ' läsa lokal textfil i arrayen register
Dim jag som heltal
Dim LineOfText som sträng
Försök
ArkivÖppna (1, TextBox3.Text, OpenMode.Input) ' läsa namnet remote
För i = 0 till 13
LineOfText = LineInput(1) ' läsa i 14 rader
PicaxeRegisters(i) = Val(LineOfText) ' konvertera text till värden
Nästa
FileClose(1)
Fånga som undantag
FileClose(1) "filen finns inte så gör ingenting
Slutet försök
End Sub
Sub-ReadFTPFilename() "så avlägsen ftp filen heter samma sak nästa gång programmet körs
Dim LineOfText som sträng
Försök
ArkivÖppna (1, "FTPFilename.txt", OpenMode.Input) "öppna filen
LineOfText = LineInput(1)
TextBox3.Text = LineOfText ' läsa namnet
FileClose(1)
Fånga som undantag
FileClose(1)
Slutet försök
End Sub
Sub SaveFTPFilename()
ArkivÖppna (1, "FTPFilename.txt", OpenMode.Output) ' Spara namnet remote ftp
PrintLine (1, TextBox3.Text)
FileClose(1)
End Sub
Slutet klass