20
Dujardin stephane IUT de CERGY N LRSD 01 02 2021 CODEX DUJ Abstract .Ce document est destiné à l'auto-formation des étudiants de S2 Lors de leurs projets Sommaire Page 1 photos de vacances . Page 2 Présentation des projets , outils et logiciels Page 3 partie A Comparaison entre C et Python , philosophie générale les fichiers Page 4 partie A Codage en ligne : débuter en python Page 5 partie A Codage en Ligne 8 exercices Page 6 partie A Codage en Ligne 8 exercices pour progresser Page 7 partie A Codage en local l'IDE Thonny Page 8 partie A Codage en local Premier programme sur l'IDE Thonny Page 9 partie A Codage en local utilisation des capteurs de la carte Page 10 partie A Codage en local Les sous programmes ..trucs et astuces de python Page 11 partie A Codage en local travaux pratiques avec la carte micro:bit V2 .. Page 12 partie B exercices de codage en processing .. boutons et étapes Page 13 A&B A+B mise nen œuvre de la DEMO sinus Page 14 A&B A+ B DEMO PROJET COMPLET mise en Œuvre version 01/02 Page 15 A&B A sur Thonny exo pour envoyer des datas en DUJ5 Page 16 A&B B Processing : étude du programme PJS2duj5 ou programmer ? Page 17 A&B A Python présentation du main.py en version COMPLEXE. Page 18 A&B A Python ou programmer dans le main.py ? .. Page 19 Annexe théorie du protocole DUJ 5 Page 20 Annexe processing exemple tracé de courbe sur tableau V1[] Page 1

CODEX DUJ - debut

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CODEX DUJ - debut

Dujardin stephaneIUT de CERGY N LRSD

01 02 2021

CODEX DUJAbstract

.Ce document est destiné à l'auto-formation des étudiants de S2

Lors de leurs projets

SommairePage 1 photos de vacances . Page 2 Présentation des projets , outils et logiciels Page 3 partie A Comparaison entre C et Python , philosophie générale les fichiers Page 4 partie A Codage en ligne : débuter en python Page 5 partie A Codage en Ligne 8 exercices Page 6 partie A Codage en Ligne 8 exercices pour progresser Page 7 partie A Codage en local l'IDE ThonnyPage 8 partie A Codage en local Premier programme sur l'IDE ThonnyPage 9 partie A Codage en local utilisation des capteurs de la cartePage 10 partie A Codage en local Les sous programmes ..trucs et astuces de python Page 11 partie A Codage en local travaux pratiques avec la carte micro:bit V2 .. Page 12 partie B exercices de codage en processing .. boutons et étapes Page 13 A&B A+B mise nen œuvre de la DEMO sinus Page 14 A&B A+ B DEMO PROJET COMPLET mise en Œuvre version 01/02 Page 15 A&B A sur Thonny exo pour envoyer des datas en DUJ5Page 16 A&B B Processing : étude du programme PJS2duj5 ou programmer ? Page 17 A&B A Python présentation du main.py en version COMPLEXE.Page 18 A&B A Python ou programmer dans le main.py  ? ..Page 19 Annexe théorie du protocole DUJ 5Page 20 Annexe processing exemple tracé de courbe sur tableau V1[] Page 1

Page 2: CODEX DUJ - debut

PRESENTATION des « PROJETS technologiques »BUT : Réalisation d'un dispositif de mesure, autonome, connectable à un ordinateur.

Il sera constitué de 2 parties reliées ensemble par une liaison série au protocole DUJ5Partie A une Micro:BIT V2 programmée en Python sur Thonny ou Create.withcode.ukPartie B un ordinateur doté d'un programme écrit en processing

Lors des projets de S2 , vous serez amenés à vous auto-former sur la programmation en Python d'une carte Microbit ( en prêt) .. ce document vous servira de guide .. Un Répertoire type est à votre disposition : c'est  projetS2.zip .. : répertoire processing PJSTduj5 : programme affichant des données issues de la carte microbit : répertoire microbi : avec 4 programmes de démonstration .. dont un générateur de sinus

UTILISATION Du DOCUMENT : pour votre auto-formationEn premier : Auto-formation à Python .en ligne . page 3 4 et 5 6 Travaillez sur le site Create.withCode.uk

Faites les exercices proposés En second : Auto-formation à Python avec la carte microbit, et sur THONNY Travaillez sur Thonny avec les pages 7 et 8 9 En Troisième Processing .. le retour:).. sans carte

Essayez la notion de clic et celle d'étape En quatrième :faites fonctionner le programme processing grâce à la page 13 ..

Recevant les informations de la carte microbit programmée avec sinus.hex ( dans projetS2.zip)

En Cinquième :faire fonctionner le programme type, version 01/02 page 14 et 15 16 et faites fonctionner mon projet de base Mettez la carte en MODE 1 .. et mettez le doigt sur Pin0 ( 0 )En sixième: avec la carte branchée en mode 1

essayerez de changer des affichages dans la fenêtre processing Regarder la page 13 , Faites un tour page 16

Et consulter le draw dans processing Faites apparaître votre nom !!.. mettez le doigt sur la broche 0 de la microbit

Bon travail:)

Page 2

Pc . Mac .linuxusb

+-

Partie A Partie B

Datascapteurs

MICROBIT

MiniPlaque LAB

arm

Programme

Programme

Page 3: CODEX DUJ - debut

COMPARAISONS « C et PYTHON »

// LRSD univ exo1

#include "mbed.h"

Serial serial(SERIAL_TX, SERIAL_RX);

int main(){ serial.baud(115200);

while (true) { serial.printf("bonjour"); wait(10); }}

# LRSD univ exo1

from microbit import *

uart.init(115200)

while True: print("bonjour") Sleep(10000)

