Arexx SUPERHEROS : Différence entre versions
(→{{Bleu|Amélioration du programme de la procédure optimisée }}) |
(→{{Bleu|Amélioration du programme de la procédure optimisée }}) |
||
Ligne 751 : | Ligne 751 : | ||
volatile int lecture; | volatile int lecture; | ||
volatile int i; | volatile int i; | ||
− | volatile boolean Sel=true; | + | volatile boolean Sel=true; //flag autorisant le mode de fonctionnement sélection du port série |
− | volatile boolean Init=false; | + | volatile boolean Init=false; //flag autorisant le mode de fonctionnement initialisation du port série |
− | boolean fct=false; | + | boolean fct=false; //flag autorisant le mode de fonctionnement normal |
− | boolean fin=false; | + | boolean fin=false; //flag indiquant la fin du test |
void setup() { | void setup() { | ||
+ | |||
size(1000, 800); | size(1000, 800); | ||
background(100); | background(100); | ||
Ligne 765 : | Ligne 766 : | ||
text("indiquez le port de la carte", 10, 150); | text("indiquez le port de la carte", 10, 150); | ||
− | board=loadImage("imgboard.png"); | + | board=loadImage("imgboard.png");// selection et chargement des images |
cc=loadImage("cc.png"); | cc=loadImage("cc.png"); | ||
ledcg=loadImage("ledcg.png"); | ledcg=loadImage("ledcg.png"); | ||
Ligne 788 : | Ligne 789 : | ||
{ | { | ||
fill(0); | fill(0); | ||
− | rect(0, 600, 1000, 200); | + | rect(0, 600, 1000, 200);//efface le précédent texte |
fill(255); | fill(255); | ||
switch(lecture) { | switch(lecture) { | ||
+ | //affichage des informations correspondant au code transmis par Arduino | ||
case 1: | case 1: | ||
text("Placez la carte sur une surface sombre, puis appuyez sur une touche", 50, 650, 950, 800); | text("Placez la carte sur une surface sombre, puis appuyez sur une touche", 50, 650, 950, 800); | ||
Ligne 894 : | Ligne 896 : | ||
void draw() { | void draw() { | ||
− | + | //partie initialisation du port série | |
if (Init==true) | if (Init==true) | ||
{ | { | ||
char nom[]=new char[i]; | char nom[]=new char[i]; | ||
− | for (char j=0; j<i; j++) nom[j]=data[j]; | + | for (char j=0; j<i; j++) nom[j]=data[j];//stockage des caractères choisi par l'utilisateur dans un tableau |
− | String name = new String(nom); | + | String name = new String(nom);//création d'une chaîne de caractère à partir du tableau |
− | myPort = new Serial(this, name, 9600); | + | myPort = new Serial(this, name, 9600);//initialisation du port série |
myPort.bufferUntil('\n'); | myPort.bufferUntil('\n'); | ||
background(0); | background(0); | ||
Ligne 912 : | Ligne 914 : | ||
void keyPressed() { | void keyPressed() { | ||
− | + | //partie utilisée seulement en mode selection du port série | |
if (Sel==true) { | if (Sel==true) { | ||
− | if ((key==ENTER)||(key==RETURN)) | + | if ((key==ENTER)||(key==RETURN)) //validation du choix du port série |
{ | { | ||
Init=true; | Init=true; | ||
Ligne 920 : | Ligne 922 : | ||
} else | } else | ||
{ | { | ||
− | if (key==BACKSPACE) | + | if (key==BACKSPACE) //efface un caractère |
{ | { | ||
data[i]=0; | data[i]=0; | ||
Ligne 935 : | Ligne 937 : | ||
} | } | ||
} | } | ||
− | + | ||
+ | //partie utilisée seulement en fonctionnement normal | ||
if (fct==true) | if (fct==true) | ||
{ | { | ||
− | myPort.write(0x0d); | + | myPort.write(0x0d); //envoie confirmation à Arduino si on appui sur une touche |
− | if (fin==true) | + | if (fin==true) //si le test est fini, efface l'écran avant de recommencer |
{ | { | ||
image(board, 0, 0, 1000, 600); | image(board, 0, 0, 1000, 600); | ||
Ligne 956 : | Ligne 959 : | ||
fill(255); | fill(255); | ||
byte l[]=myPort.readBytesUntil('\n'); | byte l[]=myPort.readBytesUntil('\n'); | ||
− | lecture=(l[0]-48)*10+(l[1]-48); | + | lecture=(l[0]-48)*10+(l[1]-48); //conversion de la chaine de caractère envoyé en un nombre de 2 chiffre |
text(lecture, 50, 50); | text(lecture, 50, 50); | ||
} | } |
Version du 19 juin 2015 à 14:23
Sommaire
Introduction-Présentation du projet
Au cours du précédent semestre, nous avons eu à concevoir un robot suiveur de ligne sur un châssis Arexx constitué d'une carte capteur et d'une carte gestion. Nous avons également dû réaliser une carte d’adaptation afin de relier directement la carte capteur à une carte ARDUINO. Nous avons aussi écrit des programmes pour tester les capteurs et les LEDs, suite à cela notre projet actuel consiste à écrire un programme permettant de détecter les pannes sur la carte capteur du robot Arexx et une possibilité de modifier la carte d’adaptation.
Présentation du cahier des charges
♦Créer deux algorithmes permettant de tester le bon fonctionnement des capteurs et des LEDs.
♦Possibilité de modification de la carte d'adaptation.
♦Fabrication de la carte gestion.
♦ Réalisation des programmes permettant le fonctionnement de la carte gestion.
♣ Suite à des imprévus, nous avons dû abandonner la fabrication de la carte gestion et des programmes correspondant.
Planning
Planning prévisionnel
Planning de la semaine d’inter-semestre
Carte capteur
Procédure des tests
Procédure manuelle
Ces tests sont basés sur les programmes réalisés lors du projet inter-semestre précédent, en testant le bon fonctionnement des capteurs et des LEDs.
char * pos[4] = {
"cote gauche", "milieu gauche", "milieu droit", "cote droit"};
char ledv[4]={
6,7,9,8};
char ledc[4]={
4,3,2,5};
int i;
void setup(){
for (char i = 0; i < 8; i++) pinMode(i+2, OUTPUT);
Serial.begin(9600);
}
void testlv(){
Serial.println("Parametrer le moniteur serie en 'Pas de fin de ligne'");
Serial.println("Appuyer sur o si a led s'allume ou sur n sinon");
for(i=0;i<4;i++){
digitalWrite(ledv[i],1);
while (Serial.available() == 0);
char l=Serial.read();
while(Serial.available()>0);
digitalWrite(ledv[i],0);
if(l==0x6F){
Serial.print("la led visible ");
Serial.print(pos[i]);
Serial.println(" fonctionne");
}
else if(l==0x6E){
Serial.print("la led visible ");
Serial.print(pos[i]);
Serial.println(" est HS");
}
}
}
void testlc(){
Serial.println("Utiliser l'objectif de votre smartphone pour voir les capteurs");
Serial.println("Appuyer sur o si a led s'allume ou sur n sinon");
for(i=0;i<4;i++){
digitalWrite(ledc[i],1);
while (Serial.available() == 0);
char m=Serial.read();
while(Serial.available()>0);
digitalWrite(ledc[i],0);
if(m==0x6F){
Serial.print("la led CNY ");
Serial.print(pos[i]);
Serial.println(" fonctionne");
}
else if(m==0x6E){
Serial.print("la led CNY ");
Serial.print(pos[i]);
Serial.println(" est HS");
}
}
}
void tcapteur(){
char led[4]={
4,3,2,5 };
char capt[4]={
A2,A3,A1,A0 };
int i;
Serial.println("Parametrer le moniteur serie en 'retour chariot'");
Serial.println("Poser la carte sur une surface clair");
Serial.println("Puis taper sur ok");
OK();
analogReference(DEFAULT);
for(i=0;i<4;i++){
digitalWrite(led[i],0);
int mes=analogRead(capt[i]);
digitalWrite(led[i],1);
delay(5);
int mea=analogRead(capt[i]);
if(mea>(mes*0.95)){
Serial.print("le capteur ");
Serial.print(pos[i]);
Serial.println(" est HS");
}
else{
Serial.print("le capteur ");
Serial.print(pos[i]);
Serial.println(" fonctionne");
}
delay(1000);
}
}
void OK()
{
char r;
do {
while (Serial.available() == 0);
r = Serial.read();
}
while ( r != 0x0d);
}
void loop(){
testlv();
testlc();
Serial.println("Verification des capteurs...");
delay(1000);
tcapteur();
Serial.println("Appuyer sur une touche pour recommencer les tests");
OK();
}
Procédure optimisée
Avec cette procedure, les courts-circuits sont détéctés, les LEDs et les capteurs sont testés de façon semi-automatique par le programmes ci dessous réalisés lors de notre projet tutorés de ce semestre. l'utilisateur doit seulement deplacer la carte sur différentes surface afin de diminuer ou augmenter l'impact des capteur sur les mesure suivant les besoins.
Modification de la carte d'adaptation-Choix de la résistance
Nous avons choisi une résistance la plus grande possible laissant un courant d'environ 4mA traverser une LED, afin de perturber le moins possible le fonctionnement des LEDs.
Si Vd=2V
U=((5V-Vd)*R)/R+R1
= 3R/R+680 = (3*120)/800
= 360/800= 0.45V
R=U/I = 0.45/4*10^-3=112.5 Ohm.
On prendra la résistance normalisée 120 Ohm.
Nous avons modifié la carte d'adaptation en mettant une résistance de 120ohm
Sous-programme
Test des courts-circuits
Ce test permet de détecter les courts-circuits entre le Vcc et la masse.
Si aucune LED n'est allumée et que les capteurs ne sont pas exposés à la lumière, aucun courant ne circule, donc il n'y a aucune tension aux bornes de la résistance de test, si il y a une tension imprtante, cela signifie qu'il y a un court-circuit entre la masse et l'alimentation.
void test_cc(){
int val = analogRead(A4);
if(val>512)
{
Serial.print("court-circuit entre VCC et la masse!!!");
while(1);
}
}
Test des LEDs
Ce test permet de détecter un problème ente 2 bornes de la LED , ou si une piste est coupée sur le circuit alimentant la LED .
Pour les LEDs : en fonctionnement normal, la tension aux bornes des LEDs est d'environ 2V, donc la tension aux bornes de notre résistance de test est de ((5-Vd)*Rtest)/(Rtest+R)=(3*120)/(120+680)=0.45V. Après la conversion analogique, 0.45V donne la valeur 92.
Pour les LEDs infrarouges des capteurs : les recepteurs des capteurs créent une tension lorsqu'on allume les LEDs donc la tension aux bornes dépend aussi de la tension aux bornes des phototransistors. Nous avons observé les variations des 2 tensions en faisant varier la luminosité, afin de trouver une équation linéaire approximant le fonctionnement des capteurs. Nous obtenons : U=413 -(20/307) * u2 avec u2 la tension moyenne des capteurs.
Pour limiter l'impact des tensions des capteurs dans les mesures nous placerons les capteurs sur une surface sombre. Nous prenons une marge de 25 % dans nos calculs afin d'eviter les problèmes de variations de tensions.
char * pos[] = {"cote gauche", "milieu gauche", "milieu droit", "cote droit"};
char led_HS[4];//CNY{gauche, mil gauche, mil droit, droit}
char ledCNY[4]={ 4,3,2,5 };
char capt[4]={ A2,A3,A1,A0};
char led[] = {6, 7, 9, 8 };
void test_led()
{
Serial.println("Poser la carte sur une surface noire");
Serial.println("Puis appuyez sur une touche");
OK();
//partie LED presence ligne
for (char i = 0; i < 4; i++)
{
digitalWrite(led[i], HIGH);
int val = analogRead(A4);
digitalWrite(led[i], LOW);
if (val < 92 * 0.75)
{
Serial.print("Il y a une piste coupée sur le circuit de la LED ");
Serial.println(pos[i]);
err=true;
}
if(val > 92 * 1.25)
{
Serial.print("Il y a un court-circuit sur la LED ");
Serial.println(pos[i]);
err=true;
}
}
Serial.println("");
//partie LED CNY
for (char i = 0; i < 4; i++)
{
unsigned int u2=0;
char an[] = {
A0, A1, A2, A3 };
digitalWrite(ledCNY[i], HIGH);
unsigned int u1 = analogRead(A4);
for (int j = 0; j < 4; j++)
{
u2 += analogRead(an[j]);
}
u2 /= 4;
digitalWrite(ledCNY[i], LOW);
if( u1 < (0.75 *(413 + (-20/307) * u2)))
{
Serial.print("Il y a une piste coupée sur le circuit de la LED du capteur ");
Serial.println(pos[i]);
led_HS[i] = HIGH;
err=true;
}
if( u1 > (1.25 *(413 + (-20/307) * u2)))
{
Serial.print("Il y a un court-circuit sur la LED du capteur ");
Serial.println(pos[i]);
led_HS[i] = HIGH;
err=true;
}
}
Serial.println("");
}
Test des capteurs
Permet de détecter un problème dans les capteurs
♠Si la LED du capteur fonctionne
Si la LED fonctionne, nous pouvons vérifier le fonctionnement en éffectuant une mesure avec la LED allumée et une avec la LED éteinte. Si la mesure avec la LED allumée est supérieure à celle de la LED éteinte, cela signifie que le récepteur fonctionne.
void test_capt()
{
int i;
Serial.println("Poser la carte sur une surface clair");
Serial.println("Puis taper sur ok");
OK();
for(i=0;i<4;i++)
{
if(led_HS[i]==0)
{
digitalWrite(ledCNY[i],0);
int mes=analogRead(capt[i]);
digitalWrite(ledCNY[i],1);
delay(5);
int mea=analogRead(capt[i]);
digitalWrite(ledCNY[i],0);
if(mea>(mes*0.95)){
Serial.print("Il y a un probleme sur le circuit du capteur ");
Serial.print(pos[i]);
Serial.println(" est HS");
err=true;
}
}
}
}
Si la LED ne fonctionne pas, nous remplaçons la LED allumée par un eclairage fort, pour la LED éteinte, nous plaçons les capteurs sur une surface sombre.
♠Si la LED du capteur ne fonctionne pas
char void test_capt_led_HS() {
char led[4] = {
4, 3, 2, 5
};
char capt[4] = {
A2, A3, A1, A0
};
int i;
int mes[4], mea[4];
Serial.println("Poser la carte sur une surface sombre");
Serial.println("Puis taper sur ok");
OK();
for (i = 0; i < 4; i++) {
if(led_HS[i]==1)
{
mes[i] = analogRead(capt[i]);
}
}
Serial.println("Exposez la carte a une lumiere forte");
Serial.println("Puis taper sur ok");
OK();
for (i = 0; i < 4; i++) {
if(led_HS[i]==1)
{
mea[i] = analogRead(capt[i]);
if (mea[i] > (mes[i]*0.98 )) {
Serial.print("Le capteur ");
Serial.print(pos[i]);
Serial.println(" est HS");
err=true;
}
}
}
}
Programme final
char * pos[] = {
"cote gauche", "milieu gauche", "milieu droit", "cote droit"};
char led_HS[4];//CNY{gauche, mil gauche, mil droit, droit}
char ledCNY[4]={4,3,2,5};
char capt[4]={A2,A3,A1,A0};
char led[] = {6, 7, 9, 8 };
boolean err=false;
void setup() {
for (char i = 0; i < 14; i++) pinMode(i, OUTPUT);
Serial.begin(9600);
Serial.println(" Parametrer le moniteur serie en 'retour chariot'");
test_cc();
}
void loop() {
test_led();
test_capt();
if((led_HS[0]==1)||(led_HS[1]==1)||(led_HS[2])||(led_HS[3])) test_capt_led_HS();
Serial.println(" ");
if(err==false) Serial.println("Aucun probleme");
err==false;
Serial.println("Test termine");
Serial.println("Taper sur entrer pour recommencer");
Serial.println(" ");
Serial.println(" ");
OK();
}
//////////
void OK()
{
char r;
do {
while (Serial.available() == 0);
r = Serial.read();
}
while ( r != 0x0d);
}
//////////
void test_cc(){
Serial.println("Poser la carte sur une surface noire");
Serial.println("Puis appuyez sur une touche");
OK();
int val = analogRead(A4);
if(val>512)
{
Serial.print("Court-circuit entre VCC et la masse!!!");
while(1);
}
}
//////////
void test_led()
{
Serial.println("Poser la carte sur une surface noire");
Serial.println("Puis appuyez sur une touche");
OK();
//partie LED presence ligne
for (char i = 0; i < 4; i++)
{
digitalWrite(led[i], HIGH);
int val = analogRead(A4);
digitalWrite(led[i], LOW);
if (val < 92 * 0.75)
{
Serial.print("Il y a une piste coupée sur le circuit de la LED ");
Serial.println(pos[i]);
err=true;
}
if(val > 92 * 1.25)
{
Serial.print("Il y a un court-circuit sur la LED ");
Serial.println(pos[i]);
err=true;
}
}
Serial.println("");
//partie LED CNY
for (char i = 0; i < 4; i++)
{
unsigned int u2=0;
char an[] = {
A0, A1, A2, A3 };
digitalWrite(ledCNY[i], HIGH);
unsigned int u1 = analogRead(A4);
for (int j = 0; j < 4; j++)
{
u2 += analogRead(an[j]);
}
u2 /= 4;
digitalWrite(ledCNY[i], LOW);
if( u1 < (0.75 *(413 + (-20/307) * u2)))
{
Serial.print("Il y a une piste coupée sur le circuit de la LED du capteur ");
Serial.println(pos[i]);
led_HS[i] = HIGH;
err=true;
}
if( u1 > (1.25 *(413 + (-20/307) * u2)))
{
Serial.print("Il y a un court-circuit sur la LED du capteur ");
Serial.println(pos[i]);
led_HS[i] = HIGH;
err=true;
}
}
Serial.println("");
}
//////////
void test_capt()
{
int i;
Serial.println("Poser la carte sur une surface clair");
Serial.println("Puis taper sur ok");
OK();
for(i=0;i<4;i++)
{
if(led_HS[i]==0)
{
digitalWrite(ledCNY[i],0);
int mes=analogRead(capt[i]);
digitalWrite(ledCNY[i],1);
delay(5);
int mea=analogRead(capt[i]);
digitalWrite(ledCNY[i],0);
if(mea>(mes*0.95)){
Serial.print("Il y a un probleme sur le circuit du capteur ");
Serial.print(pos[i]);
Serial.println(" est HS");
err=true;
}
}
}
}
//////////
void test_capt_led_HS() {
char led[4] = {
4, 3, 2, 5
};
char capt[4] = {
A2, A3, A1, A0
};
int i;
int mes[4], mea[4];
Serial.println("Poser la carte sur une surface sombre");
Serial.println("Puis taper sur ok");
OK();
for (i = 0; i < 4; i++) {
if(led_HS[i]==1)
{
mes[i] = analogRead(capt[i]);
}
}
Serial.println("Exposez la carte a une lumiere forte");
Serial.println("Puis taper sur ok");
OK();
for (i = 0; i < 4; i++) {
if(led_HS[i]==1)
{
mea[i] = analogRead(capt[i]);
if (mea[i] > (mes[i]*0.98 )) {
Serial.print("Le capteur ");
Serial.print(pos[i]);
Serial.println(" est HS");
err=true;
}
}
}
}
Amélioration du programme de la procédure optimisée
Nous avons dévellopé à l'aide de Processing une interface graphique qui faciliterai la recherche de la panne par l'utilisateur, cette interface affiche les problèmes et les consignes comme le moniteur série dans le précédent code, mais elle affiche aussi sur l'image du routage les pistes à vérifier en surbrillance. De plus, le programme ne nécessite pas de changement de paramètre, donc peut être utilisé indépendamment de Processing. Pour cela nous utilisons la fonction d'exportation de Processing afin de générer une application utilisable sur tout ordinateur. Cependant cette methode serait réellement éfficace si toutes les cartes possèdaient le même routage.
Partie Arduino
Pour faciliter la communication, le texte envoyé à la liaison série est remplacé par un nombre.
char led_HS[4];//CNY{gauche, mil gauche, mil droit, droit}
char ledCNY[4]={4,3,2,5};
char capt[4]={A2,A3,A1,A0};
char led[] = { 6, 7, 9, 8};
void setup() {
for (char i = 0; i < 14; i++) pinMode(i, OUTPUT);
Serial.begin(9600);
Serial.println("");
test_cc();
}
void loop() {
for(int i=0; i<4;i++) led_HS[i]=0;
test_led();
test_capt();
if((led_HS[0]==1)||(led_HS[1]==1)||(led_HS[2])||(led_HS[3])) test_capt_led_HS();
Serial.println(25);
// Serial.println(" ");
OK();
}
//////////
void OK()
{
char r;
do {
while (Serial.available() == 0);
r = Serial.read();
}
while ( r != 0x0d);
}
//////////
void test_cc(){
Serial.println("01");
OK();
int val = analogRead(A4);
if(val>512)
{
Serial.println("02");
while(1);
}
}
///////////
void test_led()
{
Serial.println("01");
OK();
//partie LED presence ligne
for (char i = 0; i < 4; i++)
{
digitalWrite(led[i], HIGH);
int val = analogRead(A4);
digitalWrite(led[i], LOW);
if (val < 92 * 0.75)
{
Serial.print("0");
Serial.println(i+3);
delay(2000);
}
if(val > 92 * 1.25)
{
Serial.print("0");
Serial.println(i+7);
delay(2000);
}
}
//partie LED CNY
for (char i = 0; i < 4; i++)
{
unsigned int u2=0;
char an[] = {
A0, A1, A2, A3 };
digitalWrite(ledCNY[i], HIGH);
unsigned int u1 = analogRead(A4);
for (int j = 0; j < 4; j++)
{
u2 += analogRead(an[j]);
}
u2 /= 4;
digitalWrite(ledCNY[i], LOW);
if( u1 < (0.75 *(413 + (-20/307) * u2)))
{
Serial.println(i+11);
led_HS[i] = HIGH;
delay(2000);
}
if( u1 > (1.25 *(413 + (-20/307) * u2)))
{
Serial.println(i+15);
led_HS[i] = HIGH;
delay(2000);
}
}
}
//////////
void test_capt()
{
int i;
Serial.println(23);
OK();
for(i=0;i<4;i++)
{
if(led_HS[i]==0)
{
digitalWrite(ledCNY[i],0);
int mes=analogRead(capt[i]);
digitalWrite(ledCNY[i],1);
delay(5);
int mea=analogRead(capt[i]);
digitalWrite(ledCNY[i],0);
if(mea>(mes*0.95)){
Serial.println(i+19);
delay(2000);
}
}
}
}
//////////
void test_capt_led_HS() {
int i;
int mes[4], mea[4];
Serial.println("01");
OK();
for (i = 0; i < 4; i++) {
if(led_HS[i]==1)
{
mes[i] = analogRead(capt[i]);
}
}
Serial.println(24);
OK();
for (i = 0; i < 4; i++) {
if(led_HS[i]==1)
{
mea[i] = analogRead(capt[i]);
if (mea[i] > (mes[i]*0.98 )) {
Serial.println(i+19);
delay(2000);
}
}
}
}
Partie Processing
import processing.serial.*;
PImage board;
PImage cc;
PImage ledcg;
PImage ledmg;
PImage ledmd;
PImage ledcd;
PImage CNYcg;
PImage CNYmg;
PImage CNYmd;
PImage CNYcd;
PImage captcg;
PImage captmg;
PImage captmd;
PImage captcd;
Serial myPort;
volatile char data[]= new char[255];
volatile int lecture;
volatile int i;
volatile boolean Sel=true; //flag autorisant le mode de fonctionnement sélection du port série
volatile boolean Init=false; //flag autorisant le mode de fonctionnement initialisation du port série
boolean fct=false; //flag autorisant le mode de fonctionnement normal
boolean fin=false; //flag indiquant la fin du test
void setup() {
size(1000, 800);
background(100);
textSize(20);
text("la touche maj est considérée comme un caractère, pour passer en majuscule, tapez ver.maj. puis backspace",10,50,1000,100);
textSize(32);
text("indiquez le port de la carte", 10, 150);
board=loadImage("imgboard.png");// selection et chargement des images
cc=loadImage("cc.png");
ledcg=loadImage("ledcg.png");
ledmg=loadImage("ledmg.png");
ledmd=loadImage("ledmd.png");
ledcd=loadImage("ledcd.png");
CNYcg=loadImage("CNYcg.png");
CNYmg=loadImage("CNYmg.png");
CNYmd=loadImage("CNYmd.png");
CNYcd=loadImage("CNYcd.png");
captcg=loadImage("captcg.png");
captmg=loadImage("captmg.png");
captmd=loadImage("captmd.png");
captcd=loadImage("captcd.png");
imageMode(CORNERS);
}
void fonctionnement()
{
fill(0);
rect(0, 600, 1000, 200);//efface le précédent texte
fill(255);
switch(lecture) {
//affichage des informations correspondant au code transmis par Arduino
case 1:
text("Placez la carte sur une surface sombre, puis appuyez sur une touche", 50, 650, 950, 800);
break;
case 2:
image(cc, 0, 0, 1000, 600);
text("Il y a un court-circuit entre VCC et la masse!!!", 50, 650, 950, 800);
break;
case 3:
image(ledcg, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant la led côté gauche", 50, 650, 950, 800);
break;
case 4:
image(ledmg, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant la led milieu gauche", 50, 650, 950, 800);
break;
case 5:
image(ledmd, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant la led milieu droit", 50, 650, 950, 800);
break;
case 6:
image(ledcd, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant la led côté droit", 50, 650, 950, 800);
break;
case 7:
image(ledcg, 0, 0, 1000, 600);
text("Il y a un court-circuit entre les bornes de la led côté gauche", 50, 650, 950, 800);
break;
case 8:
image(ledmg, 0, 0, 1000, 600);
text("Il y a un court-circuit entre les bornes de la led milieu gauche", 50, 650, 950, 800);
break;
case 9:
image(ledmd, 0, 0, 1000, 600);
text("Il y a un court-circuit entre les bornes de la led milieu droit", 50, 650, 950, 800);
break;
case 10:
image(ledcd, 0, 0, 1000, 600);
text("Il y a un court-circuit entre les bornes de la led côté droit", 50, 650, 950, 800);
break;
case 11:
image(CNYcg, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant la led du capteur côté gauche", 50, 650, 950, 800);
break;
case 12:
image(CNYmg, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant la led du capteur milieu gauche", 50, 650, 950, 800);
break;
case 13:
image(CNYmd, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant la led du capteur milieu droit", 50, 650, 950, 800);
break;
case 14:
image(CNYcd, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant la led du capteur côté droit", 50, 650, 950, 800);
break;
case 15:
image(CNYcg, 0, 0, 1000, 600);
text("Il y a un court-circuit entre les bornes de la led du capteur côté gauche", 50, 650, 950, 800);
break;
case 16:
image(CNYmg, 0, 0, 1000, 600);
text("Il y a un court-circuit entre les bornes de la led du capteur milieu gauche", 50, 650, 950, 800);
break;
case 17:
image(CNYmd, 0, 0, 1000, 600);
text("Il y a un court-circuit entre les bornes de la led du capteur milieu droit ", 50, 650, 950, 800);
break;
case 18:
image(CNYcd, 0, 0, 1000, 600);
text("Il y a un court-circuit entre les bornes de la led du capteur côté droit", 50, 650, 950, 800);
break;
case 19:
image(captcg, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant le capteur côté gauche", 50, 650, 950, 800);
break;
case 20:
image(captmg, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant le capteur milieu gauche", 50, 650, 950, 800);
break;
case 21:
image(captmd, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant le capteur milieu droit", 50, 650, 950, 800);
break;
case 22:
image(captcd, 0, 0, 1000, 600);
text("Il y a une piste coupée ou un composant hors-service sur la piste alimentant le capteur côté droit", 50, 650, 950, 800);
break;
case 23:
text("posez la carte sur une surface claire puis appuyez sur une touche", 50, 650, 950, 800);
break;
case 24:
text("exposez la carte à une lumiere forte puis appuyez sur une touche", 50, 650, 950, 800);
break;
case 25:
text("Test terminé\n appuyer sur une touche pour recommencer", 50, 650, 950, 800);
fin=true;
break;
default:
break;
}
}
void draw() {
//partie initialisation du port série
if (Init==true)
{
char nom[]=new char[i];
for (char j=0; j<i; j++) nom[j]=data[j];//stockage des caractères choisi par l'utilisateur dans un tableau
String name = new String(nom);//création d'une chaîne de caractère à partir du tableau
myPort = new Serial(this, name, 9600);//initialisation du port série
myPort.bufferUntil('\n');
background(0);
Init=false;
fct=true;
image(board, 0, 0, 1000, 600);
}
if (fct==true) fonctionnement();
}
void keyPressed() {
//partie utilisée seulement en mode selection du port série
if (Sel==true) {
if ((key==ENTER)||(key==RETURN)) //validation du choix du port série
{
Init=true;
Sel=false;
} else
{
if (key==BACKSPACE) //efface un caractère
{
data[i]=0;
fill(100);
noStroke();
rect(10+40*(i-1), 168, 32, 140);
fill(255);
i--;
} else {
data[i]=key;
text(data[i], 10+40*i, 200);
i++;
}
}
}
//partie utilisée seulement en fonctionnement normal
if (fct==true)
{
myPort.write(0x0d); //envoie confirmation à Arduino si on appui sur une touche
if (fin==true) //si le test est fini, efface l'écran avant de recommencer
{
image(board, 0, 0, 1000, 600);
fin=false;
}
}
}
void serialEvent(Serial myPort)
{
fill(0);
rect(0, 0, 200, 100);
fill(255);
byte l[]=myPort.readBytesUntil('\n');
lecture=(l[0]-48)*10+(l[1]-48); //conversion de la chaine de caractère envoyé en un nombre de 2 chiffre
text(lecture, 50, 50);
}