Nous avons déja utilisé une dizaine de fonctions du langage SPIN, sans vouloir faire un liste détaillée des fonctions (il y a pour cela le manuel du Propeller , téléchargeable depuis Parallax.com) voyons de plus prés quelques fonctions qu'on utilise souvent.
elle repéte ce qui est écrit ensuite (il faut que les lignes a répéter soient décalées a droite , mais elle a de nombreuses variantes:
si on écrit REPEAT 10 la répétition se fera 10 fois
si on écrit REPEAT NFOIS la répétition dépendra de la valeur qui sera sztockée dans Nfois
si on écrit REPEAT index from 2 to 7 on répétera 6 fois
si on écrit REPEAT index from 0 to 8 step 2 la répétion se fera en fait 5 fois et index variera de 2 a chaque fois
si on écrit REPEAT WHILE X<10 on répétera tant que x<10
si on écrit REPEAT UNTIL X>9 on répétera jusqua ce que X soit > 9
CASE
permet de choisir d'exécuter tel ou tel méthode en fonction de la valeur d'une variable, par exemple si on reçoit par IR un code de commande
CASE code
1:avancer
2:reculer
....
CLKFREQ
clkfreq n'est pas une fonction c'est une variable qui renferme la fréquence actuelle de l'horloge du Propeller
son intéret essentiel est son utilisation pour donner des délais de durée d'une attente (par Waitcnt) qui ne dépenderont pas de changements éventuels de la vitesse de cette horloge
une duée d'attente égale a clkfreq "ticks" de l'horloge vaut toujours une seconde
WAITCNT
crée un délai par exemple pour laisser une patte sur ON , ou OFF pendant un certain temps
utilise un compteur interne du Propeller (cnt) pour compter les" ticks"
waitcnt(800_000 +cnt) : attend 800_000 ticks d'horloge , mais ce temps change si on change la vitesse d'horloge
waitcnt(clkfreq/50 + cnt) : on attendra toujours 20 millisecondes
IF...ELSEIF...OTHER
if condition1 : si la condition mentionnée est vraie on exécute la ligne suivante
elesif condition2 sinon on envisage la possibilité suivante
et on continue jusqu'a la ligne other : on exécute ce qui est écit ici si aucune des conditions précédentes n'est vraie (on peut ne rien mettre en face de "other:"
exemple :
if (obstacledroit =1)
tourner_a_gauche
elseif (obstaclegauche=1 tourner_a_droite
elseif (obstaclegauche=1) AND (obstacledroit =1)
reculer
other: ne_rien_faire (continuer a rouler en avant)
RESULT
une fonction renvoie toujours un résultat et ce résulat est dans la variable RESULT
mais on peut choisir un nomplus évocateur pour la valeur renvoyée en lui donnant un nom par exemple "resultat"
PUB mafonction: resultat
ici des calculs
résultat= bilan
RETURN
on a vu qu'une fonction renvoie toujours un résultat et ce résulat est dans la variable RESULT
on peut écrire en fin de fonction RETURN mais ça najoute rien: le Spin le fait automatiquement
par contre c'est utile si on prévoit de sortir éventuellement de la fonction avant sa derniére ligne si certains cas se oprésentent
exemple:
PUB diviser (dividende,diviseur)
if diviseur == 0
afficher _erreur_division_par_zero
return 0
return (dividende/diviseur)
AND
réunit deux conditions et ne renvoie vrai que si les deux sont vraies
if (température> 20) AND (chauffage=ON)
arreter_chauffage
OR
réunit deux conditions et renvoie vrai si au moins l'une des deux est vraie
if( obstacle_devant) OR (vide_devant)
faire_dei_tour
NOT
renvoie vrai si la condition est fausse
if NOT(nouveaucode)
attendre_un_nouveaucode
les fonctions de comparaison (souvent utilisées avec IF ):>, >,==,<>
on notera que la condition égal s'écrit == (l'attribution de valeur s'écrit varuiable:=valeur)
le <> veut dire différent de
#> supérieur a une limite
utile pour ne pas tomber en dessous drune limite lorsqu'un programme diminue progressivement une variable
impulsionservomoteur:= ancienneduree - offset #> 1450 'quand on freine progressivement un servomoteur en marche avant
#< inférieur a une limite
utile pour ne pas dépasser une limite lorsqu'un programme augmente progressivement une variable
impulsionservomoteur:= ancienneduree +offset #< 1650 'quand on accélére progressivement un servomoteur
les fonctions mathématiques courantes sur les nombres entiers
on peut utiliser : +, -, / , *
pour les nombre décimaux il y a des objets contenant les fonctions utiles