Cours:StartMindstorm : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m ({{Bleu|Le programme :}})
({{Bleu|Nouveau projet}})
Ligne 28 : Ligne 28 :
 
**Suivant, enfin NEXT plutôt !
 
**Suivant, enfin NEXT plutôt !
 
*2ème fenêtre, il faut vérifier :
 
*2ème fenêtre, il faut vérifier :
**API path : /opt/electronique/lego/EV3-API/API
+
**API path : /opt/lego/EV3-API/API
 
**Upload path : SD-Card
 
**Upload path : SD-Card
 
**Source : src
 
**Source : src
Ligne 37 : Ligne 37 :
 
**NEXT
 
**NEXT
 
*4ème fenêtre, il suffit normalement de vérifier :
 
*4ème fenêtre, il suffit normalement de vérifier :
**Toolchain name : Sourcery CodeBench Lite for ARM ...
+
**Toolchain name : Linaro ARM Linux GNU EABI (arm-linux-gnueabi-gcc)
**Toolchain path : /opt/electronique/lego/arm-2009q1/bin
+
**Toolchain path :  
 
**EV3 Uploader  : /usr/lib/ev3duder
 
**EV3 Uploader  : /usr/lib/ev3duder
 
**FINISH
 
**FINISH

Version du 30 août 2018 à 15:23

Précision sur quelques logos dans les énoncés :

Todo.jpg Action à effectuer et comprendre sans besoin de compétences particulières
Question.jpg ' Problématique que vous devez résoudre


Nous allons programmer la brique levo mindstorm EV3 à l'aide de l'ensemble logiciel c4ev3.

Vous pourrez bien entendu utiliser votre ordinateur Windows/Linux/Mac à condition d'avoir mené à bien l'ensemble des configurations nécessaires.

Nous utiliserons l'IDE éclipse pour l'édition, la compilation, le téléchargement ainsi que l'exécution des programmes.


Prise en main d'éclipse

Eclipse fonctionne à l'aide de projet : chaque fois que vous souhaitez écrire un nouveau programme, il convient d'en faire un nouveau.

Nouveau projet

Voici les étapes nécessaires à la bonne configuration d'un projet pour programmer la brique EV3 :

  • File>New>C Project ... ça doit vouloir dire faire un nouveau projet en langage C !
  • 1ère fenêtre :
    • choisir un nom pour le projet : tp1
    • projet de type : Executable/Hello World EV3 Project
    • Toolchains  : Cross ARM/EV3 GCC (votre ordinateur est une architecture x86_64, la brique EV3 comme la plupart des smartphones une architecture ARM => ce n'est pas la même chose on fait de la cross-compilation)
    • Suivant, enfin NEXT plutôt !
  • 2ème fenêtre, il faut vérifier :
    • API path : /opt/lego/EV3-API/API
    • Upload path : SD-Card
    • Source : src
    • NEXT
  • 3ème fenêtre :
    • on décoche debug
    • on garde Release
    • NEXT
  • 4ème fenêtre, il suffit normalement de vérifier :
    • Toolchain name : Linaro ARM Linux GNU EABI (arm-linux-gnueabi-gcc)
    • Toolchain path :
    • EV3 Uploader  : /usr/lib/ev3duder
    • FINISH

Compilation/Exécution

Le code source du programme "minimum" devrait s'afficher à l'écran. Sinon, on le retrouve à gauche dans l'arborescence du projet dans le projet que l'on vient de créer, dans le dossier "src", par exemple "tp1.c" :

#include <ev3.h>

int main(void)
{
	//TODO Place here your variables

	InitEV3();

	//TODO Place here your code
	LcdPrintf(1, "Hello World!\n");
	Wait(SEC_2);

	FreeEV3();
	return 0;
}

Avant d'expliquer plus en détail se programme, nous allons :

  • le compiler :
    • dans la barre d'icône au dessus de l'écran
    • l'icône en forme de marteau : build
    • on vérifie en bas de l'écran dans l'onglet "console" que tout s'est bien déroulé.
    • on vérifie qu'il n'y a pas d'astérisque (*), à côté du nom du fichier, par ex tp1.c*
    • si c'est le cas, il faut sauvegarder le fichier et recommencer
  • Un robot connecté en USB et démarré ça pourrait servir maintenant !
  • Exécution du programme
    • barre de menu
    • EV3>Upload and run ... je vous laisse traduire !
    • On regarde l'écran, on doit voir le message "Hello World!"

Le programme :

Quelques explications sur le programme maintenant :

  • On doit nécessairement écrire une fonction "main"
  • elle est exécutée au lancement du programme
  • int main(void)  :
    • elle retourne une valeur de type entier
    • la valeur est récupérée à la fermeture du programme
    • si la valeur est 0, tout s'est bien passé
    • sinon la valeur représente un code d'erreur
  • int main(void)  :
    • on ne passe pas de paramètre à la fonction main
    • on peut aussi écrire : int main()
  • { : la déclaration de la fonction main commence juste après l'accolade ouvrante
  • }  : la déclaration de la fonction main se termine juste avant l'accolade fermante
  • return 0;
    • on quitte la fonction (main ici) en envoyant la valeur 0 : tout s'est bien passé.
    • si on ajoute des lignes après "return", elles ne seront pas exécutées
  • Le reste du programme correspond à l'exécution de fonctions :
    • il y a toujours des parenthèses après le nom d'une fonction
    • il peut y avoir des valeurs entre les parenthèses : ce sont des paramètres
    • InitEV3() : fonction d'initialisation des moteurs/capteurs ...
    • FreeEV3() : pour remettre la brique lego dans un état "normal" à la fermeture

Etude de la fonction LcdPrintf

Les fonctions de la librairie c4ev3 sont détaillées et accessibles sur cette page.

Vous devrez par la suite la consulter régulièrement, il n'est pas question de retenir le nom ni l'usage des fonctions mais juste de savoir exploiter une documentation.

Par commodité, la fonction LcdPrintf est donnée ci-dessous :

Syntaxe LcdPrintf(couleur,texte)
Paramètres
couleur 0 pour texte en blanc sur fond noir, 1 pour texte noir sur fond blanc
texte chaîne de caractère


Question.jpg Modifier votre programme pour afficher le message suivant :

Informatique S1
TP1 - prise en main
utilisation de la fonction LcdPrintf
Bluebg.png
Aidesmall.png
À propos de cette image

retour à la ligne


  • il est possible d'appeler plusieurs fois la fonction LcdPrintf :
LcdPrintf(1, "debut");
LcdPrintf(1, "suite");
  • \n est un caractère spécial non affichable qui permet de passer à la ligne suivante

Ce n'est ici qu'un aperçu de cette fonction LcdPrintf, nous y reviendrons progressivement.

Police de caractère

Un petit bonus : on peut changer la tailler de la police à l'aide de la fonction LcdSelectFont :

Syntaxe LcdSelectFont(taille)
Paramètres
taille nombre entier entre 0 et 3

Voici les tailles obtenues en fonction de la valeur du paramètre :

Valeur du paramètre Largeur police Hauteur police symbolique
0 9 px 8 px FONTTYPE_NORMAL
1 8 px 8 px FONTTYPE_SMALL
2 16 px 16 px FONTTYPE_LARGE
3 7 px 5 px FONTTYPE_TINY

Todo.jpg Observer les différentes tailles de police possible.

Question.jpg Modifier votre programme pour que chaque ligne du texte affiché soit d'une taille différente :

Informatique S1
TP1 - prise en main
utilisation de la fonction LcdPrintf

moteur ... action !