Programme écrit en C sur Mbed Programme en Python

Le Python s'inspire du C . Vous n'y verrez plus de pointeurs , les variables son plus souples à déclarer , et il vous sera demandé de la précision avec les tabulations ...

commentaires

;

POINT CLEF : l’indentation C'est la gestion rigoureuse

des tabulations, elle remplace l'usage des { }

Comparaisons philosophiques Le Compilateur C . vous écrivez les commandes à réaliser. Un logiciel

calcule l'espace mémoire utile , et ensuite il les transforme en langage machine composé de 0 et de 1 adapté à l'unité centrale de la carte ou il sera exécuté .

L’éditeur Python Vous écrivez les commandes à faire réaliser par un interpréteur « PYTHON » présent dans votre carte microbit. Ensuite Vous les envoyez en format texte vers la carte microbit .

Approche pratique : Le Python sur votre carte Microbit .. « micropython » est le fameux « python » pré installé dans le microprocesseur ARM de votre carte microbit. Il sait interpréter ligne à ligne les commandes que vous lui enverrez, il peut exécuter un programme téléchargé .

2 Types de fichiers compatibles avec la carte microbit Les fichiers xx.hex , ce sont les programmes que vous pouvez écrive et compiler directement sur le site microbit .. le hex est du langage machine .. Ce hex englobe vos lignes de texte en python , et l’interpréteur python ! (1,8Mo) Il se place dans la carte , comme un fichier se copie dans une clef USB Le fichier sinus.hex dans le répertoire projetS2.zip en est un exemple IL s'exécute automatiquement dès la mise sous tension de la carte . Les fichiers xx.py , ce sont ceux que vous éditerez sur Thonny C'est du texte interprétable par le programme micropython déjà dans la carte (Micropython sera téléchargé au moins une fois avant utilisation ( voyez la doc)) Vos fichiers « py » se chargent par liaison série grâce à Thonny Le fichier main.py en est un exemple Seule les fichiers nommés main.py sont exécutés à la mise sous tension .

:

D'autres noms de commandes

Page 3

Page 4: CODEX DUJ - debut

CODAGE EN LIGNE débuter en python Create.withcode.uk

Vous programmerez directement sur le site de create.withcode.uk , c'est le site d'une université Anglaise qui fait de la recherche pédagogique en partenariat avec le privé, et partage ses résultats pour les rendre accessibles gratuitement aux écoles du monde entier...

Ici nous apprendrons à nous passer de la carte Micro:BIT ,car nous utiliserons le simulateur de carte microbit présent en ligne .. c'est très pratique pour débuter .. et suffisant ..mais pas si génial au final pour télécharger le résultat sur votre carte ..

.

from microbit import *while True:

display.show(Image.HAPPY)sleep(500)display.show(Image.SAD)sleep(500)

Arrivée sur le site Create

1/ Vous allez copier ces 6 lignes vers la fenêtré du haut 3/ regardez les 25 Leds

C'est beau

2/ vous faites RUN

Page 4

Une fois réalisé un copier collerPour utiliser ces lignes de codes dans createcodeVérifiez si l'indentation est correctement copiéefrom microbit import *while True:

display.show(Image.HAPPY)sleep(500)display.show(Image.SAD)sleep(500)

indentation

Page 5: CODEX DUJ - debut

Exo1

from microbit import display.show(Image.HAPPY)

le Python interprète les commandes Python, ligne après ligne 1/ from microbit import .. indique quelle bibliothèque utilisera l'interpréteur 2/ display.show(Image.HAPPY) commande les 25 led de la carte pour faire un sourire ..

Exo 2

from microbit import *while True:

display.show(Image.HAPPY)sleep(500)display.show(Image.SAD)sleep(500)

..........I .. c'est cela l'indentation .. « : »  dit après le True , il y aura des lignes à faire dans le whileelles seront toutes alignées avec le même nombre de "tabulation" ou indentation

from microbit import *while True: display.show(Image.HAPPY) sleep(500) display.show(Image.SAD) sleep(500)...I... regardez ce sleep() il n'est pas aligné , il fera planter l'interpréteur

Exo 3

from microbit import *

titi = 'A'while True:

display.show(titi)

Utilisons la liaison série , car elle sera plus utile dans le projet

Exo4

from microbit import *uart.init(115200) while True:

print('teste fait par LK !')sleep(1000)

À tester > bonjour !

Exo 5 utilisons des variablesfrom microbit import *uart.init(115200)titi = 100toto = 'abc'while True:

print(titi)print(toto)sleep(1000)

C'est Python qui gère la déclaration de la nature des variables

Exo 7 jouons avec un bouton Ici le bouton n'est testé par la carte que lorsque l'instruction le demande from microbit import *while True: if button_a.is_pressed(): display.show(Image.HAPPY) sleep(500) display.show(Image.SAD) sleep(500)Dans cet exo sans action sur A c'est:(Avec une action continue c'est :( et :)

Exo 6 utilisons des « if »from microbit import *titi = 0while True: if titi > 100 : display.show(Image.HAPPY) if titi > 200 : Titi = 0 if titi < 100 : display.show(Image.SAD) sleep(5) titi = titi + 1 if test : : faire ce qui est identifié pareil A faire 1 A faire 2

Exo 8 à l’insu de vous,une action sur A ou B incrémente une variable en interruptionfrom microbit import *

while True: display.show('O') sleep(2000) titi = button_a.get_presses() if titi > 1: display.show('1') sleep(2000) display.show('!') sleep(1000))

Seule button_a.get_presses() saura récupérer le nombre de clics , et le remettre à 0

Page 5

Page 6: CODEX DUJ - debut

Exercices de Python à faire en ligne pour progresser .

Exo4

