Allumer et éteindre une lampe en créant un interrupteur dans l’interface de Scratch 2

Auteurs

URCA

Ce tutoriel s’intéresse à la commande d’une lampe de HOME I/O grâce à l’interface graphique de Scratch 2.

Objectif : Allumer et éteindre une lampe en créant un interrupteur dans l’interface de Scratch 2

Principe : un clic sur la lampe d’une pièce dans l’interface graphique Scratch allume ou éteins la lumière dans la pièce correspondante dans HOME I/O et affiche la lampe adéquate dans l’interface (colorée ou non)

Interface graphique Scratch 2 :

Programmation :

Dans un premier temps, il est nécessaire de définir quand notre programme sera actif. Pour cela la manière la plus simple est d’activer notre programme dès que l’on appuie sur le drapeau vert au-dessus de l’interface graphique.

On sélectionne donc le bloc « Quand – drapeau vert – est cliqué » dans la catégorie « Evénements ».

Ensuite il est nécessaire que notre programme soit répétable à l’infini tant que le drapeau est cliqué. Sans cette étape, notre programme s’exécutera qu’une seule fois.

On ajoute le bloc « répéter indéfiniment » (catégorie « Contrôle ») dans lequel on viendra intégrer les différentes instructions propres aux lampes.

Maintenant que notre programme est correctement structuré, nous pouvons programmer la fonction souhaitée.

A partir de maintenant, tous les blocs iront se positionner dans la boucle « répéter indéfiniment ».

Dans ce programme, l’action (allumer la lampe) devra s’effectuer sous condition de mouvement dans la pièce. Cette condition se traduit par un bloc « si…alors » dans la catégorie « Contrôle ». Ce bloc exécute les blocs qu’il contient sous réserve que la condition qui lui est affectée soit validée.

Si « condition(s) vraie(s) » alors « faire action(s) »

Dans notre cas, la condition est « un clic » et « sur le lutin ». Pour cela, on utilise le bloc « et » de la catégorie « Opérateur ». D’un côté on vérifie s’il y a un clic : bloc « souris pressée ? » et de l’autre, on va renseigner la position à laquelle doit être la souris.

La position de la souris est donnée grâce aux blocs « souris x » et « souris y » de la catégorie « Capteurs ». On va assimiler notre « lutin » à un rectangle auquel on va définir les côtés. On va vérifier que la souris remplisse ces deux conditions en plus qu’il y ait un clic :

  • Entre le bord gauche et le bord droit (bleu)
  • Entre le bord haut et le bord bas (vert)

Dans une structure composée de « et », il faut entrer les bornes maximales et minimales de nos coordonnés (Les coordonnées de la souris sont indiquées en bas à droite de l’interface graphique). Pour l’exemple de la pièce A, il faut entrer les conditions suivantes :

  • -170 < souris x
  • -130 > souris x
  • -20 < souris y
  • 40 > souris y

On obtient la condition suivante :

A présent, notre condition est paramétrée et il nous reste plus qu’à définir les actions à effectuer lorsque cette condition sera vraie :

Dans un premier temps nous allons allumer la lumière de la pièce H via le bloc « allumer lumière 1 pièce A ».

Ensuite il faut afficher l’ampoule colorée par-dessus l’ampoule grisée. Comme dans les précédents tutoriels, on utilise le bloc « aller à » de la catégorie « Mouvements » dans lequel on rentre les coordonnés. Pour la pièce A, mettre x = -151 et y = 8

Enfin, on peut afficher le l’ampoule : bloc « montrer » de la catégorie « Apparence » :

Maintenant que l’ampoule est allumée, il ne reste plus qu’à configurer le fait de l’éteindre. Pour éviter les erreurs de double-clic non intentionnel, il faut placer une temporisation, certes très courte, mais elle permettra d’éviter les erreurs. Une temporisation de 0,1 seconde est suffisante.

On utilise le bloc « attendre…secondes » de la catégorie « Contrôle » :

Pour éteindre la lampe, la meilleure solution est d’attendre un nouveau clic sur le lutin : bloc « attendre jusqu’à… » que l’on complète avec la même condition que pour l’allumage (clic et coordonnés) : pour éviter de recopier toute la condition, il est possible de la dupliquer : « clic droit » sur la condition et « dupliquer ».

Eteindre la lampe et cacher le lutin. Et sur le même principe que pour allumer la lampe, il faut ajouter une temporisation pour éviter les erreurs lors du clic.

Script complet pour une lampe :

Améliorations :

Bien que fonctionnel - et comme vu dans l’exemple précédent -, le fait d’utiliser le bloc conditionnel « si...alors… » n’est pas optimisé pour de la programmation à état.

Autre point, on peut remarquer que le programme ne fonctionne pas tout à fait comme on le souhaite. En effet, dès lors que l’on reste appuyé sur la lampe dans l’interface Scratch, la lumière clignote : ça n’est pas le but.

Par conséquent, nous allons améliorer le programme dans les étapes suivantes :

1 - Nous pouvons facilement remplacer le bloc conditionnel « si…alors… » par le bloc « attendre jusqu’à… » tout en gardant la même condition et ajoutant tous les autres blocs à la suite de celui-ci :

2 - Pour empêcher la lampe de clignoter, il suffit de vérifier que la souris n’est plus pressée avant d’allumer la lumière et d’afficher la lampe colorée :

Pour cela on utilise le bloc « attendre jusqu’à… » avec comme condition « non –souris pressée - ». Ce bloc permet non seulement de ne pas laisser la lampe clignoter mais aussi d’empêcher le phénomène de « rebond ».

Le phénomène de rebond apparait dans les systèmes électroniques (comme dans notre souris) et crée, entre autre, des double-clic involontaires. Dans la première version du programme nous avons tenté de résoudre ce problème avec les blocs de temporisation (attendre 0,1 secondes) mais cette version n’était pas satisfaisante.

L’ajout de ce bloc rend notre programme complet et permet de supprimer les blocs de temporisation alors inutiles. On obtient alors le programme suivant :

Maintenant que le programme est satisfaisant, il est possible de créer la même fonction pour chacune des lampes de la maison en adaptant évidemment les coordonnées du « lutin » à placer.