Volets somfy - telecommande rts

avec plaisir

:grinning:ce sont etimou et ses aidants qu'il faut féliciter :+1:

pour l'appairage

/*selon le travail d'Etimou
  SomfyRTS myRTS(emetteur, TSR_RFM69); //Tx pin number, transmitter type
  //pin number : pin connected to the transmitter DATA pin or to the DIO2 pin on RFM69
  //transmitter type can be TSR_RFM69 or TSR_AM (for a generic AM 433.42MHZ transmitter)
*/
#include <SomfyRTS.h>
#define emetteur            2
#define BP_select_volet     3
#define BP_montee           4
#define BP_descente         5
#define BP_stop             6
SomfyRTS myRTS(emetteur, TSR_RFM69);
int nb_volets             = 7;
int volet_choisi          = 0;
int compteur_flashs_leds  = 0;
//             0, 1, 2, 3, 4,  5,  6, 7, 8
// 10, 11, 12, 13 utilisés pour la com avec l'emetteur
int led [] = {19, 14, 16, 9, 8, 17, 15, 7};
unsigned long periode_led = 1000;//ici on regle la frequence de clignotement
unsigned long timer_led   = millis() + periode_led;
void setup() {
  Serial.begin(115200);
  for (int f = 3 ; f < 7; f++) {
    pinMode(f, INPUT_PULLUP);
  }
  for (int f = 1; f <= 7; f++) {
    pinMode(led [f], OUTPUT);
    digitalWrite(led [f], LOW);
  }
  //myRTS.configRTS(myEEPROM_address, myRTS_address); //uncomment and change values only if you don't want to use default configuration
  myRTS.setHighPower(true); //have to call it after initialize for RFM69HW
  Serial.println("pour appairer votre telecommande ");
  Serial.println("selectionnez un volet avec BP_SELECT");
  Serial.println("puis validez la selection avec BP_STOP");
  Serial.println("puis, appuyer sur le touche PROG de la télécommande Somfy ");
  Serial.println(" à l'invite du moniteur ");
  Serial.println("tapez une <touche + enter> ");
  Serial.println("dans la zone entree de texte du moniteur ");
  Serial.println("et laissez faire le programme ");
}

void loop()
{
  if (!digitalRead(BP_select_volet))
  {
    while (!digitalRead(BP_select_volet)) {
      delay(200);
    }
    digitalWrite(led[volet_choisi], LOW);
    if (volet_choisi == 0) {
      compteur_flashs_leds = 10;
      timer_leds();
    }
    compteur_flashs_leds = 0;
    volet_choisi++; digitalWrite(led[volet_choisi], HIGH);
    if (volet_choisi == (nb_volets + 1)) {
      volet_choisi = 0;
    }
    //Serial.print("volet choisi : "); Serial.println(volet_choisi);
  }
  timer_leds();
  if (!digitalRead(BP_stop))
  {
    Serial.println("appairage demande...");
    compteur_flashs_leds = 10;  timer_leds();        //extinction des leds
    while (!Serial.available()) {;} //attendre tant que rien ne vienne du moniteur
    Serial.print("appairage en cours pour volet ... ");             //caractere reçu
    Serial.print(volet_choisi);
    myRTS.sendSomfy(volet_choisi, PROG);               //envoi d'une demande d'appairage
    Serial.println("........termine");                         //terminé
    compteur_flashs_leds = 0;
    delay(1000);//delay pour anti pianotage
  }
}
void timer_leds()
{
  if (compteur_flashs_leds < 10)
  {
    if (millis() > timer_led)
    {
      compteur_flashs_leds++;
      timer_led = millis() + periode_led;
 
      if (volet_choisi == 0)
      {
        for (int c = 1; c <= nb_volets; c++)
        {
          digitalWrite(led[c], !digitalRead(led[c]));
        }
      }
      else
      {
        digitalWrite(led[volet_choisi], !digitalRead(led[volet_choisi]));
      }
      //Serial.print("volet  "); Serial.print(volet_choisi); Serial.print("  ");
      //Serial.print("led "); Serial.print(led[volet_choisi]); Serial.print(" ");
      //Serial.println(digitalRead(led[volet_choisi]));
    }
  }
  else
  {
    for (int c = 1; c <= nb_volets; c++)
    {
      digitalWrite(led[c], LOW);
    }
  }
}