from microbit import *uart.init(115200)while True: rec= ' ' V0= 10*[0] for i in range (10): V0[i]=pin0.read_analog() rec = rec + str(V0[i]) + '/' print(rec) sleep(10000)

Exo3

from microbit import *uart.init(115200)rec = 'rr'while True: rec = rec + str(20)+ 'A' print(rec) sleep(10000)

Exo2

from microbit import *uart.init(115200)while True: display.show(Image.SAD) titi = pin0.read_analog() if titi > 512: display.show(Image.HAPPY)

Exo1

from microbit import *uart.init(115200)

rec = 'bonjour'while True: print(rec) sleep(10000)

Ecrit : bonjour

Exo1 bis

from microbit import *uart.init(115200)

rec = 125while True: print(rec) sleep(10000)

Ecrit : 125

:):( v0<512v0>512

Écrit 0/0/0/0/0/0/0/0/0/0/ si V0 = 0Ecrit 10/10/10/10/10/10/10/10/10/10/Si V0 = 10

Écrit rr20AEt 10 secondes aprèsrr20A20AEt 10 sec …ainsi de suiterr20A20A20A

Action de simulationAttention la barre de simulation donne de -1024 à 1024 , en réalité c'est de 0 à 1024.

rec est ici une variable texte

rec est ici une variable numérique 32bits

Print se débrouille

rec est ici une variable texte On lui ajoute du texte à sa fin en transformant la quantité 20 en une chaine de deux ascii .Plus le caractère 'A'

VO est un tableau de 10 valeurs = 0rec est en lettreson lui additionne la transformation De V0 en une chaîne avec un / en plus

Page 6

Page 7: CODEX DUJ - debut

1/ Allons chez Thonny:)Url : thonny.org

L'IDE THONNY .. Ou Environnement de Développement Intégré

Sur Thonny vous écrirez des lignes de commandes et les enverrez par liaison série vers la carte microbit , ou son interpréteur micropython les exécutera . C'est Thonny gère la carte. Pour que la carte microbit puisse communiquer par liaison série , il faut que votre ordi possède le bon driver ( c'est celui de la carte Mbed le ARM Mbed WindowSerie port driver ) Logiquement il est déjà installé dans Windows 10.. sinon il faudra le faire )

2/ Téléchargez suivant votre besoin

4/ paramétrez pour fonctionner avec une carte micro:bit>>>> Outils :

>> interpréteur

5/ Choisir l’interpréteur pour microbit

6/ branchez la carte et faites lechoix du port 7/ Faites OK

Ici vous initialisez la carte avec l'interpréteur de commandes python nommé « micropython »

3 installez .. vous obtenez ceci

>> vous êtes connectés

Page 7

Téléchargement et installation de Thonny pour microbit

Page 8: CODEX DUJ - debut

premier programme sur Thonny et téléopération de la carte

