Exercice 04-2a Ecrire un programme de jeu de lumière qui aurrait les particularités suivantes : Plusieurs effets seraient disponibles, comme par exemple les effets que nous avons déjà réaliser dans nos exercices. Pour rappel, Le chenillard à une led, K2000 et "la vague". Si vous le désirez, vous pouvez en ajouter à volonté. Chaque effet lumineux serait repris dans une sous-routine. A chaque reset du STAMP2, un effet différent serait à chaque fois lancé et son choix se ferait de manière aléatoire. Generation d'un nombre aleatoire dans le stamp L'utilisation de l'instruction RANDOM dans le stamp est un peu particuliere En fait, apres un reset, cette instruction genere toujours la meme suite de nombres pseudo-aleatoires, et donc, apres un reset, il est impossible de generer un nombre aleatoire different à chaque fois. La solution la plus simple qui se presente, est de generer un nombre different de nombres aleatoire, et comme la suite de nombre generee est pseudo-aleatoire le resultat sera une suite qui donnera l'impression d'etre aleatoire. Pour cela, nous utiliserons une variable (j) qui sera recuperee de l'eeprom, incrementee, puis restockee dans l'eeprom et ceci à chaque reset. Comme nous voulons une variable comprise entre 0 et 3 pour le lancement de chaque routine de jeux de lumière, une variable Byte pour j sera suffisante, puisque une suite 256 nombres pseudo-aleatoires compris entre 0 et 3 sera generee, ce qui est normalement suffisant pour eviter un sentiment de repetition de la suite aleatoire. 'Structure du programme ' 'BEGIN ' 'DECLARE i AS byte ' 'LET i = (nombre aléatoire compris entre 0 et 3) ' 'IF I = 0 ' Test si i vaut 0 ' GOSUB jeux0 ' et branche sur le premier jeu 'ELSE ' IF I = 1 ' Test si i vaut 1 ' GOSUB jeux1 ' et branche sur le deuxième jeu ' ELSE ' IF I = 2 ' GOSUB jeux2 ' Test si i vaut 2 ' ELSE ' et branche sur le troisième jeu ' GOSUB jeux3 ' sinon branche sur le quatrième jeu ' ENDIF ' ENDIF 'ENDIF 'END ' ' 'SUB jeux0 ' 'ENDSUB ' ' 'SUB jeux1 ' 'ENDSUB ' ' 'SUB jeux2 ' 'ENDSUB ' ' 'SUB jeux3 ' 'ENDSUB ' ' ' ********************************************************** ' Programme en Basic Stamp 2 ' ' Ici, nous allons utiliser la comande BRANCH ' Comme cette commande est l'equivalent d'un "GOTO", il faudra ' recreer l'equivalent du GOSUB à la fin de chacune des souroutine ' pour respecter la structure du programme. Bien que ici, dans l'absolu, ' cette commande est inutile puisque chaque sousroutine est en fait ' constitué d'une boucle infinie !! i Var Word 'nombre aleatoire genere j Var Byte 'comptage jusque 255 k Var Byte 'variable de comptage l Var Byte 'variable de travail pour les chenillards READ 0,j 'Lecture de la derniere valeur de j FOR k = 0 TO j 'comptage jusque j RANDOM i 'Generation du nombre aleatoire NEXT j=j+1 'Incrementation de j WRITE 0,J 'et mise en memoire de sa valeur i=i/16384 'pour un nombre aleatoire compris entre 0 et 3 debug ?i 'Impression des resultats debug ?j BRANCH i,[jeux0,jeux1,jeux2,jeux3] ' Branchement vers le jeu de lumière fin: END '***************************************** '* Premier jeu : Chenillard à une LED >> * '***************************************** jeux0: FOR l=0 TO 7 ' debut de la boucle de comptage outl = 1 << l ' allumage de la led PAUSE 100 ' pause pour regler la vitesse NEXT ' fin de la boucle de comptage GOTO jeux0 ' bouclage vers la boucle infinie GOTO fin ' retour au programme principal '****************************************** '* Deuxième jeu : Chenillard à une LED << * '****************************************** jeux1: FOR l=7 TO 0 ' debut de la boucle de comptage outl = 1 << l ' allumage de la led PAUSE 100 ' pause pour regler la vitesse NEXT ' fin de la boucle de comptage GOTO jeux1 ' bouclage vers la boucle infinie GOTO fin ' retour au programme principal '*********************************** '* Troisième jeu : K2000 à une LED * '*********************************** jeux2: FOR l=0 TO 6 ' comptage de 0 à 6 outl = 1 << l ' allumage de la led correspondante PAUSE 70 ' pause pour ralentir l'affichage NEXT ' bouclage de l'aller FOR l=7 TO 1 ' decomptage de 7 à 1 outl = 1 << l ' allumage de la led correspondante PAUSE 70 ' pause pour ralentir l'affichage NEXT ' bouclage du retour GOTO jeux2 ' fin de la boucle infinie GOTO fin ' retour au programme principal '**************************** '* Quatrième jeu : La Vague * '**************************** jeux3: pas VAR byte 'variable de comptage pour leds intensite VAR byte 'puissance d'allumage de la led n VAR nib 'comptage pour chaque led nbre CON 24 'Valeur comprise entre 2 et 128 vitesse CON 1 'nombre de repetions a CON nbre*2-3 b CON a+1 d CON 256/nbre debut: FOR pas=0 to a FOR l=0 to vitesse FOR n=0 to 7 intensite=pas+n IF intensite