pour commander les volets

/*selon le travail d'Etimou
  SomfyRTS myRTS(emetteur, TSR_RFM69); //Tx pin number, transmitter type
  //pin number : pin connected to the transmitter DATA pin or to the DIO2 pin on RFM69
  //transmitter type can be TSR_RFM69 or TSR_AM (for a generic AM 433.42MHZ transmitter)
*/
#include <SomfyRTS.h>
#define emetteur            2
#define BP_select_volet     3
#define BP_montee           4
#define BP_descente         5
#define BP_stop             6
SomfyRTS myRTS(emetteur, TSR_RFM69);
int nb_volets             = 7;
int volet_choisi          = 0;
int compteur_flashs_leds  = 0;
//             0, 1, 2, 3, 4,  5,  6, 7, 8
// 10, 11, 12, 13 utilisés pour la com avec l'emetteur
int led [] = {19,14,16, 9, 8, 17, 15, 7};
unsigned long periode_led = 1000;//ici on regle la frequence de clignotement
unsigned long timer_led   = millis() + periode_led;
void setup() {
  Serial.begin(115200);
  for (int f = 3 ;f <7; f++) {
    pinMode(f, INPUT_PULLUP);
  }
  for (int f = 1; f <= 7; f++) {
    pinMode(led [f], OUTPUT);
    digitalWrite(led [f], LOW);
  }
  //myRTS.configRTS(myEEPROM_address, myRTS_address); //uncomment and change values only if you don't want to use default configuration
  myRTS.setHighPower(true); //have to call it after initialize for RFM69HW
}

void loop()
{
  if (!digitalRead(BP_select_volet))
  {
    while (!digitalRead(BP_select_volet)) {
      delay(200);
    }
    digitalWrite(led[volet_choisi], LOW); 
    if(volet_choisi==0){compteur_flashs_leds=10;timer_leds();}
    compteur_flashs_leds = 0;
    volet_choisi++; digitalWrite(led[volet_choisi], HIGH);
    if (volet_choisi == (nb_volets + 1)) {
      volet_choisi = 0;
    }
    Serial.print("volet choisi : "); Serial.println(volet_choisi);
  }
  timer_leds();
  if (!digitalRead(BP_montee))  {Serial.println("montee");
    compteur_flashs_leds = 10;  timer_leds();
    myRTS.sendSomfy(volet_choisi, UP);
    compteur_flashs_leds = 0;
    delay(1000);//delay pour anti pianotage
  }
  if (!digitalRead(BP_descente)) {Serial.println("descente");
    compteur_flashs_leds = 10;  timer_leds();
    myRTS.sendSomfy(volet_choisi, DOWN);
    compteur_flashs_leds = 0;
    delay(1000);//delay pour anti pianotage
  }
  if (!digitalRead(BP_stop))    {Serial.println("stop");
    compteur_flashs_leds = 10;  timer_leds();
    myRTS.sendSomfy(volet_choisi, STOP);
    compteur_flashs_leds = 0;
    delay(1000);//delay pour anti pianotage
  }
}
void timer_leds()
{
  if (compteur_flashs_leds < 10)
  {
    if (millis() > timer_led)
    {
      compteur_flashs_leds++;
      timer_led = millis() + periode_led;
      if (volet_choisi == 0)
      {
        for (int c = 1; c <= nb_volets; c++)
        {
          digitalWrite(led[c], !digitalRead(led[c]));
        }
      }
      else
      {
        digitalWrite(led[volet_choisi], !digitalRead(led[volet_choisi]));
      }
      Serial.print("volet  "); Serial.print(volet_choisi); Serial.print("  ");
      Serial.print("led "); Serial.print(led[volet_choisi]); Serial.print(" ");
      Serial.println(digitalRead(led[volet_choisi]));
    }
  }
  else
  {
    for (int c = 1; c <= nb_volets; c++)
        {
          digitalWrite(led[c], LOW);
        }
  }
}