#picaxe 20x2
#no_data
symbol io_adr = $40 'i2c address of 8574 all address line low
'symbol io_adr = $70 'i2c address of 8574ap all address line low
symbol io_adr2 = $71 'i2c addresse du 1er pcf8574ap en lecture
symbol io_adr3 = $73 'i2c addresse du 2?me pcf8574ap en lecture
symbol io_adr4 = $75 'i2c addresse du 3?me pcf8574ap en lecture
symbol io_adr5 = $77 'i2c addresse du 4?me pcf8574ap en lecture
symbol io_adr6 = $79 'i2c addresse du 5?me pcf8574ap en lecture
symbol io_adr7 = $7b 'i2c addresse du 6?me pcf8574ap en lecture
symbol io_adr8 = $7d 'i2c addresse du 7?me pcf8574ap en lecture
symbol io_adr9 = $7f 'i2c addresse du 8?me pcf8574ap en lecture
hi2csetup i2cmaster, io_adr,i2cfast,i2cbyte 'eeprom 24lc16b
'hi2csetup i2cmaster, io_adr, i2cslow, i2cbyte
hi2cout [io_adr],(%11110000) 'essai''all rows low, all columns high if you want to use interrupt
hi2cout [io_adr2],(%00000000)
hi2cout [io_adr3],(%00000000)
hi2cout [io_adr4],(%00000000)
hi2cout [io_adr5],(%00000000)
hi2cout [io_adr6],(%00000000)
symbol flag=bit0
symbol cpt=b1
symbol poidsfaible =b2
symbol touche=b3
symbol octetlu=b4
symbol temp = b9
symbol nombre=b5
symbol classe=b6
symbol mini=b7
symbol maxi=b8
symbol lcd=b.0
serout lcd,n2400,(254,1)
sertxd(254,1,13,10)
pullup %00001000 ;pullup sur c.3
nombre=0
'serout lcd,n2400,(254,128,"classe: ")
sertxd(254,128,"classe: ",13,10)
mini=10:maxi=16
gosub lectouche
lookup touche,("0123456789abcdef"),classe
'serout lcd,n2400,(254,128,"classe: ",classe)
sertxd (250,128,"classe: ",classe,13,10)
mini=0:maxi=9
'serout lcd,n2400,(254,128,"dizaines: ",classe)
sertxd (254,128,"dizaines: ",classe,13,10)
gosub lectouche
nombre=touche*10
'serout lcd,n2400,(254,128,"unites: ",classe,#nombre," ")
sertxd(254,128,"unites: ",classe,#nombre," ",13,10)
gosub lectouche
nombre=nombre+touche
'serout lcd,n2400,(254,128,"adresse: ",classe,#nombre," ")
sertxd (254,128,"adresse: ",classe,#nombre," ",13,10)
pause 100
if classe="a" and nombre=01 then
hi2cout [io_adr2],(1) 'aiguillage n?1
pause 500
elseif classe="a" and nombre=02 then
hi2cout [io_adr2],(2) 'aiguillage n?2
pause 500
elseif classe="a" and nombre=03 then
hi2cout [io_adr2],(4) 'aiguillage n?3
pause 500
elseif classe="a" and nombre=04 then
hi2cout [io_adr2],(8) 'aiguillage n?4
pause 500
elseif classe="a" and nombre=05 then
hi2cout [io_adr2],(16) 'aiguillage n?5
pause 500
elseif classe="a" and nombre=06 then
hi2cout [io_adr2],(32) 'aiguillage n?6
pause 500
elseif classe="a" and nombre=07 then
hi2cout [io_adr2],(64) 'aiguillage n?7
pause 500
elseif classe="a" and nombre=08 then
hi2cout [io_adr2],(128) 'aiguillage n?8
pause 500
elseif classe="a" and nombre=09 then
hi2cout [io_adr3],(1) 'aiguillage n?9
pause 500
elseif classe="a" and nombre=10 then
hi2cout [io_adr3],(2) 'aiguillage n?10
pause 500
elseif classe="a" and nombre=11 then
hi2cout [io_adr3],(4) 'aiguillage n?11
pause 500
elseif classe="a" and nombre=12 then
hi2cout [io_adr3],(8) 'aiguillage n?12
pause 500
elseif classe="a" and nombre=13 then
hi2cout [io_adr3],(16) 'aiguillage n?13
pause 500
elseif classe="a" and nombre=14 then
hi2cout [io_adr3],(32) 'aiguillage n?14
pause 500
elseif classe="a" and nombre=15 then
hi2cout [io_adr3],(64) 'aiguillage n?15
pause 500
elseif classe="a" and nombre=16 then
hi2cout [io_adr3],(128) 'aiguillage n?16
pause 500
elseif classe="a" and nombre=17 then
hi2cout [io_adr4],(1) 'aiguillage n?17
pause 500
elseif classe="a" and nombre=18 then
hi2cout [io_adr4],(2) 'aiguillage n?18
pause 500
elseif classe="a" and nombre=19 then
hi2cout [io_adr4],(4) 'aiguillage n?19
pause 500
elseif classe="a" and nombre=20 then
hi2cout [io_adr4],(8) 'aiguillage n?20
pause 500
elseif classe="a" and nombre=21 then
hi2cout [io_adr4],(16) 'aiguillage n?21
pause 500
elseif classe="a" and nombre=22 then
hi2cout [io_adr4],(32) 'aiguillage n?22
pause 500
elseif classe="a" and nombre=23 then
hi2cout [io_adr4],(64) 'aiguillage n?23
pause 500
elseif classe="a" and nombre=24 then
hi2cout [io_adr4],(128) 'aiguillage n?24
pause 500
elseif classe="a" and nombre=25 then
hi2cout [io_adr5],(1) 'aiguillage n?25
pause 500
elseif classe="a" and nombre=26 then
hi2cout [io_adr5],(2) 'aiguillage n?26
pause 500
elseif classe="a" and nombre=27 then
hi2cout [io_adr5],(4) 'aiguillage n?27
pause 500
elseif classe="a" and nombre=28 then
hi2cout [io_adr5],(8) 'aiguillage n?28
pause 500
elseif classe="a" and nombre=29 then
hi2cout [io_adr5],(16) 'aiguillage n?29
pause 500
elseif classe="a" and nombre=30 then
hi2cout [io_adr5],(32) 'aiguillage n?30
pause 500
elseif classe="a" and nombre=31 then
hi2cout [io_adr5],(64) 'aiguillage n?31
pause 500
elseif classe="a" and nombre=32 then
hi2cout [io_adr5],(128) 'aiguillage n?32
pause 500
elseif classe="a" and nombre=32 then
hi2cout [io_adr5],(128) 'aiguillage n?32
pause 500
elseif classe="e" and nombre=01 then
hi2cout [io_adr6],(1) 'zone ?clairage 1
pause 500
elseif classe="e" and nombre=02 then
hi2cout [io_adr6],(2) 'zone ?clairage 2
pause 500
elseif classe="b" and nombre=01 then
hi2cout [io_adr6],(4) 'd?part voie 1, gare 1
pause 500
elseif classe="b" and nombre=02 then
hi2cout [io_adr6],(8) 'd?part voie 2, gare 1
pause 500
elseif classe="b" and nombre=03 then
hi2cout [io_adr6],(16) 'd?part voie 3, gare 1
pause 500
elseif classe="b" and nombre=04 then
hi2cout [io_adr6],(32) 'd?part voie 1, gare 2
pause 500
elseif classe="b" and nombre=05 then
hi2cout [io_adr6],(64) 'd?part voie 2, gare 2
pause 500
elseif classe="b" and nombre=06 then
hi2cout [io_adr6],(128) 'd?part voie 3, gare 2
pause 500
end if
reset
lectouche:
do
poidsfaible=%1 ;init ? xxxx0001
for cpt=1 to 4 ;scann sur bits poids faible
temp=not poidsfaible |%11110000 ;ex: not poids =xxxx1110 et ?crasement poid fort =11111110
hi2cout [io_adr],(temp) ;envoi octet
hi2cin [io_adr],(octetlu) ;test sur retour octet
if octetlu <240 and flag=0 then ;pins < 11110000 (240) c?d une touche appuy?e, premier passage
lookdown octetlu,(238,222,190,126, 237,221,189,125, 235,219,187,123, 231,215,183,119),touche
pause 20
flag=1
'pause 20
elseif octetlu > 240 and flag=1 then ;rel?chement touche
pause 5
flag=0
'pause 20
if touche <=maxi and touche>=mini then retour
endif
poidsfaible=poidsfaible*2 ;d?calage du 0 ? gauche (futur 1...)
next
loop
retour:
return