Étape 4: Le programme
Ci-dessous le programme est collé. Fondamentalement, vous pouvez suivre son fonctionnement en lisant les commentaires de programme. Les programmeurs plus expérimentés sauront probablement d’écrire du code plus simple et plus efficace. Ce que je peux dire, c’est ma première tentative, et il semble fonctionner.
' *** TemperatureSensor.bas ***
« Ce programme s’exécute sur un PICAXE - 20 X 2 à 4MHz qui se lit la température d’un
"Capteur de température DS18B20 & envoie à un écran de LCD 16 x 2 compatible HD44780.
'
"Développé par Simon Carter 10 mars 2013.
' *** Constantes ***
symbole EnablePin = C.7 ' Enable LCD broche reliée à C.7
symbole RegSelPin = C.4 ' LCD Registre selectionner broche reliée à C.4
symbole TempPin = C.1 ' données de capteur de température relié à C.1
' *** Variables ***
symbole de char = b0 ' caractère qui seront envoyés au LCD
indice du symbole = b1 ' utilisé comme compteur de boucles For-Next
symbole ° c = b2 "la valeur de température provenance du capteur DS18B20
symbole intgval = b3 ' utilisée pour stocker temporairement chaque valeur entière extraite le numéro reçu par le capteur
symbole degflag = b4 ' un drapeau utilisé lorsqu’il s’agit des températures négatives. 0 = plage postive, 1 = plage négative
symbole degf = b5 ' utilisé pour maintenir les degrés farenheight valeurs
' *** Directives ***
#com 3' spécifier Télécharger port
#picaxe 20 x 2' spécifier processeur
#no_data ' enregistrer le temps de téléchargement
#terminal off ' désactiver la fenêtre de terminal
' *** Table ***
Tableau 0, (« la température »)
' *** Programme principal ***
dirsB = % 11111111' ensemble toutes les broches de port comme sorties
dirsC = % 10111001' définir C.6 et C.2, C.1 comme entrées
pullup % 00000010' enable C.6 pullup interne résistance
' *** Initialiser l’écran LCD ***
pause pause 200' 200 mS pour l’initialisation des LCD selon les spécifications du HD44780
char = 56' installation pour 8 bits, 2 lignes et affichage de 5 X 8
GoSub CmdLCD ' envoyer les instructions pour LCD
char = 12' affichage sur, curseur off
GoSub CmdLCD ' envoyer les instructions pour LCD
char = 1' affichage clair, rentrer à la maison à la ligne 1 de l’affichage à cristaux liquides
GoSub CmdLCD ' envoyer les instructions pour LCD
attendre 1
' *** Envoyer du texte - « Température » de la ligne 1 du LCD ***
pour index = 0 à 15
indice de ReadTable, char ' lire les caractères de texte dans le tableau
GoSub TxtLCD ' envoyer le texte dans le tableau pour LCD
prochain indice
' *** Boucle principale - lire DS18B20 capteur ***
faire
char = 194' déplacer le curseur au début de la ligne 2
GoSub CmdLCD ' envoyer l’instruction à l’écran LCD
readtemp TempPin, degc ' lire la valeur de la température provenant de la sonde DS18B20 sur broche C1.0
pause 800' pause > 750 mS pour capteur selon les spécifications DS18B20
« ° c = 24 température test valeurs d’insertion ici pour vérifier la fonction code
degflag = 0' réinitialiser l’indicateur 0 c'est-à-dire assumer des températures positives de commencer par
GoSub BelowZeroC ' recherchez zéro températures inférieures
GoSub IntgOnly ' extrait de 10 et de 1 entiers de données DS18B20
GoSub DegCsign ' générer signe deg C
GoSub CheckFlag ' vérifier si vous traitez avec des températures comprises entre moins et ajuster la valeur de ° c
GoSub BelowZeroF ' recherchez zéro températures inférieures
GoSub DegFsign ' recherchez zéro températures inférieures
' générer signe deg F
boucle
' *** Sous-routines ***
CmdLCD :
faible RegSelPin ' mis en place l’écran LCD pour un octet de commande
Goto LoadLCD
TxtLCD: ' mis en place le LCD pour octets de texte
haute RegSelPin
LoadLCD: ; exécuter le chargement octets en LCD
outpinsB = char ' charger octet sur outpinsB
pulsout EnablePin, 1' charger octets sur LCD
retour
LoadIntgLCD: ' exécuter température de chargement octets de texte qui a été converti en un entier
haute RegSelPin ' mis en place le LCD pour octets de texte
outpinsB = intgval ' charger octet sur outpinsB
pulsout EnablePin, 1' exécuter chargement octets en LCD
retour
IntgOnly: ' extrait de 10, de 100 et de 1 entiers de données DS18B20
pour index = étape 2 à 0 -1 ' index pour extraire des entiers 100 ' s tout d’abord la valeur entier 10 puis 1
Let intgval = ° c indice de dig ' fonction utilisation creuser pour en extraire les entiers
Si intgval = 0 et l’index = 2 then let intgval = % 00100000 ' Blank tout menant à « 0 » sur l’écran
sinon si intgval = 0 alors laissez intgval = % 00110000' Convert entiers à codes de caractères LCD
sinon si intgval = 1 then let intgval = % 00110001
sinon si intgval = 2 then let intgval = % 00110010
sinon si intgval = 3 then let intgval = % 00110011
sinon si intgval = 4 puis laissez intgval = % 00110100
sinon si intgval = 5 alors laissez intgval = % 00110101
sinon si intgval = 6 then let intgval = % 00110110
sinon si intgval = 7 puis laissez intgval = % 00110111
sinon si intgval = 8 puis laissez intgval = % 00111000
sinon si intgval = 9 puis laissez intgval = % 00111001
endif
GoSub LoadIntgLCD ' exécuter température de chargement octets de texte qui a été converti en un entier
prochain indice
retour
DegCsign: ' créer des degrés C texte sur écran
intgval = % 11011111' character set qui seront envoyés au LCD au Code de caractère de « Degré »
GoSub LoadIntgLCD ' envoyer des caractères à l’écran LCD
intgval = % 01000011' character set à envoyer à écran LCD au Code de caractère « C » pour Centigrade
GoSub LoadIntgLCD ' envoyer des caractères à l’écran LCD
intgval = % 00100000' character set à envoyer à l’écran LCD pour "" Code de caractère pour un espace avant la valeur de farenheight
GoSub LoadIntgLCD ' envoyer des caractères à l’écran LCD
retour
DegFsign: ' créer des degrés F texte sur écran
intgval = % 11011111' character set qui seront envoyés au LCD au Code de caractère de « Degré »
GoSub LoadIntgLCD ' envoyer des caractères à l’écran LCD
intgval = % 01000110' character set à envoyer à écran LCD au Code de caractère « F » pour Farenheight
GoSub LoadIntgLCD ' envoyer des caractères à l’écran LCD
retour
intgval = % 00100000' character set à envoyer à l’écran LCD pour "" Code de caractère pour un espace après la valeur de farenheight pour effacer lorsque le signe utilisé moins
GoSub LoadIntgLCD ' envoyer des caractères à l’écran LCD
intgval = % 00100000' character set à envoyer à l’écran LCD pour "" Code de caractère pour un espace après la valeur de farenheight pour effacer quand intgval > 100 utilisé
GoSub LoadIntgLCD ' envoyer des caractères à l’écran LCD
DegFcalc: « valoriser Farenheight pour positive Farenheight lectures
° c = ° c * 9 / 5 + 32' calculer la valeur de Farenheight de valeur Centigrade
GoSub IntgOnly "commencer le processus pour extraire de 10, de 100 et de 1 entiers de Farenheight valeur
débogage
retour
DegFcalcPos: « valoriser Farenheight pour des lectures de Farenheight positifs lorsque celcius est négatif
° c = ° c * 9/5' calculer la valeur de Farenheight de valeur Centigrade
° c = 32-degc ' calculer la valeur de Farenheight de valeur Centigrade
GoSub IntgOnly "commencer le processus pour extraire de 10, de 100 et de 1 entiers de Farenheight valeur
retour
DegFcalcNeg: « valoriser Farenheight pour négatif Farenheight lectures
° c = ° c * 9/5-32' calculer Farenheight valeur de valeur Centigrade
GoSub IntgOnly "commencer le processus pour extraire de 10, de 100 et de 1 entiers de Farenheight valeur
retour
MinusSign :
intgval = "-" ' définir le caractère à envoyer à écran LCD au « signe » Code de caractère
GoSub LoadIntgLCD
retour
BelowZeroC: « recherchez ci-dessous zéro deg C
Sélectionnez la case degc
case 0 à 125' ignorer ce cas - la température dans la plage normale de positive
cas 129 à 183' le cas où le celsius est dans la gamme moins envoyer un caractère de signe moins pour LCD
° c = ° c-128 ' correct pour la DSDS18B20 affectant MSB « 1 » ou 128 pour moins les conditions de température
degflag = 1' ensemble drapeau indiquant les conditions de température négatif
GoSub MinusSign ' le cas où le celsius est dans la gamme moins envoyer un caractère de signe moins pour LCD
EndSelect
retour
BelowZeroF :
Sélectionnez la case degc
0 cas de 124' ignorer ce cas - la température dans la plage normale de positive
GoSub DegFcalc
-affaire 129 à 146' le cas où seul celsius est de l’ordre négatif
° c = ° c-128 ' correct pour la DSDS18B20 affectant MSB « 1 » ou 128 pour moins température conditio
GoSub DegFcalcPos
cas 147 à 183' lorsque farenheight est dans la gamme moins envoyer un caractère de signe moins pour LCD
° c = ° c-128 ' correct pour la DSDS18B20 affectant MSB « 1 » ou 128 pour moins les conditions de température
GoSub MinusSign ' lorsque farenheight est dans la gamme moins envoyer un caractère de signe moins pour LCD
GoSub DegFcalcNeg
EndSelect
retour
CheckFlag :
Si degflag = 1 puis laissez ° c = ° c + 128' Reset la correction pour la DSDS18B20 affectant MSB « 1 » ou 128 pour moins les conditions de température
endif
retour