Stockage de masse simple pour votre projet de microcontrôleur (5 / 5 étapes)

Étape 5: Écriture du code

L’écriture de code est un peu compliqué, mais commençons simple. Envoyer l’uDrive seulement 1 octet, un caractère de U, à votre débit en bauds proposé, et vous obtenez soit trois choses en retour. Un 06, ce qui signifie que cela a fonctionné, un 15 qui signifie qu’il a obtenu l’octet mais ne comprenait pas, ou rien, qui signifie que le lecteur est pas connecté ou non câblé haut droit.

Voici un code vb.net pour ce faire :

SerialPort.Open() ' ouvrir le port
SerialPort.DiscardInBuffer() ' effacer la mémoire tampon d’entrée
OutPacket(0) = Strings.Asc("U") ' un vous envoyer et cela affecte le débit en bauds
SerialPort.Write (OutPacket, 0, 1) ' envoyer données dans outpacket commencent à 0, 1 octet
Sleep(100) ' attendre la réponse
SerialPort.Read (InPacket, 0, 1) ' lire 1 octet retour, devrait être 06
SerialPort.Close()

Par la suite, tous les comms aura lieu à ce débit en bauds. Tarifs de 300 à 38400 travail, parler à un PC avec un câble de 3 mètres. Avec un câble plus court, il serait facilement aller plus vite.

Le code ci-dessous est le code source complet en vb.net (vb.net est disponible gratuitement). Les principales complications sont la façon dont l’uDrive scinde les fichiers en morceaux - vous avez besoin regarder les baies et la division (entière) et division reste et écrire ces routines dans votre langue préférée pour votre micro.

L’uDrive coûte $30US.

L’uDrive peut également travailler en mode Raw, où vous lire et écrire dans différents secteurs. Ceci est utile où vous souhaitez l’interface d’un système d’exploitation existant, comme le CP/M. Plus de remue-méninges qui se passe au forum ordinateur Vintage, le forum Picaxe et le forum de N8VEM.

Restez à l’écoute, comme le projet peu suivant sera d’obtenir un 3 $ picaxe 08M pour écrire un petit fichier qui peut être lu par un PC.

Amusez-vous!

' uDrive exemple de code pour vb.net
« configuration de test est un uDrive parlant au port série d’un PC via un max232
« James Moxham mai 2009 moxhamj à internode.on.net

Imports System.IO ' nécessaires à l’exécution des différents appels
Importations de cordes = Microsoft.VisualBasic ' pour permettre d’utiliser les choses comme gauche (et à droite (pour les chaînes
Public Class Main
Dim WithEvents SerialPort As New IO. Ports.SerialPort ' port série déclarer
Public Declare Sub sommeil Lib « kernel32 » (ByVal dwMilliseconds As Integer) ' pour les déclarations de sommeil
Public InPacket(0 To 2000) As Byte ' bug avec serial.write des chaînes comme chr(255) ne sors
Public OutPacket(0 To 50) As Byte ' envoient habituellement seulement quelques octets mais tellement pourrait faire cela plus petits
Private Sub Initialise_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Initialise.Click
« mise en service
« Envoyer un U à la bauds taux de baud sélectionnés pour initialiser
Essayez
SerialPort.PortName = « COM1 »
SerialPort.BaudRate = « 38400 » ' 38400
SerialPort.Parity = IO. Ports.Parity.None ' aucune parité
SerialPort.DataBits = 8 ' 8 bits
SerialPort.StopBits = IO. Ports.StopBits.One ' un bit d’arrêt
SerialPort.ReadTimeout = 1000' millisecondes alors arrive à expiration en 1 seconde si aucune réponse
SerialPort.Open() ' ouvrir le port
SerialPort.DiscardInBuffer() ' effacer la mémoire tampon d’entrée
OutPacket(0) = Strings.Asc("U") ' un vous envoyer et cela affecte le débit en bauds
SerialPort.Write (OutPacket, 0, 1) ' envoyer des données dans le tableau outpacket début à 0 avec 1 octet
Sleep(100) ' attendre la réponse
SerialPort.Read (InPacket, 0, 1) ' lire 1 octet retour, devrait être 06
SerialPort.Close()
Catch ex As Exception
MsgBox ("erreur ouverture port série - est un autre programme utilise COM1?")
SerialPort.Close()
End Try
Si InPacket(0) = 6 Then
TextBox1.Text += « Initialised » + "\n" ' succès
D’autre
TextBox1.Text += « Initialisation a échoué » + "\n" ' échec
End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
"arrêt du programme - s’assurer que le port série est fermé
SerialPort.Close()
Fin
End Sub

