; SCL sur C.1
; SDA sur C.2
#picaxe 08M2 ;directive picaxe utilisé (pour erreur de commandes)
dirsC =%000111
setfreq M16 ;fréquence 16MHz
;****** Nominations constantes ********
symbol baud= N2400_16 ;vitesse liaison RS232
;******* noms variables bit sur b0 ***********
symbol rsbit=bit0 ;bit commande/data afficheur
symbol calibr=bit1 ;memo phase calibration
;***** noms variables bytes ****************
; b1,b2,b3,b4,b5 utilisés dans bintoascii
symbol posi =b6 ;position curseur
symbol car =b7 ;caractère à afficher
symbol dat =b8
symbol cpt2 =b9 ; comteur temporaire
symbol cpt3 =b10
;****** noms variables word *********
symbol varw =w13 ;variable tempotaire
symbol deb =w12 ;debut texte
symbol cpt =w11 ;compteur
symbol total =w10 ;consomation total depuis dernier reset
symbol today =w9 ;consomation journalière
symbol mini =w8 ;consomaion miminum depuis dernier reset
symbol maxi =w7 ;consomaion miminum depuis dernier reset
symbol nombre =w6 ;nombre aléatoire
;******* Nominations ports ***********
;symbol switch = pinC.5 ;valeur poussoir de validation
; Initialisation I2C 4 bits , etc ********
hi2csetup i2cmaster,%01001110, i2cslow_32, i2cbyte
; Initialisation LCD *********
for cpt=0 to 5
lookup cpt,($33,$32,$28,$c,$6,$01),car
gosub EnvoiByteCommInit
next
pause 100 ;temps init du LCD
; Affichage texte initial ***********************
car= 128 'curseur début ligne 1
gosub EnvoiByteComm
for cpt=0 to 19
lookup cpt,("Conso Total en LITRE"),car
GOSUB EnvoiByteData
next
car= 192 'curseur début ligne 2
gosub EnvoiByteComm
for cpt=0 to 19
lookup cpt,("Conso Quotidienne L"),car
GOSUB EnvoiByteData
next
car= 148 'curseur début ligne 3
gosub EnvoiByteComm
for cpt=0 to 19
lookup cpt,("Maximum Enregistre L"),car
GOSUB EnvoiByteData
next
car=212 'curseur début ligne 4
gosub EnvoiByteComm
for cpt=0 to 19
lookup cpt,("Minimum Enregistre L"),car
GOSUB EnvoiByteData
next
pause 6000
; Initialisation temporaire
total =000
today =000
maxi =000
mini =100 ; Nécessaire au démarrage sinon la valeur sera toujours 0
cpt3 =0
gosub AfficheCourant
gosub AfficheRecord
pause 6000
do
gosub aleatoire ; sous-routine temporaire pour simuler une consomation d'eau.
gosub record ; cette routine devra être appeler une fois par jour seulement
loop
; les sousroutines **********************
; donne une valeur aléatoire pour simuler une consomation d'eau journalière. Sera éventuellement remplacé par le "flow meter"
aleatoire:
today =0 ; compteur journalier remis à zéro.
random nombre ; fonction aléatoire mon cul oui ! :-(
for cpt2=1 to nombre
today =today+1 ;produit une consommation artificielle avec incrément de 1/10ème de litre.
total =total+1 ;donne la somme de la consomation
gosub AfficheCourant
; pause 100
if cpt2> 200 then ; arrêtes la consomation si celle-ci dépasse 20 litres/session
nombre= cpt3 ; pour redémarrer la fonction "random" plus loin.
cpt3=cpt3+1
pause 6000
exit
endif
next
pause 3000
return
;calcule les minimums et maxiums
record:
if mini > today then
mini= today
endif
if maxi < today then
maxi=today
endif
gosub AfficheRecord
pause 6000
return
; Affichage les valeurs Total et courantes
AfficheCourant:
car= 139 'curseur ligne 1, position 12
gosub EnvoiByteComm
if total> 999 then
bintoascii total,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(" ",b4,b3,b2,",",b1," L"),car ;on a besoin que de 4 chiffres
GOSUB EnvoiByteData
next
else if total> 99 then
bintoascii total,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(" ",b3,b2,",",b1," L"),car ;on a besoin que de 3 chiffres
GOSUB EnvoiByteData
next
else
bintoascii total,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(" ",b2,",",b1," L"),car ;on a besoin que de 2 chiffres
GOSUB EnvoiByteData
next
endif
car= 203 'curseur ligne 2, position 12
gosub EnvoiByteComm
if today> 99 then
bintoascii today,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(". ",b3,b2,",",b1," L"),car ;on a besoin que de 3 chiffres
GOSUB EnvoiByteData
next
else
bintoascii today,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(". ",b2,",",b1," L"),car ;on a besoin que de 2 chiffres
GOSUB EnvoiByteData
next
endif
return
AfficheRecord:
car= 159 'curseur ligne 3, position 12
gosub EnvoiByteComm
if maxi <> today then
bintoascii maxi,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(". ",b3,b2,",",b1," L"),car ;on enlève les symboles ">>"
GOSUB EnvoiByteData
next
else if maxi> 99 then
bintoascii maxi,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(">> ",b3,b2,",",b1," L"),car ;on a besoin que de 3 chiffres
GOSUB EnvoiByteData
next
else
bintoascii maxi,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(">> ",b2,",",b1," L"),car ;on a besoin que de 2 chiffres
GOSUB EnvoiByteData
next
endif
car= 223 'curseur ligne 4, position 12
gosub EnvoiByteComm
if mini <> today then
bintoascii mini,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(". ",b3,b2,",",b1," L"),car ;on enlève les symboles ">>"
GOSUB EnvoiByteData
next
else if mini> 99 then
bintoascii mini,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(">> ",b3,b2,",",b1," L"),car ;on a besoin que de 3 chiffres
GOSUB EnvoiByteData
next
else
bintoascii mini,b5,b4,b3,b2,b1
for cpt=0 to 8
lookup cpt,(">> ",b2,",",b1," L"),car ;on a besoin que de 2 chiffres
GOSUB EnvoiByteData
next
endif
return
; Sub envoi vers LCD via I2C *************
EnvoiByteCommInit:
pause 15
EnvoiByteComm:
rsbit=0
EnvoiByteData:
;1ére moitié
dat=car & $F0 | %1000 | rsbit ;%1000 pour l'éclairage
hi2cout (dat)
pause 1
dat=dat | %1100
hi2cout (dat) ;pulse sur E cad P2
pause 1
dat=dat | %1000 & %1011 ;fin pulse
hi2cout (dat)
pause 1
;2éme moitié
dat=car & $0F * 16 | %1000 | rsbit
hi2cout (dat)
pause 1
dat=dat | %1100
hi2cout (dat)
pause 1
dat=dat | %1000 & %1011
hi2cout (dat)
rsbit=1
return