Exo 1Ce programme utilise la liaison série pour écrire bonjour dans la console en bas de page ..Logiquement si Thonny est bien paramétré ( page d'avant)Et si La carte est branchée sur le port USBThonny l'a vu et écrit « >>> » en bas de page ( faites un Reset carte si problème )

Vous pouvez copier et coller le programme suivant dans la fenêtre exo1.py

from microbit import *uart.init(115200)

while True: print("bonjour") Sleep(10000)

Lancez le programme avec la flèche verte Bonjour apparaît en bas de l'écran Le fait de lancer le programme par un RUN, envoie les lignes de commandes écrites en Python vers la carte, et les exécute les une après les autres . Si la carte exécute une commande qui écrit du texte sur la liaison série, le texte apparaît en bas de page dans la console . Cependant, quant vous revenez en mode édition avec un stop, Thonny ne reprend pas la main sur la carte.. Seul un reset carte la réveille et renoue ce lien avec Thonny, alors vous pouvez continuer à écrire du code dans thonny .

Je vous conseille de refaire les exos des pages d'avant !

>>>Indique Que la carte microbitEst synchronisée avec ThonnyElle vous attend !

« bonjour » est Visible une fois le programme lancé

Page 8

Page 9: CODEX DUJ - debut

Utilisation des capteurs de la carte microbit Nous resterons dans le cadre de La version 01/02 qui limite la capacité de transfert Problème 1 : Duj5 version 01/02 ne peut transférer que des datas de 0 à 1024Solution 1 : on limitera les chiffres à transmettre entre 1 et 1023 .. Problème 2 : Duj5 ne sait pas encore transférer des chiffres négatifs Solution 2 : les négatifs seront limités par -512 et +512 et décalés de 512 avec un +512

Mesures sur pin0 La pin0 , mesure les tensions en 0 et 3,3V

pas de négatif ! en 10bitsLe résulta sera un chiffre en 0 et 1024 ..

Mettez 0 sur pin0 ou 3,3V

from microbit import *uart.init(115200)

while True: captation = pin0.read_analog() print ( captation ) sleep(1000)

from microbit import *uart.init(115200)

while True: captation = accelerometer.get_z() print('Z',captation) sleep(1000)

from microbit import *uart.init(115200)

while True: captation = accelerometer.get_z() titi= int ( captation / 4 + 512 ) print('Z',titi) sleep(1000)

Mesures au magnétomètre ( X Y ou Z) La mesure va de +-1000000 avec un aimantLa mesure ira de +-100000 avec la terre

L'axe des z est au dessusL'axe des x de cotéL'axe des y devant ( câble usb) ..

Se limiter à 10 mesures à la seconde

Diviser par 250 borde la mesure aux valeurs du champ magnétique terrestre Dans le PC on enlèvera 512 et on retrouvera une valeur autour de 0 ( +-512)

from microbit import *uart.init(115200)

while True: titi = compass.get_x() print('g X',titi) sleep(1000)

from microbit import *uart.init(115200)

while True: titi = int(compass.get_x() / 250 + 512) print('g X',titi) sleep(1000)

from microbit import *uart.init(115200)

while True: titi = microphone.sound_level() print('son',titi) sleep(1000)

Mesures avec l'accéléromètre ( X Y ou Z) mesure de l’accélération entre +2 et -2g

+2g = 2048 -2g = -2048L'axe des z est au dessusL'axe des x de cotéL'axe des y devant ( cable usb) ..

Ici mesure sur Bougez la carte À plat sur Z On mesure l’accélération terrestre

Modification pour capter , border et minimiser la mesure

/4 passe de +-2048 à +-512+512 passe de +-512 à 0 1024

Mesures sur le microLa mesure du son donne un résultat avec une valeur comprise entre de 0 à 512 ..

Mesures de la température interne temperature() donne un résultat en CelsiusMais gare au négatif ! Alors je passe en Kelvin avec un + 273

from microbit import *uart.init(115200)

while True: titi = temperature()+ 273 print('dKelvin',titi) sleep(1000)

Page 9

Annexe 3

Page 10: CODEX DUJ - debut

Programmation fine Trucs et astuces de Python

Déclarer un sous programme

L'import rend présentes les lignes de commandes contenues dans spi.pyDans main.pyL'appel de jon() se fait bien

Attention aux variablesPrivilégiez le passage de paramètres dans la fonction

Stocker des fonctions , dans des programmes situés à l'extérieur du programme principal

from microbit import *from spi import* while True:

print(124) jon() sleep(500)

Programme principal nommé main.py

Programme secondaire nommé spi.py

def jon(): print(126)

124126..

console

main.pyspi.py

Racine carteMicro:Bit

from microbit import *

def jon(): print(126) while True: print(124) jon() sleep(500)

Notez les :

console

Écrire des sous programmesPermet d’éviter des répétitions

1/ problème du PYTHON : Vous écrivez du code qui sera interprété ensuite, ligne à ligne par le python situé dans la puce .. Cela implique que certaines parties de votre programme peuvent êtres fausses, sans que votre éditeur ne le voit. Ce n'est que quant la ligne corrompue est exécutée qu'une erreur apparaît. Il faudra multiplier les essais pour trouver toutes les erreurs .2/ Sur Thonny , votre carte est reliée par liaison série avec votre PC.. quant la puce plante , la liaison série plante .. tout s’arrête .. seule solution : Reset sur la carte .. et stop exécution .. Dans des cas très rares, il faut aller dans > OUTILS > OPTIONS > INTERPRETEUR Et recharger le firmware micropython sur la carte .. puis faire ok

Variables et sous programmeAttention les sous programmes déclarent en local, toutes les variables qu'ils utilisent ..Sauf si on précéde le nom de la variable par le mot « global » . Passer des paramètres est ce qui est le mieux .

from microbit import *

titi = 33

def jon(): global titi titi = titi + 1 print(titi) while True: print(124) jon() sleep(500)

124126.. 124

34..

console

Grâce à globalPython sait qu'il faut sortir de la fonction pour aller trouver la valeur de titi

Le mieux est de Passer les variables dans la fonction

Importer un sous programme

Les sous programmes

DEPANNAGE

Page 10

Page 11: CODEX DUJ - debut

TRAVAUX PRATIQUES avec câblage:) Dans cette partie vous allez câbler des LEDs sur la plaque lab et utiliser la carte microbit pour en faire clignoter une

kitonic

3 p0 p1 p2 p3 p4

3,3

P

0P

1P

2P

3P

4P

5P

6P

7P

8O

v

P2

0P

19

P1

6P

15

P1

4P

13

P1

2P

10

P11

P9

Ov

Le connecteur extension votre premier Câblage

CABLAGE 1 .. allumer une LED VERTE sur le 3,3V

330ohms orange orange marron

LED verteGrande patte vers le +

3,3V 0V

330ohms

CABLAGE 2 .. faire clignoter une LED jaune

Sur Thonny 1/ Trouvez le port COM ( option)2/ Faire stop .. et faire apparaître les >> ( sinon rechargez le firmware) 3/ copier coller le programme suivant

from microbit import *

while True: pin2.write_digital(0) sleep(500) pin2.write_digital(1) sleep(500)

Branchez la LED jaune avec 330ohms , entre la broche P2 et le 0V

CABLAGE 2 ..mesurer la tension de la LED verte

1/ Tirez un fil entre la broche P0 du connecteur( P0 est à coté du 3,3V) , et l'anode de la diode verte 2/ copiez collez le programme à gauche 3/ lancez et regardez

Nota Pin0.read_analog() retourne une valeur de 1024 pour 3,3VD’où la règle de 3 à son égard

from microbit import *uart.init(115200)

while True: pin2.write_digital(0) sleep(500) pin2.write_digital(1) sleep(500) titi =pin0.read_analog() print((titi*3.3)/1024) Page 11

Page 12: CODEX DUJ - debut

// EXO 1 test d'un bouton central color ON = color(200, 0, 0); // ON veut dire Rougecolor OFF = color(0, 0, 200); // Off veut dire bleu int bout = 1 ; // bout est l' etat du bouton int PX = 100 ; int PY = 100 ; int L = 100; int H = 100; // // pour le dessin du bouton

void setup() { size(600, 600); }

void draw() // c'est notre main pour dessiner à l'écran {background(50,60,0); textSize(24); fill ( 250) ; text("bonjour exo 1 ", 50,50); fill(OFF); if ( bout == 1) fill(ON) ; rect(PX,PY,L,H); //un bouton } // fin du draw

void mousePressed() // programme appelé par un clic souris { if ((mouseX>PX)&&(mouseX<(PX+L))&&(mouseY>PY)&&(mouseY<(PY+H)))bout = -bout; }

Processing révisions  

