Étape 7: Code SPIN
FILER CodeCON
Flavor1 = 0
Flavor2 = 1
Flavor3 = 2
Shot2 = 3
Shot4 = 4
Start = 5
Annuler = 6
Servo1 = 8
Servo2 = 21
Servo3 = 18
Servo4 = 11
MotorPos = 24
MotorNeg = 25
Limiteur = 16
LCD_Pin = 15
LCD_Baud = 19_200
LCD_Lines = 2
_clkmode = xtal1 + pll16x
_xinfreq = 5_000_000
OBJ
servo: « Servo32v5.spin »
PST: « Terminal série parallaxe »
LCD: « debug_lcd »
VAR
octet saveur
octet Shot
PUB principale
servo.Start
servo.Set (Servo1, 1350)
servo.Set (Servo2, 570)
servo.Set (Servo3, 980)
servo.Set (Servo4, 1000)
LCD.init (LCD_Pin, LCD_Baud, LCD_Lines)
LCD.cursor(0)
LCD.cls
LCD.gotoxy(0,0)
LCD.cls
LCD.str (string ("expresso Magic", 13 « Par Roy Eid », 13))
waitcnt (clkfreq * 2 + cnt)
dira [MotorPos] ~ ~
dira [MotorNeg] ~ ~
Saveur: = 0
Coup: = 0
flava
PUB shat
Répétez
Si ina [Shot2] == 1
LCD.gotoxy (9, 1)
LCD.str(string("2"))
Coup: = 1
commandant
Si ina [Shot4] == 1
LCD.gotoxy (9, 1)
LCD.str(string("4"))
Coup: = 2
commandant
Si ina [Annuler] == 1
LCD.cls
LCD.str (chaîne (« Annulé par », 13, « utilisateur »))
waitcnt (clkfreq + cnt)
flava
PUB flava
LCD.cls
LCD.str (chaîne ("saveur:", 13, « coups:"))
Répétez
Si ina [Flavor1] == 1
LCD.gotoxy (9, 0)
LCD.str(string("1"))
Saveur: = 1
SHAT
Si ina [Flavor2] == 1
LCD.gotoxy (9, 0)
LCD.str(string("2"))
Saveur: = 2
SHAT
Si ina [Flavor3] == 1
LCD.gotoxy (9, 0)
LCD.str(string("3"))
Saveur: = 3
SHAT
Commandant de la PUB
Répétez
Si ina [Démarrer] == 1
LCD.cls
LCD.str(string("Dispensing..."))
Pipeter
Si ina [Annuler] == 1
LCD.cls
LCD.str (chaîne (« Annulé par », 13, « utilisateur »))
waitcnt (clkfreq + cnt)
flava
Distribuer de la PUB
servo.Set (Servo4, 1600)
waitcnt (clkfreq * 1 + cnt)
affaire de goût
1 :
servo.Set (Servo1, 1800)
Si coup == 1
waitcnt (clkfreq * 2 + cnt)
servo.Set (Servo1, 1350)
waitcnt (clkfreq * 1 + cnt)
Compact
Si coup == 2
waitcnt (clkfreq * 4 + cnt)
servo.Set (Servo1, 1350)
waitcnt (clkfreq * 1 + cnt)
Compact
2 :
servo.Set (Servo2, 1000)
Si coup == 1
waitcnt (clkfreq * 2 + cnt)
servo.Set (Servo2, 570)
waitcnt (clkfreq * 1 + cnt)
Compact
Si coup == 2
waitcnt (clkfreq * 4 + cnt)
servo.Set (Servo2, 570)
waitcnt (clkfreq * 1 + cnt)
Compact
3 :
servo.Set (Servo3, 550)
Si coup == 1
waitcnt (clkfreq * 2 + cnt)
servo.Set (Servo3, 980)
waitcnt (clkfreq * 1 + cnt)
Compact
Si coup == 2
waitcnt (clkfreq * 4 + cnt)
servo.Set (Servo3, 980)
waitcnt (clkfreq * 1 + cnt)
Compact
PUB compact
servo.Set (Servo4, 1000)
waitcnt (clkfreq * 2 + cnt)
Répétez 2
Si ina [limiteur] == 0
vers le haut
Si ina [limiteur] == 1
vers le bas
vers le haut
LCD.cls
LCD.str(string("done!"))
waitcnt (clkfreq * 2 + cnt)
flava
PUB haut
Répétez
LCD.gotoxy(0,0)
LCD.str(string("Compacting..."))
outa [MotorNeg]: = 1
outa [MotorPos]: = 0
Si ina [limiteur] == 1
outa [MotorNeg]: = 0
outa [MotorPos]: = 0
cesser de fumer
PUB bas
LCD.cls
LCD.str(string("Compacting..."))
Répétez 100
outa [MotorPos]: = 1
outa [MotorNeg]: = 0
waitcnt (clkfreq/500 + cnt)
outa [MotorNeg]: = 0
outa [MotorPos]: = 0
waitcnt (clkfreq/500 + cnt)