avec plaisir
ce sont etimou et ses aidants qu'il faut féliciter ![]()
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);
}
}
}