Enkel lagring för projektet microcontroller (5 / 5 steg)

Steg 5: Skriva koden



Skriva kod är lite komplicerat, men låt oss börja enkelt. Skicka uDrive bara 1 byte, en karaktär U, på din nominerade baud, så antingen får du tre saker tillbaka. En 06, vilket innebär att det fungerade, en 15 vilket innebär det fick byten men förstod inte det, eller ingenting, vilket innebär att enheten är inte ansluten eller inte trådbunden upp rätt.

Här är några vb.net-kod att göra detta:

SerialPort.Open() ' öppna porten
SerialPort.DiscardInBuffer() ' Rensa indatabufferten
OutPacket(0) = Strings.Asc("U") ' Skicka en och detta ställer baudhastighet
SerialPort.Write (OutPacket, 0, 1) ' Skicka data i outpacket börjar 0, 1 byte
Sleep(100) "vänta på svar
SerialPort.Read (InPacket, 0, 1) ' läsa 1 byte tillbaka, bör 06
SerialPort.Close()

Nu blir alla komm på denna baud. Priser från 300 till 38400 arbete talar till en dator med en 3 meter lång kabel. Med en kortare kabel skulle det lätt gå snabbare.

Koden nedan är den kompletta källkoden i vb.net (vb.net är gratis). Huvudsakliga komplikationerna är hur uDrive delar filer upp i bitar - du måste titta på arrayer och heltalsdivision och resten frågor och skriva dessa rutiner i önskat språk för din mikro.

UDrive kostar $30US.

UDrive kan också arbeta i Raw-läge, där du läsa och skriva till enskilda sektorer. Detta är användbart om du vill gränssnitt till ett existerande operativsystem, till exempel CP/M. Mer kreativitet händer på Vintage dator forum, Picaxe forumet och N8VEM forum.

Håll ögonen öppna, eftersom nästa lilla projekt är att få en $3 picaxe 08M att skriva en liten fil som kan läsas av en PC.

Ha det så kul!

"uDrive exempelkod till vb.net
"test setup är en uDrive som talar till en dator serieport via en max232
"James Moxham maj 2009 moxhamj på internode.on.net

Importerar System.IO "behövs för att köra olika samtal
Importerar strängarna = Microsoft.VisualBasic "så kan använda saker som vänster (och rätt (för strängar
Public Class Main
Dim WithEvents SerialPort som nya IO. Ports.SerialPort "serieport deklarera
Offentligt deklarera Sub sömn Lib "kernel32" (ByVal dwMilliseconds As Integer) "för sömn uttalanden
Offentliga InPacket(0 To 2000) som Byte ' bugg med serial.write strängar som chr(255) brukar gå
Offentliga OutPacket(0 To 50) som Byte "vanligt endast skicka ut några byte ändå så kunde göra detta mindre
Private Sub Initialise_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar Initialise.Click
"initiera
"skicka en U på den valda baud klassar baud mottagarens initialisering
Försök
SerialPort.PortName = "COM1"
SerialPort.BaudRate = "38400" "38400
SerialPort.Parity = IO. Ports.Parity.None ' ingen paritet
SerialPort.DataBits = 8 ' 8 bitar
SerialPort.StopBits = IO. Ports.StopBits.One "en stoppbit
SerialPort.ReadTimeout = 1000' millisekunder så gånger i 1 sekund om inget svar
SerialPort.Open() ' öppna porten
SerialPort.DiscardInBuffer() ' Rensa indatabufferten
OutPacket(0) = Strings.Asc("U") ' Skicka en och detta ställer baudhastighet
SerialPort.Write (OutPacket, 0, 1) ' Skicka data i matrisen outpacket börjar på 0 med 1 byte
Sleep(100) "vänta på svar
SerialPort.Read (InPacket, 0, 1) ' läsa 1 byte tillbaka, bör 06
SerialPort.Close()
Fånga som undantag
MsgBox ("fel öppning seriell port - är ett annat program använder COM1?")
SerialPort.Close()
Slutet försök
Om InPacket(0) = 6 då
TextBox1.Text += "Initialised" + vbCrLf "framgång
Annat
TextBox1.Text += "Initiering misslyckades" + vbCrLf "misslyckas
Slut om
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar Button2.Click
"avstängning programmet - kontrollera seriella porten är stängd
SerialPort.Close()
Slutet
End Sub

