
Dans le dernier article sur la Découverte du .NET Micro Framework, nous avons vu comment afficher une image à l’écran. Maintenant nous allons voir comment utiliser les boutons présents sur la carte électronique pour interagir avec le programme, et par exemple modifier l’image qui est affichée à l’écran.
Il va nous falloir référencer deux nouvelles bibliothèques, DeviceSolutions.SPOT.Hardware.TahoeII et Microsoft.SPOT.Hardware :

Créons ensuite une méthode qui va nous afficher à l’écran, une image que l’on passera en paramètre :
1: /// <summary>
2: /// Dessiner l'image passée en paramètre
3: /// </summary>
4: /// <param name="img">Image à dessiner</param>
5: static void DrawImage(Bitmap img)
6: {
7: // Définition d'une image de la taille de l'écran
8: Bitmap screen = new Bitmap(SystemMetrics.ScreenWidth, SystemMetrics.ScreenHeight);
9:
10: // On dessine une image dans le buffer
11: screen.DrawImage(0, 0, img, 0, 0, SystemMetrics.ScreenWidth, SystemMetrics.ScreenHeight);
12: // Envoyer l'image à l'écran
13: screen.Flush();
14: }
Je créé ensuite des objets InterruptPort qui me permettrons de capter les clics sur les boutons de ma carte. C’est dans l’initialisation de ces objets que je vais spécifier quel bouton je vais surveiller. Sur ma carte TahoeII, SW6 correspond au bouton de gauche et SW8 au bouton de droite. Lorsque je clic sur un des boutons, l’événement OnInterrupt est déclenché.
1: public static void Main()
2: {
3: // TahoeII.Pins.SW6 => Bouton de gauche
4: InterruptPort left = new InterruptPort(TahoeII.Pins.SW6, false, Port.ResistorMode.PullUp, Port.InterruptMode.InterruptEdgeBoth);
5: // Abonnement à l'événement OnInterrupt pour savoir lorsque le bouton est appuyé
6: left.OnInterrupt += new NativeEventHandler(left_OnInterrupt);
7:
8: // TahoeII.Pins.SW8 => Bouton de droite
9: InterruptPort right = new InterruptPort(TahoeII.Pins.SW8, false, Port.ResistorMode.PullUp, Port.InterruptMode.InterruptEdgeBoth);
10: // Abonnement à l'événement OnInterrupt pour savoir lorsque le bouton est appuyé
11: right.OnInterrupt += new NativeEventHandler(right_OnInterrupt);
12:
13: // Pause infinie
14: Thread.Sleep(-1);
15: }
Il ne faut pas oublier la ligne 14 ci-dessus sinon le programme se terminera.
Voici les méthodes d’abonnement à mes événements :
1: static void left_OnInterrupt(uint data1, uint data2, TimeSpan time)
2: {
3: // Récupération des images stockées dans les resources du projet
4: Bitmap img = Resources.GetBitmap(Resources.BitmapResources.msdnL);
5:
6: // Dessin de l'image
7: DrawImage(img);
8: }
9:
10: static void right_OnInterrupt(uint data1, uint data2, TimeSpan time)
11: {
12: // Récupération des images stockées dans les resources du projet
13: Bitmap img = Resources.GetBitmap(Resources.BitmapResources.msdnE);
14:
15: // Dessin de l'image
16: DrawImage(img);
17: }
Lorsque je clic sur un bouton, je déclenche l’événement OnInterrupt qui appelle la méthode correspondante. Cette méthode appellera DrawImage qui affichera l’image sur l’écran.
Vous trouverez pour les prochains article, une vidéo qui montrera le résultat (si je n’oublie pas mon appareil photo, qui fait également caméra vidéo).
N’oubliez pas de visiter le blog de Pierre Cauchois et de Julien Corioland. Téléchargez la solution complète : SolutionMF2.zip (204,70 kb)
[Mise à jour] Ajout de la vidéo :
[silverlight:width=640,height=480,xapPlayer=MediaPlayerTemplate.xap,mediafile=.NETMicroFx.wmv]