EXO1 : Créer une fenêtre de size(600,600), avec un boutonUn joli carré rouge y sera dessiné , et lorsque vous cliquerez dessus PC le saura , (car vous avez utilisé le sous programme d'interruption PC mousePressed() ) ..Dans cette interruption vous ferez un if complexe pour savoir si la position de mouseX et Y se situe dans le fameux carré .. vous y inverserez la couleur du carré à chaque clic . Regardez comment on utilise les variables color pour fabriquer une couleur avec un nom testez exo1

// EXO 2 test d'un bouton central et d'un systeme avec 2 etats color ON = color(200, 0, 0); // ON veut dire Rougecolor OFF = color(0, 0, 200); // Off veut dire bleu int bout = 1 ; int etat = 0 ; int PX = 100 ; int PY = 100 ; int L = 100; int H = 100; int off = 100;

void setup() { size(600, 600); }

void draw() // c'est notre main pour dessiner à l'écran {if ( etat == 0) { background(50,60,0); textSize(24); fill ( 250) ; text("bonjour exo 2 etat = 0 ", 50,50); fill(OFF); if ( bout == 1) fill(ON) ; rect(PX,PY,L,H); //un bouton } // fin etat = 0 if ( etat == 1) { background(50,0,60); textSize(24); fill ( 250) ; text("bonjour exo 2 etat = 1 ", 50,50); fill(OFF); if ( bout == 1) fill(ON) ; rect((PX+off),PY,L,H); //un bouton } // fin etat = 1 } void mousePressed() // programme appelé par un clic souris { if(etat==0){if((mouseX>PX)&&(mouseX<(PX+L))&&(mouseY>PY)&&(mouseY<(PY+H))) {bout = -bout; etat = 1 ;}} if(etat==1){if((mouseX>(PX+off))&&(mouseX<(PX+L+off))&&(mouseY>PY)&&(mouseY<(PY+H))) {bout = -bout; etat = 0 ;} } }

EXO2 Créer une fenêtre de size(600,600), avec un boutons et 2 états dans le draw.Une variable état est testée ,si etat = 0 il y aura un graphisme différent que si etat = 1Le test dans le mousePressed() est différentié entre les 2 états grâce à etat et off testez exo2

Processing ne s'installe pas, car c'est un programme qui utilise le java (déjà installé sur votre PC ou Mac) .. allez sur le site de la fondation processing , télécharger processing.zip .. et décompressez le dans un répertoire connu .. ensuite allez dans le répertoire pour trouver et lancer processing.exe .. c'est tout

Page 12

Page 13: CODEX DUJ - debut

Mise en œuvre de la démo « sinus.hex » Configuration .ordinateur : Processing en « RUN » avec le projet PJSduj5 .carte Microbit : Chargée avec SINUS.hex trouvé dans le répertoire microbit SINUS.hex se copie et se colle dans la carte microbit : ( clef usb)

Faites un run ici

vote fenêtre programme s'ouvrira! carte micro:bit déconnectée

Elle montre les ports COM utilisés par mon PC , celui de carte microbit n’apparaît pas encore:)

Connectez la carte microbit , ayant préalablement reçu le programme SINUS.hex

Un nouveau port com s'ouvre

Cliquez ( ici dans le 6 :)

Une nouvelle fenêtre s'ouvre

Une Première fenêtre s'ouvre

Ici la carte Microbit est chargée avec le fichier SINUS.hex

Le Rôle de SINUS.hexEst d’émettre chaque seconde, un signal sinus observable sur le terminal graphique constitué par le programme processing nommé PJS2duj5

Page 13

Page 14: CODEX DUJ - debut

Programmes de lancement

Page 14

PROJETS2 renferme des sous programmes utiles au lancement des projets Répertoire PJS2duj5 Le programme écrit en processing PJS2duj5 pour votre Ordinateur .Son rôle est de recevoir et d'afficher les datas arrivant de la carte . ICI il n'affiche que les 100 valeurs du tableau V1[]Dans le répertoire microbit les 4 programmes pour la carte microbit, ils seront présentés du plus simple au plus complexe SINUS pour une approche "débutant" .. un bon outil de test de processing SINUS.py est le programme python Il calcule les 100 valeurs d'un sinu, les place dans le tableau V1[] et le transfert en série un 'h' indique au PC que c'est le mode SINUS SINUS.hex est le programme en code machine à copier directement dans la carte

LIVE pour une approche "test capteur" s'adapte à tous les capteurs, une forme de scop LIVE.py pour Thonny en python Dans une boucle on échantillonne 100 valeurs de l’accélération en X ( chaque 10 ms) On les place dans le tableau V1[] , et ensuite on les sérialise vers PJS2duj5 un 'g' indique au PC que c'est le mode LIVE LIVE.hex ..est le programme en code machine à copier directement dans la carte

