Bonjour,

Avant tout il faut que je vous explique quel est le but de mon programme : je souhaite automatiser les commandes d'une table motorisé pour un écran tactile.

Nom : 191ee38db6e8508c86e0b9a50313c5f3.jpeg
Affichages : 912
Taille : 6,0 Ko

La table se commande avec 4 boutons : 1 - monte le pied, 2 - descend le pied, 3 - incline le plateau (sens horaire) et 4 - incline le plateau (sens anti-horaire)
Ces quatres boutons sont situées sur la partie amovible de la table (Délire de concepteur ?...) ce qui n'est pas très pratique, ces donc pour cela que je souhaite l'automatisé en commandant le système avec une télécommande IR tout en laissant un accès au boutons de commandes.
J'entend par automatiser : modifier le positionnement de la table dans un mode préenregistré, enregistrer de nouveau positionnent ou tout simplement actionner les commandes directs.

Après avoir fais l'étude du circuit de commande de la table, j'ai isolé quatres files qui me permettent d'actionner les quatres commandes citées ci-dessus.
J'ai donc écrit un programme (ci-dessous) permettant d'activer une sortie numérique durant un temps donné puis une autre sortie durant un temps donnés différent en fonction du positionnement souhaité. Ces signaux seront ensuite envoyé sur un circuit composé de mosfet et de relais qui permettent de lier deux des quatres fils pour activer l'une des commandes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 
#include <IRremote.h>
 
#define TEMPS_UP_DOWN 18500
#define TEMPS_VERT_HORIZ 12200
#define TEMPS_TEMPO 1000
 
int pinTURNH = 2, pinTURNAH = 4;          //TURNH : Rotation du plateau sens horaire - TURNAH : Rotation du plateau sens anti-horaire
int pinUP = 7, pinDOWN = 8;   //UP : Monte le plateau - DOWN : descend le plateau
 
 
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
 
/* Les modes
Mode 1 : Table -> Présentation
Mode 2 : Présentation -> Table
 
 
Les Actions
Action 1 : UP
Action 2 : DOWN
Action 3 : TURNH
Action 4 : TURNAH
*/
 
 
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Initialise le recepteur IR
 
  pinMode(pinTURNH, OUTPUT); 
  pinMode(pinTURNAH, OUTPUT); 
  pinMode(pinUP, OUTPUT); 
  pinMode(pinDOWN, OUTPUT); 
 
  digitalWrite(pinTURNH, LOW);
  digitalWrite(pinTURNAH, LOW);
  digitalWrite(pinUP, LOW);
  digitalWrite(pinDOWN, LOW);
}
 
void loop() {
 
 
 
     Serial.println("Dans quelle position souhaitez-vous regler la table ? :");
      Serial.println("- Mode 1 : Mode presentation");
      Serial.println("- Mode 2 : Mode Table");
     digitalWrite(pinTURNH, LOW);digitalWrite(pinTURNAH, LOW);digitalWrite(pinUP, LOW);digitalWrite(pinDOWN, LOW);
 
 
   if (irrecv.decode(&results))
  {
    Serial.println(results.value);   //affiche la valeur envoyer par la telecommande
    irrecv.resume();   // Recoit la valeur suivante
  }
 
 
   if (results.value  == 16724175)     //16724175 est la valeur entière reçu par la console lors de l'appui sur le bouton 1 de la télécommande
   { // Mode 1 : Table -> Présentation
        digitalWrite(pinUP, HIGH);
        delay(TEMPS_UP_DOWN);
        digitalWrite(pinUP, LOW);
        delay(TEMPS_TEMPO);
        digitalWrite(pinTURNH, HIGH);
        delay(TEMPS_VERT_HORIZ);
        digitalWrite(pinTURNH, LOW);
        Serial.println("Position Presentation");
        results.value =0;
   }
 
 
       if (results.value == 16718055)
    { // Mode 2 : Présentation -> Table
          digitalWrite(pinTURNAH, HIGH);
          delay(TEMPS_VERT_HORIZ);
          digitalWrite(pinTURNAH, LOW);
          delay(TEMPS_TEMPO);
          digitalWrite(pinDOWN, HIGH);
          delay(TEMPS_UP_DOWN);
          digitalWrite(pinDOWN, LOW);
          Serial.println("Position Table");
          results.value =0;
     }
 
 
 
////////////////////////////commandes direct/////////////////////////////////////////
 
    if (results.value == 16712445){
        digitalWrite(pinUP, HIGH);
        delay(TEMPS_UP_DOWN);
      results.value =0;}
 
   if (results.value == 16720605){
        digitalWrite(pinDOWN, HIGH);
        delay(TEMPS_UP_DOWN);
      results.value =0;}
 
    if (results.value == 16754775){
        digitalWrite(pinTURNH, HIGH);
        delay(TEMPS_VERT_HORIZ);
       results.value =0;}
 
    if (results.value == 16769055){
       digitalWrite(pinTURNAH, HIGH);
       delay(TEMPS_VERT_HORIZ);
      results.value =0;}
 
 
   delay(500);
}

Mon problème est le suivant, j'aimerai stopper l’exécution d'un mode ou d'une commande a tout moment par l'appui sur un bouton de la télécommande.
Dit autrement, comment faire en sorte que la prise en compte des commandes transmisent par la télécommande se fasse a tout moment dans le programme ?

j'ai essayé avec la commande millis() pour remplacer les tempo ou encore l'utilisation de la bibliothèque #include <TimerOne.h> mais sans jamais aboutir à un semblant de résultat.

Merci d'avance à ceux qui pourront m'apporter leur aide.