Bonjour,
Je suis un débutant sur Arduino.
Je suis en train de fabriquer un ascenseur de plafond pour mon rétroprojecteur Sony.
Mon souhait est :
- appuyer sur un bouton (bas), celui ci actionne le relais in1 pour Arduino qui commande la descente de mon moteur (temps de descente 10 secondes), et en même temps mettre en route mon rétro par une diode émettrice infrarouge (sur Arduino).
- appuyer sur un bouton (haut) ou appuyer sur on/off de la télécommande du rétro (par l'intermédiaire de la diode de réception Arduino) , ceux-ci actionne l'arrêt du rétro puis, après 2 minutes (temps de refroidissement de la lampe) le relais in2 pour Ardruino qui commande la montée de mon moteur (temps de montée 10 secondes).
En faisant un mix de plusieurs code, le resultat est presque top.
Les soucis sont :
- ma diode émettrice émet bien un signal infrarouge mais pas de réaction du rétro alors que quand j'appui sur la télécommande du rétro, l'ascenseur remonte nikel, donc le code décimal doit être bon.
- l'autre soucis est qu'après chaque étapes, je suis obligé de faire un reset pour pouvoir faire une autre étape. (je l'ai intégré au programme et ça fonctionne mais pas très pro quoi).
Si dès fois vous pouvez m'aider, voila mon code ci-dessous.
Cordialement,
Bachol

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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <IRremote.h>
#define RECV_PIN 12
#define ON   0
#define OFF  1
 
int IN1 = 9;   // relais de montée
int IN2 = 10;  // relais de descente
int HAUT = 4;  // bouton poussoir haut
int BAS = 6;   // bouton poussoir bas
 
 
int codeType;
int codeLen;
// pour recevoir sur l'ir PIN 12
IRrecv irrecv(RECV_PIN);
decode_results results;
 
// pour envoyer sur l'ir PIN 3
IRsend irsend;
 
 
 
void setup()
{
{
  relay_init(); //initialize the relay
}
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  pinMode (HAUT, INPUT_PULLUP);   // activation du PULLUP interne pin 4
  pinMode (BAS, INPUT_PULLUP);    // activation du PULLUP interne pin 6
 
}
 
void loop() {
 receiveCode();
 if (digitalRead(BAS)== ON) {
    miseon();
                            }
 
if (digitalRead(HAUT)== ON || (results.value==21546)) {
    miseoff();
                            }
 
 
}
 
void receiveCode(){
 
  // catch IR
  if (irrecv.decode(&results))
    {
      //recupere le type de codage, la logueur
      int codeType = results.decode_type;
      int codeLen = results.bits;
    Serial.println("-------------------");
    Serial.print("ValueHex ");   
    Serial.println(String(results.value, HEX));
    Serial.print("ValueDec ");  
    Serial.println(results.value);
    Serial.print("CodeLen ");  
    Serial.println(codeLen);
     irrecv.resume(); // Receive the next value
 
    // De quel type est le signal IR ?
   if (codeType == UNKNOWN) {
      Serial.println("Unknow Type");
    }
    else {
      if (codeType == NEC) {
         Serial.println("Type NEC ");
      } 
      else if (codeType == SONY) {
        Serial.println("Type SONY ");
      } 
      else if (codeType == PANASONIC) {
        Serial.println("Type PANASONIC ");
      }
      else if (codeType == JVC) {
        Serial.println("Type JVC ");
      } 
      else if (codeType == SAMSUNG) {
        Serial.println("Type SAMSUNG ");
      } 
      else {
        Serial.print("Unexpected codeType ");
        Serial.print(codeType, DEC);
        Serial.println("");
      }
    }
  }  
}
void sendCode (long codeValue , int codeType , int codeLen){
  if (codeType == NEC) {
      irsend.sendNEC(codeValue, codeLen);
      Serial.print("Sent NEC ");
      Serial.println(codeValue, HEX);
  } 
  else if (codeType == SONY) {
    irsend.sendSony(codeValue, codeLen);
    Serial.print("Sent Sony ");
    Serial.println(codeValue, HEX);
  } 
  else if (codeType == PANASONIC) {
    irsend.sendPanasonic(codeValue, codeLen);
    Serial.print("Sent Panasonic");
    Serial.println(codeValue, HEX);
  }
  else if (codeType == JVC) {
    irsend.sendJVC(codeValue, codeLen, false);
    Serial.print("Sent JVC");
    Serial.println(codeValue, HEX);
  }
  else if (codeType == SAMSUNG) {
    irsend.sendSAMSUNG(codeValue, codeLen);
    Serial.print("Sent SANSUNG");
    Serial.println(codeValue, HEX);
  }
}
void miseon(){
 
sendCode (21546,SONY,32);      // active le retroprojecteur
  delay(40);
  relay_SetStatus(OFF, ON);      // active le relais descend et desactive le relais monte (pin 9)
  delay(10000);                   // descend l'acensceur
  relay_SetStatus(OFF, OFF);     // desactive les relais monte et descend (pin 9 et 10)
  asm volatile ("  jmp 0");      // RESET
 
 
}
 
void miseoff(){
 
  sendCode (21546,SONY,32);      // desactive le retroprojecteur
  delay(40);
  delay(1000);
  sendCode (21546,SONY,32);      // desactive le retroprojecteur validation
  delay(40);
  delay(120000);
  relay_SetStatus(ON, OFF);      // active le relais monte et desactive le relais descend (pin 10)
  delay(10000);
  relay_SetStatus(OFF, OFF);     // desactive les relais monte et descend (pin 9 et 10)
  asm volatile ("  jmp 0");      // RESET
}
void relay_init(void)            //initialize the relay
{
//set all the relays OUTPUT
  pinMode(IN1, OUTPUT);          //relais monte
  pinMode(IN2, OUTPUT);          // relais descend
  relay_SetStatus(OFF, OFF);     //turn off all the relay
}
//set the status of relays
void relay_SetStatus( unsigned char status_1,  unsigned char status_2)
{
  digitalWrite(IN1, status_1);
  digitalWrite(IN2, status_2);
}