Cours:StartMindstorm : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
({{Bleu|Compilation/Exécution}})
({{Bleu|Le programme :}})
Ligne 72 : Ligne 72 :
 
Quelques explications sur le programme maintenant :
 
Quelques explications sur le programme maintenant :
 
*On doit nécessairement écrire une fonction "main"
 
*On doit nécessairement écrire une fonction "main"
**elle est exécutée au lancement du programme
+
*elle est exécutée au lancement du programme
** {{Rouge|int}} main(void)  :
+
* {{Rouge|int}} main(void)  :
***elle retourne une valeur de type entier
+
**elle retourne une valeur de type entier
***la valeur est récupérée à la fermeture du programme
+
**la valeur est récupérée à la fermeture du programme
***si la valeur est {{Rouge|0}}, tout s'est bien passé
+
**si la valeur est {{Rouge|0}}, tout s'est bien passé
***sinon la valeur représente un code d'erreur
+
**sinon la valeur représente un code d'erreur
** int main({{Rouge|void}})  :
+
* int main({{Rouge|void}})  :
***on ne passe pas de paramètre à la fonction main
+
**on ne passe pas de paramètre à la fonction main
***on peut aussi écrire : int main()
+
**on peut aussi écrire : int main()
**{{Rouge|{}} : la déclaration de la fonction main commence juste après l'accolade ouvrante
+
*{{Rouge|{}} : la déclaration de la fonction main commence juste après l'accolade ouvrante
**{{Rouge|}}} : la déclaration de la fonction main se termine juste avant l'accolade fermante
+
*{{Rouge|}}} : la déclaration de la fonction main se termine juste avant l'accolade fermante
**{{Rouge|return }}0;
+
*{{Rouge|return }}0;
***on quitte la fonction (main ici) en envoyant la valeur {{Rouge|0}} : tout s'est bien passé.
+
**on quitte la fonction (main ici) en envoyant la valeur {{Rouge|0}} : tout s'est bien passé.
***si on ajoute des lignes après "return", elles ne seront pas exécutées
+
**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 {{Rouge|toujours}} des parenthèses après le nom d'une fonction
 +
**il {{Rouge|peut}} y avoir des valeurs entre les parenthèses : ce sont des {{Rouge|paramètres}}
 +
**{{Rouge|InitEV3()}} : fonction d'initialisation des moteurs/capteurs ...
 +
**{{Rouge|FreeEV3()}} : pour remettre la brique lego dans un état "normal" à la fermeture

Version du 4 juillet 2018 à 22:01

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/electronique/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 : Sourcery CodeBench Lite for ARM ...
    • Toolchain path : /opt/electronique/lego/arm-2009q1/bin
    • 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