Private Sub ReadFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ReadFile.Click
« relire un fichier
' nom de fichier est dans la zone de texte dans le format de nom de fichier. TXT dont le nom est de 1 à 8 caractères, et extension est de 3 caractères
Dim Filename As String
Dim LengthFilename As Integer
Dim i As Integer
Dim j As Integer
Dim compteur As Integer
Dim BytesToRead As Integer
Dim taille As Long ' taille du fichier à collationné
Dim PacketSize As Integer
Dim paquets As Long ' nombre de paquets
Dim reste As Long ' reste
Dim Readarray(50000) As Byte ' tableau pour lire les données dans
Dim Readcounter As Long ' compteur pour le readarray
Readcounter = 0' réinitialiser le compteur pour le readarray
PacketSize = 10' utilisation 10 aussi pratique pour picaxe
Filename = TextBox2.Text ' nom du fichier à lire
LengthFilename = Strings.Len(Filename) ' longueur de ce nom de fichier
OutPacket(0) = Strings.Asc (» « commande pour lire
OutPacket(1) = Strings.Asc("a")
OutPacket(2) = PacketSize ' obtenir par blocs de n octets
Compteur = 3' au compteur d’incrémentation
Pour i = 1 To LengthFilename ' envoyons filename
OutPacket(Counter) = Strings.Asc (Strings.Mid (Filename, i, 1))
Compteur = compteur + 1
Prochaine
OutPacket(Counter) = 0' chaîne vide à la fin
Compteur = compteur + 1' un octet plus
SerialPort.Open() ' ouvrir le port série
SerialPort.Write (OutPacket, 0, compteur) ' envoyer des données dans le tableau outpacket début à 0
Sleep(100) ' attendre la réponse
BytesToRead = SerialPort.BytesToRead ' combien d’octets dans la mémoire tampon ? Devrait être de 4
SerialPort.Read (InPacket, 0, BytesToRead) ' lire dans
' obtenir la taille du fichier en octets, msb premières, 4 octets
Taille du fichier = InPacket(0) * 16777216 + InPacket(1) * 65536 + InPacket(2) * 256 + InPacket(3)
Taille du fichier = Filesize + 1' nombre d’octets plus il y a un < ack > sur la fin
Compteur = 0' remise à zéro du compteur
Les paquets = Filesize \ PacketSize ' division d’entiers
Reste = Filesize Mod PacketSize ' et reste gauche sur
Pour i = 0 à sachets - 1' get les n blocs de données
OutPacket(0) = accusé de 6 réception
SerialPort.Write (OutPacket, 0, 1) ' demander un bloc
Sleep(100) ' court retard
SerialPort.Read (InPacket, 0, PacketSize) ' collationné un bloc
For j = 0 To PacketSize - magasin 1' dans un tableau
ReadArray(Readcounter) = InPacket(j)
Readcounter += 1' ajouter 1 à readcounter
Prochaine
Prochaine
« maintenant obtenir le reste
OutPacket(0) = accusé de 6 réception
SerialPort.Write (OutPacket, 0, 1) ' demander un bloc
Sleep(100) ' attendre qu’il revienne
SerialPort.Read (InPacket, 0, reste) ' lire les octets reste, dernière devrait être 06
For j = 0 To reste - magasin 1' dans un tableau
ReadArray(Readcounter) = InPacket(j)
Readcounter += 1' ajouter 1 à readcounter
Prochaine
' impression d’un message pour dire si cela a fonctionné ou pas, c’est à dire est le dernier caractère = 06
Si Readarray (Readcounter - 1) = 6 Then
TextBox1.Text += + "\n" + « Succès lire » + "\n"
D’autre
TextBox1.Text += + "\n" + « Échec de la lecture » + "\n"
End If
' si le fichier est long de 4 octets, alors il y a maintenant un < ack > à la fin
' = 5 octets et le dernier readcounter += 1 fait readcounter = 6
« alors couper et faire la readcounter correcte
Readcounter = Readcounter - 1' sera maintenant = 4
ReadArray(Readcounter) = 0 ' supprimer l’accusé de réception (suppose que c’est venu par le biais, il devrait avoir)
SerialPort.Close() ' fermer le port série
« vb.net code d’essai - imprimer le fichier dans une zone de texte
For i = 0 To Readcounter - 1
TextBox1.Text += Strings.Chr(Readarray(i))
Prochaine
End Sub
Private Sub Dir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Dir.Click
Dim DirBytes As Integer
Dim i As Integer
OutPacket(0) = Strings.Asc (» « commande pour lire
OutPacket(1) = Strings.Asc("d") ' annuaire
OutPacket(2) = Strings.Asc("*") ' obtenir toutes les
OutPacket(3) = 0' zéro à la fin
SerialPort.Open() ' ouvrir le port série
SerialPort.Write (OutPacket, 0, 4) ' envoyer des données dans le tableau outpacket démarrage à
Sleep(2000) ' attendre un certain temps, grandes décharges prennent beaucoup de temps (ou sondage juste l’entrée)
DirBytes = SerialPort.BytesToRead ' nombre d’octets à lire à l’arrière
SerialPort.Read (InPacket, 0, DirBytes)
SerialPort.Close()
' afficher
TextBox1.Text += + "\n"
Pour i = 0 à DirBytes - 2' -1 puis 1 moins pour l’accusé de réception à la fin
Si InPacket(i) <> 10 puis ' 10 est le délimiteur dans cette liste
TextBox1.Text += Strings.Chr(InPacket(i))
D’autre
"remplacer par une nouvelle ligne
TextBox1.Text += + "\n"
End If
Prochaine
End Sub
Private Sub Era_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Era.Click
Dim Filename As String
Dim LengthFilename As Integer
Dim i As Integer
Dim compteur As Integer
Filename = TextBox3.Text
LengthFilename = Strings.Len(Filename)
OutPacket(0) = Strings.Asc ("
OutPacket(1) = Strings.Asc("e") ' effacer
compteur = 2
Pour i = 1 To LengthFilename ' envoyons filename
OutPacket(Counter) = Strings.Asc (Strings.Mid (Filename, i, 1))
Compteur = compteur + 1
Prochaine
OutPacket(Counter) = 0' null string pour terminer
Counter += 1
SerialPort.Open() ' ouvrir le port série
SerialPort.Write (OutPacket, 0, contrer) ' envoyer des données dans le tableau outpacket début à 0
Sleep(100) ' attendre la réponse
SerialPort.Read (InPacket, 0, 1) ' reconnaître
Si InPacket(0) = 6 Then
TextBox1.Text += « Erase succès » + "\n" ' succès
D’autre
TextBox1.Text += « Erase a échoué » + "\n" ' échec
End If
SerialPort.Close()
End Sub

Private Sub Writefile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Writefile.Click
Dim Filestring As String ' commode pour stocker sous forme de chaîne pour les tests
Dim Filearray(1000) As Byte ' travailler avec des tableaux pour le fichier
Dim FileLength aussi longtemps
Dim PacketSize As Integer
Dim i As Integer
Dim j As Integer
Dim Filename As String
Dim paquets aussi longtemps
Dim PacketRemainder As Integer
Protected FileCounter aussi longtemps
FileCounter = 0
Filename = TextBox5.Text ' nom du fichier à enregistrer
Filestring = TextBox4.Text ' ces données seraient normalement venir d’ailleurs
PacketSize = 10
FileLength = Strings.Len(Filestring)
"déplacer la chaîne dans le tableau. (Cette chaîne est juste pratique pour les tests)
For i = 1 To FileLength
Filearray (i - 1) = Strings.Asc (Strings.Mid (Filestring, i, 1)) ' convertir en valeur ascii
Prochaine
« fichier est prêt pour la sortie
OutPacket(0) = Strings.Asc (» « commande
OutPacket(1) = Strings.Asc("t") ' écrire
OutPacket(2) = PacketSize ' taille des paquets 0-50, nouveau fichier (pas ajouter mode)
SerialPort.Open() ' ouvrir le port série
SerialPort.Write (OutPacket, 0, 3) ' envoyer des données dans le tableau outpacket début à 0
Pour i = 1 To Strings.Len(Filename) ' envoyer le nom de fichier
OutPacket(0) = Strings.Asc (Strings.Mid (Filename, i, 1))
SerialPort.Write (OutPacket, 0, 1) ' Envoyer cet octet
Prochaine
OutPacket(0) = 0
SerialPort.Write (OutPacket, 0, 1) ' envoyer une chaîne nulle à résilier
"Envoyer maintenant les 4 octets pour la longueur du fichier
OutPacket(0) = FileLength \ 16777216' division d’entiers
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength \ 65536' division d’entiers
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength \ 256' division d’entiers
SerialPort.Write (OutPacket, 0, 1)
OutPacket(0) = FileLength Mod 256' reste
SerialPort.Write (OutPacket, 0, 1)
Sleep(100) ' attente pour reconnaître
SerialPort.Read (InPacket, 0, 1) ' devrait être 06
Si InPacket(0) <> 6 puis
TextBox1.Text += « Erreur avec la première lecture »
End If
« maintenant envoyer les données en groupes packetsize
Les paquets = FileLength \ PacketSize ' division d’entiers
PacketRemainder = FileLength Mod PacketSize
For i = 1 à paquets
Pour j = 1 à PacketSize
OutPacket(0) = Filearray(FileCounter)
SerialPort.Write (OutPacket, 0, 1)
FileCounter = FileCounter + 1
Prochaine
Sleep(100)
SerialPort.Read (InPacket, 0, 1)
Si InPacket(0) <> 6 puis
TextBox1.Text += « Erreur avec le paquet »
End If
Prochaine
« maintenant envoyer le reste s’il existe
Si PacketRemainder <> 0 puis
Pour j = 1 To PacketRemainder
OutPacket(0) = Filearray(FileCounter)
SerialPort.Write (OutPacket, 0, 1)
FileCounter = FileCounter + 1

Prochaine
Sleep(100)
SerialPort.Read (InPacket, 0, 1)
Si InPacket(0) <> 6 puis
TextBox1.Text += « Échec d’écriture sur le dernier paquet »
End If
End If
SerialPort.Close()
End Sub
End Class

Articles Liés

Ajouter vidéo & Audio à votre projet de microcontrôleur

Ajouter vidéo & Audio à votre projet de microcontrôleur

7 Segment LED écrans sont utiles pour afficher des nombres et bitmap de l'écran LCD peut faire des graphiques simples, mais parfois une véritable sortie vidéo couleur est la meilleure façon d'aller :Vidéo composite (a.k.a., RCA Jack) est omniprésent
Beauté est seule peau profond - Package pour votre projet comme un Pro

Beauté est seule peau profond - Package pour votre projet comme un Pro

Cela ne va pas pour être un de vos Instructables normale où je vous montrer quelque chose que j'ai créé sur une maquette, fournir un code de source, un diagramme schématique, présentation du Conseil d'administration et terminer par une image de la fi
Filtre à Air simple pour votre automobile

Filtre à Air simple pour votre automobile

concevoir un filtre à air simple pour votre automobile utilisant les éléments minimums et au prix minimum.Toujours eu un problème de manque d'air dans la voiture en hivers avec windows enroulé. Grand en etes trop. travaux l'année là si préférez grimp
3 canaux Dimmer/fader pour Arduino ou autre microcontrôleur

3 canaux Dimmer/fader pour Arduino ou autre microcontrôleur

Dans une ancienne version instructable j'ai présenté un simple fader/variateur AC TRIAC qui pourrait être contrôlé avec un Arduino. Dans diverses réactions, que j'ai eu, un certain nombre de gens exprimé leur intérêt pour un fader RGB de 3 canaux. Ma
Sonnette de porte SIMPLE pour votre salle de

Sonnette de porte SIMPLE pour votre salle de

Dans ce Instructable que nous allons pour voir le making of simple sonnette de la porte de nos chambres, ce projet est plus simple même très bien fait par les débutants et très bon marché .ce projet coûte $1 / $2.La plupart d'entre eux veut la vie pr
Cool les affaire de PCB pour votre projet

Cool les affaire de PCB pour votre projet

Voici un moyen simple de créer un beau produit à la recherche tout en utilisant uniquement du PCB (les fabricants de PCB vont adorer vous:))Choses, c'est que vous avez besoin de PCB de toute façon pour votre produit électronique alors pourquoi ne pas
Vous faire propre télécommande personnalisée pour votre projet de

Vous faire propre télécommande personnalisée pour votre projet de

J'ai fait un projet qui utilisait un arduino et un IR supprimer bibliothèque pour contrôler quelques choses.Donc dans ce instructable je montre comment vous pouvez réutiliser une télécommande pour votre objectif sur.Et vous n'avez pas besoin de quelq
Module simple d’EEPROM pour Arduino ou autre microcontrôleur

Module simple d’EEPROM pour Arduino ou autre microcontrôleur

EEPROMs vous seront utiles si vous souhaitez stocker des données sans perdre. De nombreux microcontrôleurs viennent avec une EEPROM interne, mais comme EEPROMs ont un nombre fini (bien que très grand) d'écritures avant qu'ils commencent à devenir déf
Modifier un détecteur de fumée 6 EUR pour une utilisation avec microcontrôleur, appeleur automatique, liant et plus

Modifier un détecteur de fumée 6 EUR pour une utilisation avec microcontrôleur, appeleur automatique, liant et plus

dans une maison ou d'affaires, détecteurs de fumée et de feu central systèmes peuvent être essentielles pour sauver des vies et des biens.  Mais qu'en est-il lorsque personne n'est là ?  Grandes entreprises peuvent se permettre des systèmes contrôlés
Projet de microcontrôleur Arduino

Projet de microcontrôleur Arduino

projet piloté par microprocesseurComme vous le savez notre site repose sur le Circuit de projet électronique Simple. Mais pour atteindre des performances supérieures, (projet de niveau ingénieur) et de haute qualité de sortie à battre les concurrents
UART générique pour n’importe quel microcontrôleur

UART générique pour n’importe quel microcontrôleur

Communiquer avec un micro-contrôleur lors de l'exécution, est très utileinstallation. Il peut être utilisé pour le débogage, ou d'envoyer des commandes etc. L'un des plus simple protocole disponible pour communiquer est UART. Requiere une épingle pou
Simple Robot sans fil sans microcontrôleur

Simple Robot sans fil sans microcontrôleur

Un robot qui n'a pas n'importe quelle sorte de circuit de programmation ou complexe à construire, il s'agit d'un robot de débutant complet, n'importe qui peut faire cela sans beaucoup de connaissances sur l'électronique, tout ce dont vous avez besoin
Cas de plexiglas encliquetables pour votre projet de

Cas de plexiglas encliquetables pour votre projet de

il y a des mois, j'ai construit un thermostat pour contrôler ma température de four électrique (et cuisson meringues).Vous pouvez lire ici instructable connexe.Meringues sont toujours en attente, mais mon appareil a maintenant un nouveau boîtier en p
Comment choisir les polices pour votre projet à l’aide de Canva

Comment choisir les polices pour votre projet à l’aide de Canva

Il y a beaucoup de différents types de polices dans Canva a offerts gratuitement. Canva est un outil gratuit que n'importe qui peut utiliser comme une alternative à Adobe Photoshop. Canva a 1 million de photos de la réserve et vous pouvez choisir par