SIMPLE pour une approche "mise en mémoire et restitution, basique " SIMPLE .py pour Thonny en python cette version propose 2 possibilités de fonctionnement par une pression sur A et B > clic A record de 100 mesures en flash et attente ( on efface les valeurs d'avant) > clic B lecture flash et transfert dans V1[] et attente SIMPLE.hex .. .est le programme en code machine à copier directement dans la carte

COMPLEXE pour une approche "multi usage " COMPLEXE.py pour Thonny en python cette version propose 4 choix de fonctionnement par des actions complexes sur A et B > one shoot : 100 mesures dans V1[] , transfert serie , et attente . > 100 mesures dans V1[], et transfert en boucle > record de 100 mesures en flash et attente > lecture flash et transfert dans V1[] et attente COMPLEXE.hex .. est le programme en code machine à copier directement dans la carte

mode d'emploi de la carte en mode "COMPLEXE" A/ Au début à la mise sous tension ou par un reset la carte affiche un 0 B/ à chaque clic sur A on passe de 1 2 3 4 1 2 3 4 l'état est affiché sur les LED état 1: 100 mesures et transfer chaque 0.5s en boucle auto état 2: one shoot ! et transfert de 100 mesure et retour au point A/ état 3: one shoot et mise en flash de test.txt avec les valeurs, et retour au point A/ état 4: relecture des datas de test.txt et transfert serie, retour au point A/

C/ Choix et lancement d'un des 4 états .. 1/ choisir l'état que l'on désire exécuter par des clics sur le bouton A

2/ lorsque l'état désiré s'affiche cliquez entre 0,5 à 1 seconde sec sur B

la carte fait un petit « o » pendant 1 S et montrera ensuite un « O » pendant 2 secondes pendant ce « 0 » de 2 secondes faites 2 clics B la carte répond par un « ! » .. et exécute le mode choisi 3/ quant un mode est fini .. la carte retourne en attente de clic A un Clic B réveille la carte du mode automatique ( état 1)

un marche arrêt annule tout

Page 15: CODEX DUJ - debut

Page 15

Étude du programme SINUS.py sur ThonnyOu comment coder un programme en python qui sache envoyer, automatiquement chaque

seconde, un tableau de datas vers le PC en utilisant le protocole DUJ5. À la fin des exos vous saurez enoyer l100 valeurs d'un sinus r vers le PC équipé de PJTS2duj5Qui les recevra comme un tableau pour les placer en V1[] grâce au H et R

exo 1

from microbit import *uart.init(115200)

while True: # boucle globale GENEALE uart.write('a') uart.write('e') Sleep(1000)Dire au programme du PC que la carte microbit est la, en mode auto.Je suis la = 'e' mode auto 'a'

exo 2

from microbit import *uart.init(115200)

titi = 0while True: # boucle GENEALE uart.write('a') uart.write('e') print( titi) uart.write('H') # cloture d'une data uart.write('R') sleep(1000)print(titi) > envoie 0 car titi = 0H ferme l'envoie d'une data R ferme le transfert du tableauIci on envoie un tableau de 1 élément

exo 3from microbit import *uart.init(115200)

while True: # boucle GENEALE uart.write('a') uart.write('e') for i in range(100): print( i) uart.write('H') # cloture data uart.write('R') # cloture tableau sleep(1000)La boucle for va envoyer 100 datasChacune finie par un 'H'Le tout fini par un 'R'

exo 4from microbit import *uart.init(115200)while True: # boucle globale GENEALE uart.write('a') uart.write('e') for i in range(100): print( 10*i) uart.write('H') # cloture d'une data uart.write('R') sleep(1000)La boucle for va envoyer 100 datasChacune finie par un 'H' et RUne demi dent de scie sur le PC'

Exo 5from microbit import *import mathuart.init(115200)

while True: # boucle globale GENEALE uart.write('h') for i in range(100): toto = 510 + 250 * math.sin(3.6*i *math.pi/180) titi = int(toto) print( titi) uart.write('H') # cloture d'une data uart.write('R') sleep(1000)Math est la bibliothèque qui permet de calculer des sinus ( exprimés en radiant)Je calcule 100 valeurs de 0 à 360 ( d'ou le 3,6 i math.pi/180 radiantExo 5 est la base du programme sinus.hex ..

Page 16: CODEX DUJ - debut

Etude du programme Processing PJS2duj5 PJS2duj5 est dans le répertoire processing lui même dans le répertoire zip projets S2 . Il fait appel au fichier de sous programmes nommé PROJETS2 ( non décrit)Dans le draw() : La variable nommée « etat » sépare deux modes de dessins différents Si etat = 0 , on fera etat0() qui paramétré le bon port COM avec la carte et force l' etat à 11 Si etat = 11 , en tache de fond la carte écoute le port COM et mémorise les datas arrivées if ( état ==11) est le lieu ou vous devez écrire vos programmes Exemple .. dans état == 1 , une fenêtre montre les 100 données de V1[] arrivées en DUJ5 Les Variables en provenance de microbit sont dans le tableau V1[120] pré créé par PROJETS2La carte renseigne aussi la variable « type » (accessible) sur l'état de la carte microbit

// PROJET PJ2 // ecoute la carte microbit en version 01/02 ( com carte > Pc)

import processing.serial.*; // bibliothèque gestion com de processingSerial myPort; // myport sera le nom de notre objet de communication serie

// Variables du DRAWint etat = 0;

// variables utiles pour l'etat 0 int kx= 0; int ky= 100 ; int dk= 30 ; int mk= 40 ; int ptk= 1; int nbk= 10 ;String toto; int o= 0;

// variables utiles pour l'état 11color ON = color(204, 0, 0); color OFF = color(0, 0, 200); color OK = color(0, 200, 0);int type = 0 ; // 0 pas de carte , 1 carte version 01/02 'e' , 2 carte version ? 'f'

// variables liées à votre façon de dessiner dans le if(etat == 11) // int bl bla

void setup() { textSize(20); size(600, 600); // votre fenetre d'APP sur le PC initPJS2(); // initialisation de mon programme et des variables client OBLIGEE }

void draw() // c'est notre main pour dessiner à l'écran { if ( etat == 0) etat0(); //recherche le bon port COM car il le faut !!!!! if ( etat == 11) { int PX = 100 ; int PY = 100 ; // position fenetre de datas de V1[] dans l' ecran // exemple demonstratif d'un programme simple background(10,60,0); fill(250); text ( "Datas Vision de test pour Version 01/02 " , PX , 50 ); // scop minimaliste fill(250); rect(PX,PY,400,400); // couleur et tracé scop for ( int i = 0 ; i < 101; i++) { fill(250,0,0); ellipse(4*i + PX, PY + 400 - 4* (V1[i]/10) , 3,3);} // V1[] va de 1 à 1024 .. l'affichage de 0 à 400 alors je fais 4/10 // car avec un int 0.4 est impossible // affiche l'etat de la carte fill(250); // ecoute de la carte pour savoir si elle vit encore text ( "mode" , 100 , 550 ); text ( state , 160 , 550 ); if ( type == 0) text ( "pas de carte Active " , 250 , 550 ); if ( type == 1) text ( "Carte Microbit avec main 01/02 " , 250 , 550 ); } } // fin du draw void mousePressed() // programme appelé si on clic avec la souris { switch(etat) // les tests de clic souris sont relatifs à l'état dans lequel ils sont utiles { case 0: { testclicetat0(); } break; case 11: { //**************vos tests de CLIC ******* // if ((mouseX>50)&&(mouseX<150)&&(mouseY>50)&&(mouseY<150))bout = -bout; } break; default: ; } // fin switch }//fin mouse pressed Page 16

C'est la que vous pouvez créer une fenêtre d'affichage de données à votre goût

Lieu de vos variables

Page 17: CODEX DUJ - debut

initialisations

Init = 0

Prépa modePar clics

Init = 1

MesurageSur 4 modes

'e' vers COMpause(500)

N

O

ON

N

O

prépa modepar clics

Etat > led'e' sur COM

A?

State ++

State =

Bout = 1Led = 'o'

sleep(1s) B > X+1

N

O

= 1'a' sur COM

= 4'a' sur COM

= 3'a' sur COM

= 2'a' sur COM

N

B?N

Bout = 1

En interruption

Led = 'O'X=0

sleep(2s)

X = 2

Led = ' !'Bout=0

Etat= stateInit = 1

in

out

Etat = 1

i de 1 à 120print(V1[i]+H

inMesurage sur 4 modes

i de 1 à 100V1[i]=capteurise()

sleep(temps)

R > com

A ?

Etat = 0Init = 0

Etat = 2

i de 1 à 120print(V1[i]+H

i de 1 à 100V1[1]=capteurise()

sleep(temps)

R > com

Etat = 0Init = 0

Etat = 3

i de 1 à 100 V1[i]= capteurise()

sleep(temps)

Etat = 0Init = 0

i de 1 à 100 V1[i]> flash

Etat = 4

Etat = 0Init = 0

i de 1 à 120print(fichier flash)

out

MODEAUTO

MODEoneShoot

MODERecord

MODEPlay

Programme COMPLEXE.py

Le fichier s'appelle test.txtIl est consultable par thonny

Mesure d'un double clic pendant les 2 sec de visibilité du 'O'

Récupère le fichier pour affichage dans PJS2duj5

Page 17

Sous programme capteurise()1/ Échantillonne l'entrée désirée ici c'est pin02/ norme la valeur entre min et max soit de 1 à 1023 place un offset de 512 si négatif3 retourne la valeur norméée

Page 18: CODEX DUJ - debut

# base version 1/02 du main 31 duj# ne pas oublier de mettre l'extension .py de main.py# quant vous mettrez le main sur la carte microbitfrom microbit import *uart.init(115200)

# sous programmes de mesure sur un capteurdef capteurise( max , min ): captation = pin0.read_analog() # ici c'est l'entrée pin0 if captation > max: #limitation à la valeur max transmise captation = max if captation < min: # limitation à la valeur min transmise captation = min return int(captation) while True: # boucle globale GENEALE # déclaration de variables et leur initialisation temps = 1 # 1 ms .. c'est votre temps entre 2 mesures etat = 0 # 1 auto 2 shoot 3 men 4 play state = 0 # etat intermédiaire par le bouton a init = 0 # = 1 si init aux boutons faites donc mesures bout = 0 # = 0 pas de demande de memo etat V1= 120*[0] # ouverture tableau pour canal V1 # initialisation des paramètres A/D envoyés vers le PC V1[110] = 0 V1[111] = 100*temps # pour 100 echantillons V1[112] = 1023 # valeur max en 10 bits V1[113] = 1 # valeur min en 10 bits

while True: # boucle « prépa mode » ou « jouer mode » while init == 0: # init=0 prépa Suivent les lignes de codes prépa mode par clics Choix du mode par clic A Lancement du mode par clic B et double clic B while init == 1: # init = 1 modes Suit l’exécution des lignes de mesurage sur 4 modes Avec utilisation de capteurise() pour mesurer

sleep(500) uart.write('e') # f si mocro < PC

Détails sur le COMPLEXE.py : ou modifier le code ?

Le sous programme capteurise()numérise l'entrée pinA0 (10bits)

Partie modifiable Consultez l'annexe 1 exo capteur DUJ5 pour savoir comment utiliser les capteurs et savoir adapter la mesure à la dynamique de 0>1024 V1/02Attention DUJ5 ne transfert pas les signes négatifs . .

Partie modifiable Le temps entre 2 échantillons est à définir ici par la variable tempsMise à 1 (1 ms) au début

Page 18

Dans projetS2.zip , vous disposer du programme main.py que j'ai écrit pour gérer la carte microbit et lui dire d'envoyer les informations numérisées de la pin0 en DUJ5 vers le PC.

Vous allez devoir modifier certaines parties de ce programme ( mais rien ne vous empêche de tout re écrire .. si vous respecter le DUJ5)

Donc logiquement , dans un premier temps, vous vous servirez du programme main.py tel quel , vous regarderez le transfert de 100 valeurs de pin0 , et ensuite vous allez devoir utiliser un autre capteur , et peut être même changer le temps entre 2 mesures .

Le temps entre 2 mesures est géré par la variable temps Dans V1[11] il sera place 100 x temps .(ms) la durée totale des 100 échantillons . De cette manière le PC sait afficher une valeur en X Le type de capteur utilisé est modifiable Dans le sous programme capteurise()

Le temps total

Page 19: CODEX DUJ - debut

Le Protocole DUJ5 : la théorie

DUJ5 est un protocole de transfert des données codées en ASCII, il est bidirectionnel et symétrique , il utilises des caractères ASCII pour transférer des datas ou des ordres , sur une liaison série généralement à une vitesse de 57600bps ou 115200bps. Le protocole DUJ5 existe sous la forme d'un sous programme, déjà codé en Mbed ou en Processing ou microbit , vous n'avez qu'a l'utiliser .. en jouant avec ses fonctions ou ses variables qui sont déjà déclarées, et réussir à communiquer avec une partie qui attend ce protocole.

BASES : 3 modes de transfert , 1 d'ordres et 2 de datas Transfert d'Ordres par un seul caractère ASCII en minuscule

Caractères ascii attendus de 'a' 'b' jusqu'à .'z' C'est à vous de de décider la signification d'un ordre

Exemple « a » allumera une led , un « b » l’éteindra .. Transfert d'une variable en décimal, codée par des caractères ASCII en Majuscule Procédure : int codé en ASCII décimal, 5 caractères max, suivi d'un caractère de clôture . Les caractères de clôture permettent de séparer entre elles 6 variables différentes. Les caractères de clôture sont prédéfinis de K L M N O P à Q

Exemple : int toto = 256 (décimal), donne et « 256 » Transfert de toto par le canal de la variable M '2' '5' '6' 'M' .. donnera 256 dans M dès l'arrivée du 'M' '6' 'N' .. donnera 6 dans N dès l'arrivée du 'N' Transfert de plusieurs variables d'un tableau d'int . dit « transfert tableau » Un Le tableau comporte 120 int , dont 100 datas utiles , et 10 de paramètres. Chaque variable est transmise en décimal codé ASCII , clôture par un H, I ou J Le tableau est fini par un caractère de clôture 'R' 'S' 'T' ( 3 tableaux possibles) Exemple : Tab[] comporte 120 cases (int) , de [0] à [100] ce sont les variables ,

de [110] à [120] ce sont les paramètres liées aux données à transmettre Exemple si V1[] porte 100 variables = 1 et 4 paramètres de [110] à [114] = à 100 On transmet : 100 x '1''H' + 10 x '0''H' + 4 x '1''0''0''H' + 6 x '0''H' et le 'R' de clôture Soit 100 variables 10 vides 4 paramètres 6 vides et la clôture à RH indique : mise en mémoire intermédiaire et incrémentation du pointeur vers cette mémoire R indique : transfert du tableau intermédiaire vers utilisation, et remise à zéro du pointeur .

Caractères ASCII réservés Caractères minuscules ordres

de a > y .. Le 'z' est réservé pour le reset général Caractères en majuscules

0 à 9 sont les caractères ASCII réservés pour le Décimal H , I , J caractère de clôture ..transfert d'un élément de tableau, + pointeur+

R , S, T caractère de clôture .. fin de transfert d'un tableau et utilisation, pointeur = 0 K L M N O P caractère de clôture du transfert d'un entier et utilisation directe .

Dans la VERSION 01/02, seule la carte microbit peut émettre des datas ou des ordres Elle est écrite ( pour le moment ) n'émet que le tableau V1[] , et les ordres a b c d e Le programme processing est non limité .

Pc . Mac .linuxusb

+Datas et Ordres

Microbit

K1 led0

Avec processing ou Mbed il est possible de recevoir et de transmettre des caractères en ASCII sur une liaison série ( port COM) Ces caractères peuvent coder des ordres ou des valeurs .. Dans les 2 environnements lorsqu'un caractère arrive sur le port COM il exécute un sous programme qui décode les données, le protocole DUJ5 sert à organiser ce décodage . .

Page 19

Annexe

Page 20: CODEX DUJ - debut

// exo graph

//VARIABLES UTILISEES int titi = 0;int[] V1 =new int[120] ; // tableau à afficher ) int PX = 100 ; int PY = 100 ; // position fenetre de datas de V1[]

// variables CLIENT .. placez vos variables ici .. commençant toutes par un z int ztruc = 0 ; // exemple qui ne sert pas

void inittab() { for ( int f = 0; f < 101 ; f++ ) { V1[f] = 10*f ; } // dans V1[] les valeurs vont de 0 à 1024 }

void setup() { textSize(20); size(600, 600); // fenetre sur le PC inittab(); // initialise le tableau a afficher }

void draw() // c'est notre main pour dessiner à l'écran { background(10,60,0); fill(250); text ( "test courbe issue de V1[] " , PX , 50 ); fill(250); rect(PX,PY,400,400); // couleur et tracé scop for ( int i = 0 ; i < 101; i++) { fill(250,0,0); ellipse(4*i + PX, PY + 400 - 4* (V1[i]/10) , 3,3);} // V1[] va de 1 à 1024 .. l'affichage de 0 à 400 je fais 4/10 avec un int 0.4 NON fill(250); rect(500,500,100,100); fill(0); text ( "clic ici " , 505 , 530 ); text ( titi , 505 , 560 );

} // fin du draw void mousePressed() // programme appelé si on clic avec la souris { if ((mouseX>500)&&(mouseX<600)&&(mouseY>500)&&(mouseY<600)) titi++; // exemple }//fin mouse pressed

Page 20

Exemple : tracé d'une courbe sur processing

Dans cet exemple Un tableau de 100 int V1[] est initialisé , avec une droite ..

Dans le draw je vous montre comment on peut extraire ces variables et les afficher ..Essayez donc d'y placer un sinus !!Attention la variable à mettre dans le tableau doit être un int de 0 à 1024 .. ( milieu à 500)