Annexe B :
Algorithme et programme
88
Annexe B : Algorithme et programme Le programme global
:
Algorithme robot ;
Var C : String; Commande : String ='manu' ;
Début
Si (il y a réception) Alors
Commande 4- réception() ;
FinSi
Au cas où (Commande) vau
`manu' : marcher_manu() ;
`auto' : marcher_auto() ;
Fin de cas
Fin
Fin algorithme
La fonction marcher_manu() :
Procédure marcher_manu()
Const en1: Byte=34; en2: Byte=35; in1: Byte=2; in2: Byte=3; in3:
Byte=4; in4: Byte=5; pmp:
Byte=27;
Var Ordre : String; v_if: int ; v_thr: int ; niveau :int ;
Début :
Si (il y a réception) Alors
Ordre 4- réception();
FinSi
Au cas où (Ordre) vau
`Avant' :
Si (Vérifier_obstacle() = 0) Alors
faire(`av') ;
Sinon
faire(`st') ;
FinSi
`Arriérer' :
faire(`ar') ;
`Droit' :
Si (Vérifier_obstacle() = 0) Alors
faire(`dr') ;
Sinon
faire(`st') ;
FinSi
`Gauche' :
Si (Vérifier_obstacle() = 0) Alors
faire(`gc') ;
Sinon
faire(`st') ;
89
FinSi
`Pompe' :
faire(`pmp') ;
`Stop' :
faire(`st') ;
`maj_if :
v_if= Mise_à_jour(`cpif') ;
`maj_thr :
v_thr= Mise_à_jour(`cpthr') ;
`niv' :
niveau= Mise_à_jour(`niv') ;
Fin de cas
Fin
La fonction marcher_auto() :
Procédure marcher_auto()
Var Coté : String;
Début
Si (Vérifier_flamme() = `rien') Alors
Si (Vérifier_obstacle() = 0) Alors
faire (`av') ;
Sinon
Repeter
faire (`dr') ;
Tant que (Vérifier_obstacle() = 1)
faire (`st') ;
FinSi
Sinon
Tant que (Vérifier_flamme() ? `flamme') Faire
Si (Vérifier_obstacle() = 0) Alors
Coté ? Vérifier_flamme() ;
Positionner(Coté) ;
faire (`av') ;
attendre (1000ms) ;
faire (`st') ;
Sinon
Repeter
faire (`dr') ;
Tant que (Vérifier_obstacle() = 1)
faire (`av') ;
attendre(2000ms) ;
faire (`st') ;
FinSi
Tant que (Vérifier_flamme() = `flamme') Faire
faire (`pmp')
90
FinSi
Fin
La fonction Vérifier_obstacle() :
int Fonction Vérifier_obstacle()
Const trig_ob: Byte=22; echo_ob: Byte=23; trig_fr: Byte=24;
echo_fr: Byte=25;dis_nrm_ob: Byte
=24; dis_nrm_fr: Byte =18;
Var dis_ob :long ; temps_ob: long; temps_fr: long; dis_fr :
long;sig_fvo :int ;
Byte rep;
Début
définie trig_ob comme sortie ;
ecrire_numérique(trig_ob, 0) ;
définie echo_ob comme entré ;
définie trig_fr comme sortie ;
ecrire_numérique(trig_fr, 0) ;
définie echo_fr comme entré ;
attender (2us) ;
ecrire_numérique(trig_ob, 1) ;
attender (10us) ;
ecrire_numérique(trig_ob, 0) ;
dis_ob 4- temps de reception en echo_ob ;
attender (2us) ;
ecrire_numérique(trig_fr, 1) ;
attender (10us) ;
ecrire_numérique(trig_fr, 0) ;
dis_fr 4- temps de reception en echo_ob ;
Si ((dis_ob < dis_nrm_ob) ou (dis_fr > dis_nrm_fr))
Alors
sig_fvo=1 ;
Sinon
sig_fvo=0 ;
FinSi
Retourn(sig_fvo) ;
Fin
La fonction Vérifier_flamme() :
Fonction Vérifier_flamme()
Const cif_av :Byte= 0; cif_dr :Byte=1 ; cif_ar :Byte=2 ;
cif_gc :Byte=3 ; cthr:Byte=5 ; val_nrm_if:
int =Mise_à_jour("cpif")+10; val_nrm_thr: int
=Mise_à_jour("cpthr")+20;
Var val_av:int; val_dr:int; val_ar:int; val_gc:int;
val_thr:int;val_max:int;
Var sig_fvf :String;
Début
val_av 4- lire cif_av; val_dr 4- lire cif_dr; val_ar 4- lire
cif_ar; val_gc 4- lire cif_gc;
91
val_pr 4 lire cif_pr;
val_thr 4 lire cif_thr;
val_max 4 max(val_av, val_dr) ;
val_max 4 max(val_max, val_ar) ;
val_max 4 max(val_max, val_gc) ;
val_fnct_if =Mise_à_jour(`cpif') ;
Si( (val_av > val_nrm_if) et (val_av >= val_max)) Alors
Si (val_dr > val_gc) Alors
Sig_fvf = `av_dr' ;
Sinon Si (val_gc > val_dr) Alors
Sig_fvf = `av_gc' ;
Sinon
Sig_fvf= `av' ;
FinSi
Sinon Si ((val_ar > val_nrm_if) et (val_ar >= val_max))
Alors
Si (val_dr > val_gc) Alors
Sig_fvf = `ar_dr' ;
Sinon Si (val_gc > val_dr) Alors
Sig_fvf = `ar_gc' ;
Sinon
Sig_fvf= `ar' ;
FinSi
Sinon Si (val_dr > val_nrm_if) et (val_dr >= val_max))
Alors
Sig_fvf= `dr' ;
Sinon Si (val_gc > val_nrm_if) et (val_gc >= val_max))
Alors
Sig_fvf= `gc' ;
Sinon
Sig_fvf = `rien'
FinSi
Si (val_thr > val_nrm_thr) Alors
Si (Sig_fvf ? rien) Alors
Sig_fvf ='flamme' ;
FinSi FinSi
Fin
La fonction Positionner() :
Procédure Positionner (String direct)
Const cif_av :Byte= 0; cif_pr :Byte=4; cif_ar :Byte=2;
Var val_pr:int; val_av:int; val_ar:int;
Début
val pr 4 lire cif pr ;
Au cas où (direct) vau
`av_dr' :
92
faire(`dr') ;
attendre(20ms) ;
faire(`st') ;
Tant que (val_pr < lire cif_pr) Faire
val_pr F lire cif_pr ;
faire(`dr') ;
attendre(20ms) ;
faire(`st') ;
faire(`gc') ;
attendre(20ms) ;
faire(`st') ; `av_gc' :
faire(`gc') ;
attendre(20ms) ;
faire(`st') ;
Tant que (val_pr < lire cif_pr) Faire
val_pr F lire cif_pr
faire(`gc') ;
attendre(20ms) ;
faire(`st') ;
faire(`dr') ;
attendre(20ms) ;
faire(`st') ;
`ar_dr' :
val_ar F lire cif_ar -20 ;
Tant que (lire cif_av < val_ar) Faire
faire(`dr') ;
faire(`st') ;
Tant que (val_pr < lire cif_pr) Faire
val_pr F lire cif_pr ;
faire(`dr') ;
attendre(20ms) ;
faire(`st') ;
faire(`gc') ;
attendre(20ms) ;
faire(`st') ;
`ar_gc' :
val_ar F lire cif_ar -20 ;
Tant que (lire av < val_ar) Faire
faire(`gc') ;
faire(`st') ;
Tant que (val_pr < lire cif_pr) Faire
val_pr F lire cif_pr ;
faire(`gc') ;
attendre(20ms) ;
faire(`st') ;
93
faire(`dr') ;
attendre(20ms) ; faire(`st') ;
`av' :
faire(`dr') ;
attendre(20ms) ;
faire(`st') ;
Si (val_pr < lire cif_pr) Alors
Tant que (val_pr < lire cif_pr) Faire
val_pr 4 lire cif_pr ;
faire(`dr') ;
attendre(20ms) ;
faire(`st') ;
faire(`gc') ;
attendre(20ms) ;
faire(`st') ;
Sinon Si (val_pr > lire cif_pr) Alors
faire(`gc') ;
attendre(40ms) ;
faire(`st') ;
Tant que (val_pr < lire cif_pr) Faire
val_pr 4 lire cif_pr ;
faire(`gc') ;
attendre(20ms) ;
faire(`st') ;
faire(`dr') ;
attendre(20ms) ;
faire(`st') ;
FinSi
`ar' :
Val_ar 4 lire cif_ar-20
Tant que (lire av < Val_ar) Faire
faire(`dr') ;
faire(`st') ;
Tant que (val_pr < lire cif_pr) Faire
val_pr 4 lire cif_pr ;
faire(`dr') ;
attendre(20ms) ;
faire(`st') ;
faire(`gc') ;
attendre(20ms) ;
faire(`st') ;
Fin de cas
Fin
La fonction faire() :
94
Procédure faire(String action)
Const en1: Byte=34; en2: Byte=35; in1: Byte=2; in2: Byte=3; in3:
Byte=4; in4: Byte=5; pmp:
Byte=27; led_rouge:Byte=42; ig: int=200; id:int
=(((7.0358*ig)-628.21))/4.617; istp: int=90;
Var i:int;act_prcd: String;
Début
définie en1 comme sortie ; définie en2 comme
sortie ; définie in1 comme sortie ; définie in2 comme sortie ;
définie in3 comme sortie ; définie in4 comme sortie ;
définie pmp comme sortie ; ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ; ecrire_numérique(in1, 0) ;
ecrire_numérique(in2, 0) ; ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ; ecrire_numérique(pmp, 0) ; Au cas
où (action) vau
`av' :
ecrire_numérique(en1, 1) ; ecrire_numérique(en2,
1) ; ecrire_analogique(in1, id) ; ecrire_numérique(in2, 0) ;
ecrire_analogique(in3, ig) ; ecrire_numérique(in4, 0) ;
`ar' :
`dr' ;
`gc' :
act_prcd ? `av' ;
ecrire_numérique(en1, 1) ; ecrire_numérique(en2,
1) ; ecrire_numérique(in1, 0) ; ecrire_analogique(in2, id) ;
ecrire_numérique(in3, 0) ; ecrire_analogique(in4, ig) ;
act_prcd ? `ar' ;
ecrire_numérique(en1, 0) ; ecrire_numérique(en2,
1) ; ecrire_ numérique (in1, 0) ; ecrire_numérique(in2, 0) ;
ecrire_analogique(in3, ig) ; ecrire_numérique(in4, 0) ;
act_prcd ? `dr' ;
ecrire_numérique(en1, 1) ;
95
ecrire_numérique(en2, 0) ; ecrire_analogique(in1, id) ;
ecrire_numérique(in2, 0) ; ecrire_ numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
act_prcd ? `gv' ;
`st' :
i=50,
Si (act_prcd = `av') Alors Pour i de 50 à istp pas 1 faire
ecrire_numérique(en1, 1) ;
ecrire_numérique(en2, 1) ; ecrire_numérique(in1,
0) ; ecrire_analogique(in2, i) ; ecrire_numérique(in3, 0) ;
ecrire_analogique(in4, i) ; attendre (20us) ;
FinPour
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ; ecrire_numérique(in1,
0) ; ecrire_numérique(in2, 0) ; ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
Sinon Si (act_prcd = `ar') Alors
Pour i de 50 à istp pas 1 faire
ecrire_numérique(en1, 1) ; ecrire_numérique(en2,
1) ; ecrire_analogique(in1, i) ; ecrire_numérique(in2, 0) ;
ecrire_analogique(in3, i) ; ecrire_numérique(in4, 0) ; attendre (20us)
;
FinPour
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ; ecrire_numérique(in1,
0) ; ecrire_numérique(in2, 0) ; ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
Sinon Si (act_prcd = `dr') Alors
Pour i de 50 à istp pas 1 faire
ecrire_numérique(en1, 1) ; ecrire_numérique(en2,
0) ; ecrire_numérique (in1, 0) ; ecrire_numérique(in2, 0) ;
96
ecrire_ numérique(in3, 0) ; ecrire_analogique(in4, i) ;
attendre (20us) ;
FinPour
ecrire_numérique(en1, 0) ; ecrire_numérique(en2,
0) ; ecrire_numérique(in1, 0) ; ecrire_numérique(in2, 0) ;
ecrire_numérique(in3, 0) ; ecrire_numérique(in4, 0) ;
Sinon Si (act_prcd = `gc') Alors
Pour i de 50 à istp pas 1 faire
ecrire_numérique(en1, 0) ; ecrire_numérique(en2, 1) ; ecrire_
numérique(in1, 0) ; ecrire_analogique(in2, i) ;
ecrire_numérique(in3, 0) ; ecrire_numérique(in4, 0) attendre
(20us) ;
FinPour
ecrire_numérique(en1, 0) ; ecrire_numérique(en2,
0) ; ecrire_numérique(in1, 0) ; ecrire_numérique(in2, 0) ;
ecrire_numérique(in3, 0) ; ecrire_numérique(in4, 0) ;
Sinon
ecrire_numérique(en1, 0) ;
ecrire_numérique(en2, 0) ; ecrire_numérique(in1,
0) ; ecrire_numérique(in2, 0) ; ecrire_numérique(in3, 0) ;
ecrire_numérique(in4, 0) ;
FinSi
act_prcd 4- `st' ;
`pmp' :
Si (niveau < 120000)
ecrire_numérique(pmp, 1) ; attendre(2000ms) ;
ecrire_numérique(pmp, 0) ; niveau 4- niveau+1 ;
Sinon
ecrire_numérique(led_rouge, 1) ; attendre(500ms) ;
ecrire_numérique(led_rouge, 0) ;
FinSi
97
Fin de cas
Fin
La fonction Mise_à_jour() :
Fonction Mise_à_jour(String capteur)
Const cif_av :Byte= 0; cif_dr :Byte=1 ; cif_ar :Byte=2 ; cif_gc
:Byte=3 ; cthr:Byte=5 ; Var v_cp: int; v_cp1: int; v_av :int; v_ar :int; v_dr
:int; v_gc :int; val_fcnt_if:int=500; Début
Si (capteur ='cpif') Alors
v_av 4 lire cif_av ;
v_ar 4 lire cif_ar ;
v_dr 4 lire cif_dr ;
v_gc 4 lire cif_gc ;
v_cp1=max(v_av , v_ar) ;
v_cp1=max(v_cp, v_dr) ;
v_cp1=max(v_cp, v_gc) ;
Si (v_cp1 < val_fnct_if)
ecrire_numérique(led_rouge, 0) ;
v_cp 4 v_cp1;
Sinon
ecrire_numérique(led_rouge, 1) ;
v_cp 4 10000;
FinSi
Sinon Si (capteur ='cpthr') Alors
v_cp 4 lire cthr ;
Sinon Si (capteur ='niv') Alors
v_cp 4 0 ;
ecrire_numérique(led_rouge, 0) ;
FinSi
returen(v_cp)
Fin
La fonction réception() :
String Fonction réception()
Const in_rc :Byte=30 ;
Var rec : unsigned long ;val_rec :String ;
Début
Si (il y a réception) Alors
rec 4 lire in_rc ;
FinSi ;
Au cas où (rec) vau
2160004084:
val_rec 4 `manu' ;
2160014284:
val_rec 4 `auto' ;
98
2160032644:
val_rec 4 `Avant' ;
2160028564:
val_rec 4 `Arriérer' ;
2160008164:
val_rec 4 `Droit' ;
2160057124:
val_rec 4 `Gauche' ;
2160024484:
val_rec 4 `Pompe' ;
2160061204:
val_rec 4 `maj_if' ;
2160055084:
val_rec 4 `maj_thr' ;
2160046924:
val_rec 4 `niv';
2160016324 :
val_rec 4 `Stop';
4294967295 :
val_rec 4 val_rec ;
Fin de cas
Return(val_rec);
Fin
Le programme
#include <IRremote.h>
const byte in_rc = 30, trig_ob = 22, echo_ob = 23, trig_fr = 24,
echo_fr = 25, cif_av = 0, cif_dr = 1, cif_ar = 2,
cif_gc = 3, cthr = 5, cif_pr = 4, en1 = 34, en2 = 35, in1 = 2,
in2 = 3, in3 = 4, in4 = 5, pmp = 27, led_rouge = 42;
String Commande;
int niveau, val_nrm_if, val_nrm_thr;
IRrecv irrecv(in_rc);
decode_results results;
void setup()
{
irrecv.enableIRIn();
pinMode(led_rouge, OUTPUT);
pinMode(trig_ob, OUTPUT);
digitalWrite(trig_ob, 0);
pinMode(echo_ob, INPUT);
pinMode(trig_fr, OUTPUT);
digitalWrite(trig_fr, 0);
pinMode(echo_fr, INPUT);
pinMode(en1, OUTPUT);
pinMode(en2, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
99
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(pmp, OUTPUT);
pinMode(led_rouge, OUTPUT);
digitalWrite(en1, 0);
digitalWrite(en2, 0);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
digitalWrite(pmp, 0);
digitalWrite(led_rouge, 0);
niveau = Mise_a_jour("niv");
val_nrm_if = Mise_a_jour("cpif")+10;
val_nrm_thr = Mise_a_jour("cpthr")+20;
}
void loop()
{
if (irrecv.decode(&results))
{
Commande = reception();
irrecv.resume();
}
Commande = Commande;/* */
if (Commande == "auto")
{
marcher_auto();
}
else
{
marcher_manu();
}
}
String reception()
{
unsigned long rec;
String val_rec;
rec = results.value;
switch (rec)
{
case 2160004084 :
val_rec = "manu";
break;
case 2160014284:
val_rec = "auto";
break;
case 2160032644 :
100
val_rec = "Avant";
break;
case 2160028564 :
val_rec = "Arriérer";
break;
case 2160008164 :
val_rec = "Droit";
break;
case 2160057124 :
val_rec = "Gauche";
break;
case 2160024484 :
val_rec = "Pompe";
break;
case 2160061204 :
val_rec = "maj_if";
break;
case 2160055084 :
val_rec = "maj_thr";
break;
case 2160046924:
val_rec = "niv";
break;
case 2160016324:
val_rec = "Stop";
break;
case 4294967295:
val_rec = val_rec;
break;
}
return (val_rec);
}
void marcher_manu()
{
String Ordre;
if (irrecv.decode(&results))
{
Ordre = reception();
irrecv.resume();
}
if (Ordre == "Avant")
{
if (Verifier_obstacle() == 0)
{
faire("av");
}
else
101
{
faire("st");
}
}
else if (Ordre == "Arriérer")
{
faire("ar");
}
else if (Ordre == "Droit")
{
if (Verifier_obstacle() == 0)
{
faire("dr");
}
else
{
faire("st");
}
}
else if (Ordre == "Gauche")
{
if (Verifier_obstacle() == 0)
{
faire("gc");
}
else
{
faire("st");
}
}
else if (Ordre == "Stop")
{
faire("st");
}
else if (Ordre == "Pompe")
{
faire("pmp");
}
else if (Ordre == "maj_if")
{
val_nrm_if = Mise_a_jour("cpif");
}
else if (Ordre == "maj_thr")
{
val_nrm_thr = Mise_a_jour("cpthr");
}
else if (Ordre == "niv")
102
{
niveau = Mise_a_jour("niv");
}
}
void marcher_auto()
{
String Cote;
if (Verifier_flamme() == "rien")
{
if (Verifier_obstacle() == 0)
{
faire("av");
}
else
{
do
{
faire("dr");
} while (Verifier_obstacle() == 1);
faire("st");
}
}
else
{
while (Verifier_flamme() != "flamme")
{
if (Verifier_obstacle() == 0)
{
Cote = Verifier_flamme();
Positionner(Cote) ;
faire ("av") ;
delay(1000) ;
faire("st") ;
}
else
{
do
{
faire("dr");
} while (Verifier_obstacle() == 1);
faire ("av") ;
delay(2000) ;
faire("st") ;
}
}
while (Verifier_flamme() == "flamme")
{
103
faire("pmp");
}
}
}
int Verifier_obstacle()
{
const byte dis_nrm_ob = 24, dis_nrm_fr = 18;
long temps_ob, dis_ob, temps_fr, dis_fr;
int sig_fvo;
byte rep;
delayMicroseconds(2);
digitalWrite(trig_ob, 1);
delayMicroseconds(10);
digitalWrite(trig_ob, 0);
temps_ob = pulseIn(echo_ob, 1);
delayMicroseconds(2);
digitalWrite(trig_fr, 1);
delayMicroseconds(10);
digitalWrite(trig_fr, 0);
temps_fr = pulseIn(echo_fr, 1);
dis_ob = temps_ob * 340 / 20000;
dis_fr = temps_fr * 340 / 20000;
if ((dis_ob < dis_nrm_ob) || (dis_fr > dis_nrm_fr))
{
sig_fvo = 1;
}
else
{
sig_fvo = 0;
}
return (sig_fvo);
}
String Verifier_flamme()
{
int val av, val ar, val dr, val gc, val thr, val
max;
String sig_fvf;
val_av = analogRead(cif_av);
val_ar = analogRead(cif_ar);
val_dr = analogRead(cif_dr);
val_gc = analogRead(cif_gc);
val_thr = analogRead(cthr);
val_max = max(val_av, val_ar);
val_max = max(val_max, val_dr);
val_max = max(val_max, val_gc);
if ((val_av > val_nrm_if) && (val_av >=
val_max))
{
104
if (val_dr > val_gc)
{
sig_fvf = "av_dr";
}
else if (val_gc > val_dr)
{
sig_fvf = "av_gc";
}
else
{
sig_fvf = "av";
}
}
else if ((val_ar > val_nrm_if) && (val_ar >=
val_max))
{
if (val_dr > val_gc)
{
sig_fvf = "ar_dr";
}
else if (val_gc > val_dr)
{
sig_fvf = "ar_gc";
}
else
{
sig_fvf = "ar";
}
}
else if ((val_dr > val_nrm_if) && (val_dr >=
val_max))
{
sig_fvf = "dr";
}
else if ((val_gc > val_nrm_if) && (val_gc >=
val_max))
{
sig_fvf = "gc";
}
else
{
sig_fvf = "rien";
}
if ((val_thr > val_nrm_thr))
{
if (sig_fvf != "rien")
{
sig_fvf = "flamme";
}
}
105
return (sig_fvf);
}
void faire(String action)
{
const int ig = 200, id = ((7.0358 * ig) - 628.21) / 4.617,
istp = 90;
String act_prcd;
int i;
if (action == "av")
{
digitalWrite(en1, 1);
digitalWrite(en2, 1);
analogWrite(in1, id);
digitalWrite(in2, 0);
analogWrite(in3, ig);
digitalWrite(in4, 0);
act_prcd = "av";
}
else if (action == "ar")
{
digitalWrite(en1, 1);
digitalWrite(en2, 1);
digitalWrite(in1, 0);
analogWrite(in2, id);
digitalWrite(in3, 0);
analogWrite(in4, ig);
act_prcd = "ar";
}
else if (action == "dr")
{
digitalWrite(en1, 0);
digitalWrite(en2, 1);
digitalWrite(in1, 0);
digitalWrite(in2, 0);
analogWrite(in3, ig);
digitalWrite(in4, 0);
act_prcd = "dr";
}
else if (action == "gc")
{
digitalWrite(en1, 1);
digitalWrite(en2, 0);
analogWrite(in1, id);
digitalWrite(in2, 0);
digitalWrite(in3, 0);
digitalWrite(in4, 0);
act_prcd = "gc";
}
106
else if (action == "st") {
if (act_prcd == "av") {
for (i = 50; i <= istp; i++) {
digitalWrite(en1, 1); digitalWrite(en2, 1); digitalWrite(in1, 0);
analogWrite(in2, i); digitalWrite(in3, 0); analogWrite(in4, i);
delayMicroseconds(20); }
digitalWrite(en1, 0); digitalWrite(en2, 0); digitalWrite(in1, 0);
digitalWrite(in2, 0); digitalWrite(in3, 0); digitalWrite(in4, 0); }
else if (act_prcd == "ar") {
for (i = 50; i <= istp; i++) {
digitalWrite(en1, 1); digitalWrite(en2, 1); analogWrite(in1, i);
digitalWrite(in2, 0); analogWrite(in3, i); digitalWrite(in4, 0);
delayMicroseconds(50); }
digitalWrite(en1, 0); digitalWrite(en2, 0); digitalWrite(in1, 0);
digitalWrite(in2, 0); digitalWrite(in3, 0); digitalWrite(in4, 0); }
else if (act_prcd == "dr") {
for (i = 50; i <= istp; i++) {
digitalWrite(en1, 1); digitalWrite(en2, 1); digitalWrite(in1,
0);
107
digitalWrite(in2, 0); digitalWrite(in3, 0); analogWrite(in4,
i); delayMicroseconds(50);
}
digitalWrite(en1, 0); digitalWrite(en2, 0); digitalWrite(in1, 0);
digitalWrite(in2, 0); digitalWrite(in3, 0); digitalWrite(in4, 0); }
else if (act_prcd == "gc") {
for (i = 50; i <= istp; i++) {
digitalWrite(en1, 1); digitalWrite(en2, 1); digitalWrite(in1, 0);
analogWrite(in2, i); digitalWrite(in3, 0); digitalWrite(in4, 0);
delayMicroseconds(50); }
digitalWrite(en1, 0); digitalWrite(en2, 0); digitalWrite(in1, 0);
digitalWrite(in2, 0); digitalWrite(in3, 0); digitalWrite(in4, 0); }
else
{
digitalWrite(en1, 0); digitalWrite(en2, 0); digitalWrite(in1, 0);
digitalWrite(in2, 0); digitalWrite(in3, 0); digitalWrite(in4, 0);
digitalWrite(pmp, 0); }
act_prcd == "st"; }
else if (action == "pmp") {
if (niveau < 120000)
108
{
digitalWrite(pmp, 1);
delay(2000);
digitalWrite(pmp, 0);
delay(1000);
niveau++;
}
else
{
digitalWrite(led_rouge, 1);
delay(500);
digitalWrite(led_rouge, 0);
delay(500);
}
}
}
int Mise_a_jour(String capteur)
{
const int val_fcnt_if = 500;
int v_cp, v_cp1, v_av, v_ar, v_dr, v_gc;
if (capteur == "cpif")
{
v_av = analogRead(cif_av);
v_ar = analogRead(cif_ar);
v_dr = analogRead(cif_dr);
v_gc = analogRead(cif_gc);
v_cp1 = max(v_av, v_ar);
v_cp1 = max(v_cp, v_dr);
v_cp1 = max(v_cp, v_gc);
if (v_cp1 < val_fcnt_if)
{
v_cp = v_cp1;
digitalWrite(led_rouge, 0);
}
else
{
v_cp = 10000;
digitalWrite(led_rouge, 1);
}
}
else if (capteur == "cpthr")
{
v_cp = analogRead(cthr);
}
else if (capteur == "niv")
{
109
v_cp = 0;
digitalWrite(led_rouge, 0);
}
return (v_cp);
}
void Positionner(String direct)
{
int val_pr, val_av, val_ar;
val_pr = analogRead(cif_pr);
if (direct == "av_dr")
{
faire("dr");
delay(20);
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("dr");
delay(20);
faire("st");
}
faire("gc");
delay(20);
faire("st");
}
else if (direct == "av_gc")
{
faire("gc");
delay(20);
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("gc");
delay(20);
faire("st");
}
faire("dr");
delay(20);
faire("st");
}
else if (direct == "ar_dr")
{
val_ar = analogRead(cif_ar) - 20;
while (analogRead(cif_av < val_ar))
{
faire("dr");
110
}
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("dr");
delay(20);
faire("st");
}
faire("gc");
delay(20);
faire("st");
}
else if (direct == "ar_gc")
{
val_ar = analogRead(cif_ar) - 20;
while (analogRead(cif_av < val_ar))
{
faire("gc");
}
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("gc");
delay(20);
faire("st");
}
faire("dr");
delay(20);
faire("st");
}
else if (direct == "av")
{
faire("dr");
delay(20);
faire("st");
if (val_pr < analogRead(cif_pr))
{
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("dr");
delay(20);
faire("st");
}
faire("gc");
111
delay(20);
faire("st");
}
else if (val_pr > analogRead(cif_pr))
{
faire("gc");
delay(40);
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("gc");
delay(20);
faire("st");
}
faire("dr");
delay(20);
faire("st");
}
}
else if (direct == "ar")
{
val_ar = analogRead(cif_ar) - 20;
while (analogRead(cif_av < val_ar))
{
faire("dr");
}
faire("st");
while (val_pr < analogRead(cif_pr))
{
val_pr = analogRead(cif_pr);
faire("dr");
delay(20);
faire("st");
}
faire("gc");
delay(20);
faire("st");
}
}
|