Private Sub ReadFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar ReadFile.Click
"läsa tillbaka en fil
"namn är i textrutan i formatet FILENAME. TXT där namn är 1 till 8 tecken och förlängning är 3 tecken
Dim filnamn som sträng
Dim LengthFilename som heltal
Dim jag som heltal
Dim j som heltal
Dim Counter som heltal
Dim BytesToRead som heltal
Dim filstorlek As Long ' storleken på filen för att läsa tillbaka
Dim PacketSize som heltal
Dim paket As Long ' antal paket
Dim resten As Long ' resten
Dim Readarray(50000) som Byte "matris att läsa data i
Dim Readcounter As Long ' counter för readarray
Readcounter = 0' Återställ räknaren för readarray
PacketSize = 10' Använd 10 som bekvämt för picaxe
Filnamn = TextBox2.Text ' namn av arkivera läsa
LengthFilename = Strings.Len(Filename) ' längd av detta filnamn
OutPacket(0) = Strings.Asc ("" kommandot för att läsa
OutPacket(1) = Strings.Asc("a")
OutPacket(2) = PacketSize ' få i block av n byte
Räknare = 3' steg counter
För i = 1 till LengthFilename "skicka ut filnamn
OutPacket(Counter) = Strings.Asc (Strings.Mid (filnamn, i 1))
Räknare = räknare + 1
Nästa
OutPacket(Counter) = 0' null-sträng till slut
Räknare = räknare + 1' en mer byte
SerialPort.Open() ' öppna den seriella porten
SerialPort.Write (OutPacket, 0, Counter) ' Skicka data i matrisen outpacket börjar på 0
Sleep(100) "vänta på svar
BytesToRead = SerialPort.BytesToRead ' hur många byte i bufferten? Bör vara 4
SerialPort.Read (InPacket, 0, BytesToRead) ' läsa dem i
"få storleken i byte, msb första, 4 byte
Filesize = InPacket(0) * 16777216 + InPacket(1) * 65536 + InPacket(2) * 256 + InPacket(3)
Filesize = filstorlek + 1' antal byte plus det finns en < ack > på slutet
Räknare = 0' Återställ räknaren
Paket = filstorlek \ PacketSize ' heltalsdivision
Resten = Filesize Mod PacketSize ' och resten vänster över
För i = 0 till paket - 1' get n block av data
OutPacket(0) = 6' ack
SerialPort.Write (OutPacket, 0, 1) ' begära ett block
Sleep(100) ' kort fördröjning
SerialPort.Read (InPacket, 0, PacketSize) ' läsa tillbaka ett block
För j = 0 till PacketSize - 1' butik i en matris
Readarray(Readcounter) = InPacket(j)
Readcounter + = 1' lägga till 1 i readcounter
Nästa
Nästa
"nu får resten
OutPacket(0) = 6' ack
SerialPort.Write (OutPacket, 0, 1) ' begära ett block
Sleep(100) "vänta på att komma tillbaka
SerialPort.Read (InPacket, 0, resten) "Läs resten bytes, senast ska vara 06
För j = 0 till resten - 1' butik i en matris
Readarray(Readcounter) = InPacket(j)
Readcounter + = 1' lägga till 1 i readcounter
Nästa
"skriva ut ett meddelande att säga om det fungerade eller inte, dvs är det sista tecknet = 06
Om Readarray (Readcounter - 1) = 6 då
TextBox1.Text += vbCrLf + "Läs framgång" + vbCrLf
Annat
TextBox1.Text += vbCrLf + "Läs misslyckas" + vbCrLf
Slut om
"om den faktiska filen är 4 byte lång så det finns nu en < ack > i slutet
' = 5 byte och sist readcounter += 1 gör readcounter = 6
"så trimma bort och gör readcounter rätt
Readcounter = Readcounter - 1' nu kommer vara = 4
Readarray(Readcounter) = 0 ' stryka ack (antar det kom igenom, det bör ha)
SerialPort.Close() ' stänga den seriella porten
"vb.net testa koden - skriva ut filen i en textruta
För i = 0 till Readcounter - 1
TextBox1.Text += Strings.Chr(Readarray(i))
Nästa
End Sub
Private Sub Dir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar Dir.Click
Dim DirBytes som heltal
Dim jag som heltal
OutPacket(0) = Strings.Asc ("" kommandot för att läsa
OutPacket(1) = Strings.Asc("d") ' katalog
OutPacket(2) = Strings.Asc("*") ' få alla
OutPacket(3) = 0' noll till slut
SerialPort.Open() ' öppna den seriella porten
SerialPort.Write (OutPacket, 0, 4) "skicka data i matrisen outpacket start på
Sleep(2000) "vänta ett tag, stora dumpar ta lång tid (eller bara avsöka indata)
DirBytes = SerialPort.BytesToRead ' antal byte att läsa tillbaka
SerialPort.Read (InPacket, 0, DirBytes)
SerialPort.Close()
"Visa det
TextBox1.Text += vbCrLf
För i = 0 till DirBytes - 2' -1 och sedan 1 mindre för ack i slutet
Om InPacket(i) <> 10 sedan ' 10 är avgränsaren i denna lista
TextBox1.Text += Strings.Chr(InPacket(i))
Annat
"Ersätt med en ny rad
TextBox1.Text += vbCrLf
Slut om
Nästa
End Sub
Private Sub Era_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar Era.Click
Dim filnamn som sträng
Dim LengthFilename som heltal
Dim jag som heltal
Dim Counter som heltal
Filnamn = TextBox3.Text
LengthFilename = Strings.Len(Filename)
OutPacket(0) = Strings.Asc ("
OutPacket(1) = Strings.Asc("e") ' Radera
räknare = 2
För i = 1 till LengthFilename "skicka ut filnamn
OutPacket(Counter) = Strings.Asc (Strings.Mid (filnamn, i 1))
Räknare = räknare + 1
Nästa
OutPacket(Counter) = 0' null-sträng att avsluta
Motverka += 1
SerialPort.Open() ' öppna den seriella porten
SerialPort.Write (OutPacket, 0, motverka) ' Skicka data i matrisen outpacket börjar på 0
Sleep(100) "vänta på svar
SerialPort.Read (InPacket, 0, 1) ' erkänna
Om InPacket(0) = 6 då
TextBox1.Text += "Radera framgång" + vbCrLf "framgång
Annat
TextBox1.Text += "Radera misslyckades" + vbCrLf "misslyckas
Slut om
SerialPort.Close()
End Sub

Private Sub Writefile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) hanterar Writefile.Click
Dim Filestring As String "bekvämt lagra som en sträng för att testa
Dim Filearray(1000) som Byte ' arbete med matriser för filen
Dim FileLength så länge
Dim PacketSize som heltal
Dim jag som heltal
Dim j som heltal
Dim filnamn som sträng
Dim paket så länge
Dim PacketRemainder som heltal
Dim FileCounter så länge
FileCounter = 0
Filnamn = TextBox5.Text ' namn på fil för att spara
Filestring = TextBox4.Text ' dessa data skulle normalt komma från någon annanstans
PacketSize = 10
FileLength = Strings.Len(Filestring)
"flytta strängen i vektorn. (Denna sträng är bara en bekvämlighet för testning)
För i = 1 till FileLength
Filearray (i - 1) = Strings.Asc (Strings.Mid (Filestring, i, 1)) ' konvertera till ASCII-värde
Nästa
"filen är klar att produktionen
OutPacket(0) = Strings.Asc ("" kommandot
OutPacket(1) = Strings.Asc("t") ' skriva
OutPacket(2) = PacketSize ' storlek paket 0-50, ny fil (inte append läge)
SerialPort.Open() ' öppna den seriella porten
SerialPort.Write (OutPacket, 0, 3) "skicka data i matrisen outpacket börjar på 0
För i = 1 till Strings.Len(Filename) "skicka ut filnamnet
OutPacket(0) = Strings.Asc (Strings.Mid (filnamn, i 1))
SerialPort.Write (OutPacket, 0, 1) ' Skicka den byten
Nästa
OutPacket(0) = 0
SerialPort.Write (OutPacket, 0, 1) ' Skicka ut en null-sträng för att avsluta
"nu sända 4 byte för filen längd
OutPacket(0) = FileLength \ 16777216' heltalsdivision
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength \ 65536' heltalsdivision
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength \ 256' heltalsdivision
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength Mod 256' resten
SerialPort.Write (OutPacket, 0, 1)
Sleep(100) "vänta på att erkänna
SerialPort.Read (InPacket, 0, 1) ' bör vara 06
Om InPacket(0) <> 6 sedan
TextBox1.Text += "Fel med första Läs"
Slut om
"nu sända data i packetsize grupper
Paket = FileLength \ PacketSize ' heltalsdivision
PacketRemainder = FileLength Mod PacketSize
För i = 1 till paket
För j = 1 till PacketSize
OutPacket(0) = Filearray(FileCounter)
SerialPort.Write (OutPacket, 0, 1)
FileCounter = FileCounter + 1
Nästa
Sleep(100)
SerialPort.Read (InPacket, 0, 1)
Om InPacket(0) <> 6 sedan
TextBox1.Text += "Fel med paket"
Slut om
Nästa
"nu skicka ut resten om det finns
Om PacketRemainder <> 0 sedan
För j = 1 till PacketRemainder
OutPacket(0) = Filearray(FileCounter)
SerialPort.Write (OutPacket, 0, 1)
FileCounter = FileCounter + 1

Nästa
Sleep(100)
SerialPort.Read (InPacket, 0, 1)
Om InPacket(0) <> 6 sedan
TextBox1.Text += "Skriva misslyckas på sista packet"
Slut om
Slut om
SerialPort.Close()
End Sub
Avsluta klass

Se Steg
Relaterade Ämnen

DIY enkel flamma efter Robot utan Microcontroller

Detta är ett roligt att göra roboten. Robot början att flytta om sensorn känner flamma, var försiktig när du använder ett ljusare eller andra element med låga.Nödvändiga komponenter:1 x Castor hjulet2 x hjul2 x redskap Motors1 x lågan sensor1 x chass...

Enkel vinklade Loft lagring skåp

Hej, Välkommen till min första instructable!Detta kommer att visa dig hur man gör några super enkel lagring skåp, för lofts som har tak den vinkeln i. Jag gjorde dessa att göra använda av det utrymme som normalt slösas på kanterna av våra loft, där s...

210 DVD & 70 CD lagring Rack

enkel lagring rack för CD & DVD.1 - Köp träskivor.2 - skär delar med design åtgärder.3 - Lägg kanterna med lim eller strykjärn, utom i unionen pekar (vertikala delar, upp och ned).4 - monterar moduler sammanlänkning med träskruv, använda en borrmaski...

En enkel klappa växla med 3 olika krets moduler

detta projekt har tagits från buildcircuit.com. Följande schematiska och krets layout visar en enkel klappa switch.Projektet har bestått av 3 olika och oberoende krets moduler:1. en mörk sensor med två transistorer2. en mörk sensor använder NE5553. e...

Utomhus sidobord med lagring

går bra med utomhus lagring bänk projektet jag har publicerat. Avsikten var för en matchande sidobord att gå med den bänken, men du kan bygga detta på egen hand förSteg 1: Gör benen Allt du behöver för denna hela bygga är 1 x 6 cedar styrelser, fläck...

Instant lagring för våren klämmor

jag var i Boden i morse, arbetar på ett litet projekt som kommer att vara en av min nästa Instructables, när det slog mig att någon kan dra nytta av denna mycket enkel lagring idé.Jag hade turen att hitta en gammal innerslang i vägen en dag och plock...

Underkläder / strumpa lagring-ingen sy

Enkelt för att göra lagring lösning hjälpte mig att organisera mina stor kaotisk hög strumpor och underkläder.Jag har redan gjort 4 och de är super praktisk, trevligt ute och inte behöver golvyta.du behöver bara några grundläggande verktyg, och det ä...

En trälåda

min dotters leksaker vuxit ut deras Rubbermaid behållare. Min fru ville ha en leksak låda som kunde vara satt på. Jag hade bara bärgat en våningssäng som någon lämnat på soptippen. Med det, låt oss börja resan:Jag kollade instructables och körde en s...

Ett helt 3D utskrivbara Mixed Reality spel (Pseussudio)

Med tanke på den förestående lanseringen av Projekt Tango 3D scanning smartphone från Google och Lenovo, som sannolikt 3D scanning-kompatibel iPhone 7 Plus från Apple, beslöt jag att skapa en grov proof-of-concept spel att visa ett komplett blandad v...

Hur man bygger en boll Bin hylla

bollen Bin!Kände du någonsin du behöver ett bättre ställe att lägga din sport bollar?Vi gjorde. Att ha tre pojkar, 6, 9 och 15 innebär att ha en bra mängd sportutrustning. Det var en ständig kamp att käbbla basketbollar, fotbollar, fotbollar, basebal...

Skokartong hyllor

detta projekt är perfekt för alla du sparsam lägenhet eller studentrum dväljas ute, letar du efter billig och enkel lagring som är tillfälliga och kan även ge ut på crafty sidan i dig!Steg 1: Vad du behöver 1. två stadiga skokartonger2. slätt vitt li...

Puppy Play Box

Hur man bygger och använda din egen valp spela BoxTidig stimulering med hjälp av en Puppy spela Box är ett underbart sätt att införa baby valpar till sevärdheter, ljud, beröring och motion de kommer att uppleva under deras dagliga liv. Förtroende är...

Magnetiska mjuk Jaws för ett skruvstäd

detta är en uppsättning av mjuk käkar jag gjort för min vise. De är gjorda av 1 x 2 tum PÄLSGARNERING strips.För några veckor sedan jag tittar på Woodsmith Shop TV-show på PBS. De visade en uppsättning av hembakade mjuka jaws för ett skruvstäd som hå...

En ny Hobby/träslöjd/projekt skjul

bestämde jag mig äntligen var det dags att "bita ihop" och bygga själv en hängiven hobby byggnad som jag kämpade för att hitta en anständig utrymme att arbeta som garaget hade 2 bilar, en motorcykel, en tur på gräsklipparen, 4 frysar och diverse...

Låg kostnad inomhus dammen

jag byggde denna dammen för mitt vardagsrum i två dagar. Den totala kostnaden var mindre än $200, med gemensamma verktyg och andra objekt som finns tillgängliga på din lokala järnaffär eller hem och trädgård centrum.Steg 1: Inledande designBestämma d...

DIY Li-Fi med hjälp av Arduino Uno

Mycket enkel och användbar projektet att förstå bearbetning av Li-Fi, du kan också göra din egen Li-Fi-enhet med lite mer ändringar av design och koden försynt. Du faktiskt behöver två arduino, en skicka och den andra för att ta emot för att göra det...

Laser skär Gitarrställ

Enkel laser skär projektet. Allt du behöver är 3 saker.Trä (vi använde 1/2" Björk, men många kommer att göra)TrälimLaserskärareSteg 1: LaserskärningLaser skär bitar. Här använder vi en 150W Full Spectrum maskin för att klippa 1/2" Björk. Om du h...

20mm litet utrymme skor hyllan (vik kan)

Det finns ett litet utrymme mellan väggen och dörren.Utrymmet är ca 20mm, jag gör en PVC struktur (20mm PVC slang) för att hänga "våta" skor och enkel lagring. (som paraply och toffel)Jag gör hela rektangeln strukturera det insatsen in i detta l...

Lätt och biologisk bekämpning av skadedjur

i detta instructable jag ska visa dig ett enkelt knep för att döda kackerlackor och myror och möjligen även hjälpa växter.Det innebär bakpulver och fina socker. Och det är helt bio.Läs på...Steg 1: ingredienser Först ta lite socker och lite bakpulver...