IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Timers sur Nano


Sujet :

Arduino

  1. #21
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 031
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 031
    Par défaut
    Bonjour Jay M

    Il reste le display.clear(); dans la loop
    ok je l'ai retiré

    mais j'ai toujours un temps de "retard" d'env 1.3s et je ne vois pas du tout
    quel en est la cause
    Images attachées Images attachées  

  2. #22
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    essayez avec ce code en installant la bibliothèque OneButton (dispo dans la recherche de bibliothèques). ça simplifie la gestion des boutons

    lors de l'appui sur un bouton ça envoie 1 ou 2
    lors du double click ça envoie 11 ou 22
    lors d'un appui long ça envoie 1D au début puis 1F à la fin ou 2D et 2F pour l'autre bouton

    (je n'ai pas testé mais ça devrait compiler je pense)

    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
    #include <LoRa.h>
    #include <OneButton.h> //  http://www.mathertel.de/Arduino/OneButtonLibrary.aspx
     
    const byte pinBouton1 = 32;
    const byte pinBouton1 = 33;
     
    OneButton sw1(pinBouton1);
    OneButton sw2(pinBouton2);
     
    void loraMessage(const char * message) {
      LoRa.beginPacket();
      LoRa.println(message);
      LoRa.endPacket();
    }
     
    // CALLBACKS BOUTON 1
    void sw1Click()       {loraMessage("1");}
    void sw1DoubleClick() {loraMessage("11");}
    void sw1DebutLong()   {loraMessage("1D");}
    void sw1FinLong()     {loraMessage("1F");}
     
    // CALLBACKS BOUTON 2
    void sw2Click()       {loraMessage("2");}
    void sw2DoubleClick() {loraMessage("22");}
    void sw2DebutLong()   {loraMessage("2D");}
    void sw2FinLong()     {loraMessage("2F");}
     
    // CODE PRINCIPAL
     
    void setup() {
      pinMode(SW1, INPUT_PULLUP);
      pinMode(SW2, INPUT_PULLUP);
      Serial.begin(115200);
      while (!Serial) yield();
     
      Serial.println("LoRa Sender");
     
      if (!LoRa.begin(433E6)) { // 433E6 ou 915E6 suivant région
        Serial.println("Starting LoRa failed!");
        while (true) yield();
      }
     
      sw1.attachClick(sw1Click);
      sw1.attachDoubleClick(sw1DoubleClick);
      sw1.attachLongPressStart(sw1DebutLong);
      sw1.attachLongPressStop(sw1FinLong);
     
      sw2.attachClick(sw2Click);
      sw2.attachDoubleClick(sw2DoubleClick);
      sw2.attachLongPressStart(sw2DebutLong);
      sw2.attachLongPressStop(sw2FinLong);
    }
     
    void loop() {
      sw1.tick();
      sw2.tick();
    }

  3. #23
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 031
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 031
    Par défaut
    il bloque juste la compil sur çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pinMode(sw1, INPUT_PULLUP);
      pinMode(sw2, INPUT_PULLUP);
    cannot convert 'OneButton' to 'uint8_t {aka unsigned char}' for argument '1' to 'void pinMode(uint8_t, uint8_t)'


    EDIT :
    j'ai modifié en :

    pinMode(pinBouton1, INPUT_PULLUP);
    pinMode(pinBouton2, INPUT_PULLUP);

    et j'ai rajouté la prise en compte de
    pour permettre le démarrage de LoRa

    par contre comment afficher le message envoyé qvp ?

  4. #24
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    effectivement il fallait utiliser le numéro des pins (copier coller malheureux depuis votre code alors que j'avais changé le nom des variables)

    il me semble que SPI est inclus automatiquement, mais ça ne coûte rien de le rajouter


    pour la réception, un truc tout simple comme cela (tapé ici, donc à tester) devrait fonctionner

    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
    #include <SPI.h>
    #include <LoRa.h>
     
    void setup() {
      Serial.begin(115200);
      while (!Serial) yield();
     
      if (!LoRa.begin(433E6)) { // 433E6 ou 915E6 suivant région
        Serial.println("Starting LoRa failed!");
        while (true) yield();
      }
      Serial.println("LoRa Receiver");
    }
     
    void loop() {
      int packetSize = LoRa.parsePacket();
      if (packetSize) {
        Serial.print("Message: ");
        while (LoRa.available())Serial.write(LoRa.read());
        Serial.println();
      }
    }

  5. #25
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 031
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 031
    Par défaut
    il me semble que SPI est inclus automatiquement, mais ça ne coûte rien de le rajouter
    à minima, il lui faut impérativement lui donner le raccordement pour valider la prise en compte du LoRa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LoRa.setPins(nss, rst, dio0);
    j'ai donc maintenant codé la réception
    Il me reste donc à effectuer les actions liées à chaque bouton
    par ex :
    Bouton 1 :
    il est actif si = 1 ou 11 ou 12 ( j'ai du changer 1F ne passait pas )
    il est inactif si = autre

    donc en "recupérant" dans "val"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          int inChar = LoRa.read();
          inString += (char)inChar;
          val = inString.toInt();
    je dois pouvoir traiter les cas précités
    mais je n'arrive pas à voir "val" tandis que le terme "message" s'affiche avec la bonne valeur (?)

    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
     
    #include <SPI.h>
    #include <LoRa.h>
     
    /*
    Wemos Pins  **************************SX1278 Pins
    GND                                       GND
    3.3V**************************************VCC
    D8**GIO15*********************************NSS
    D7**GIO13*********************************MOSI
    D6**GIO12*********************************MISO
    D5**GIO14*********************************SCK
    D0**GIO16*********************************RST
    D2**GIO4**********************************DIO0
    */
     
    #define nss 15
    #define rst 16
    #define dio0 4
     
    const int LED1 = D1;   // indicator LED
    const int LEDBTN1 = D3;   // relay 1
     
    String inString = "";    // string to hold input
    int val = 0;
    int pValue = 0;
    int lValue = 0;
    int SyncWord = 0x22;
     
     
    void setup() {
      Serial.begin(115200);
      while (!Serial) yield();
     
      /////////////////////////////////////////////////////////////
      LoRa.setPins(nss, rst, dio0);
      if (!LoRa.begin(433E6)) { // 433E6 ou 915E6 suivant région
        Serial.println("Starting LoRa failed!");
        while (true) yield();
      }
       /*
       LoRa.setSpreadingFactor(12);           // ranges from 6-12,default 7 see API docs
       LoRa.setSignalBandwidth(62.5E3);           // for -139dB (page - 112)
       LoRa.setCodingRate4(8);                   // for -139dB (page - 112)
       */
       //LoRa.setSyncWord(SyncWord);           // ranges from 0-0xFF, default 0x12, see API docs
       Serial.println("LoRa Receiver");
       ///////////////////////////////////////////////////////////
       pinMode(LED1,OUTPUT);
       pinMode(LEDBTN1,OUTPUT);
     
       digitalWrite(LED1 , LOW);
       digitalWrite(LEDBTN1 , LOW);
    }
    void loop() {
      int packetSize = LoRa.parsePacket();
      if (packetSize) {
        Serial.print("Message: ");
        while (LoRa.available())
        {
        Serial.write(LoRa.read());
        //Serial.println("");
        int inChar = LoRa.read();
        inString += (char)inChar;
        val = inString.toInt(); 
        digitalWrite(LED1 , HIGH);
        delay(50);
        digitalWrite(LED1 , LOW);
        delay(50);    
        }
        inString = "";     
      }
      Serial.println(val);
      lValue = val;
     
      if( pValue != lValue)
      {
        pValue = lValue;
        switch (val)
        {
        case 1:
           digitalWrite(LEDBTN1 , HIGH);
            delay(10);
          break;
        case 11:
           digitalWrite(LEDBTN1 , HIGH);
            delay(10);
          break;
        case 12:
           digitalWrite(LEDBTN1 , HIGH);
            delay(10);
          break;
        default:
          digitalWrite(LEDBTN1 , LOW);
            delay(10);
          break;
        }
      }
       delay(50);
    }
    Images attachées Images attachées  

  6. #26
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    bon les messages semblent passer correctement c'est déjà cela

    si vous voulez stocker le message dans un buffer, il ne faut pas l'imprimer puis après essayer de lire (ça lit l'entrée suivante). il faut tout charger dans un buffer puis décoder (ou décoder au fil de l'eau)

    essayez cela pour commencer

    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
     
    #include <SPI.h>
    #include <LoRa.h>
     
    #define nss 15
    #define rst 16
    #define dio0 4
     
    void setup() {
      Serial.begin(115200);
      while (!Serial) yield();
      LoRa.setPins(nss, rst, dio0);
     
      if (!LoRa.begin(433E6)) { // 433E6 ou 915E6 suivant région
        Serial.println("Starting LoRa failed!");
        while (true) yield();
      }
      Serial.println("LoRa Receiver");
    }
     
    void loop() {
      int packetSize = LoRa.parsePacket();
      if (packetSize) {
        char buffer[packetSize + 1]; // +1 pour mettre un caractère nul à la fin
        size_t position = 0;
     
        // on récupère le message dans le buffer
        while (LoRa.available()) buffer[position++] = (char)LoRa.read(); // <== EDIT, rajout du = manquant
     
        // on termine le message (on suppose que c'est de l'ASCII)
        buffer[position]* = '\0';
     
        // On imprime le message
        Serial.print("J'ai reçu : "); Serial.println(buffer);
     
        // ensuite on peut jouer avec le buffer de différentes façons
        switch (buffer[0]) {
          case '1': Serial.print("C'était le bouton 1"); break;
          case '2': Serial.print("C'était le bouton 2"); break;
          default:  Serial.print("bouton inconnu"); break;
        }
     
        if (packetSize > 1) {
          switch (buffer[1]) {
            case '1':
            case '2':
              Serial.print(" et c'était un double click");
              break;
            case 'D':
              Serial.print(" et c'était un début d'appui long");
              break;
            case 'F':
              Serial.print(" et c'était une fin d'appui long");
              break;
            default:
              Serial.print(" et je ne sais pas trop à quoi ça correspond");
              break;
          }
        }
        Serial.printl();
     
        // on pourrait aussi comparer directement
        if (strcmp(buffer, "1") == 0) Serial.println("Appui simple sur le bouton 1");
        else if (strcmp(buffer, "2") == 0) Serial.println("Appui simple sur le bouton 2");
        else if (strcmp(buffer, "11") == 0) Serial.println("Appui double sur le bouton 1");
        // etc etc etc
     
      }
    }

  7. #27
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 031
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 031
    Par défaut
    merci encore Jay M

    j'ai une erreur compil sur cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (LoRa.available()) buffer[position++] (char)LoRa.read();
    C:\Users\Utilisateur\Documents\Arduino\sketch_dec09c\sketch_dec09c.ino: In function 'void loop()':
    sketch_dec09c:22:49: error: expected primary-expression before 'char'
    while (LoRa.available()) buffer[position++](char)LoRa.read();
    ^
    sketch_dec09c:22:53: error: expression cannot be used as a function
    while (LoRa.available()) buffer[position++](char)LoRa.read();
    ^
    sketch_dec09c:22:54: error: expected ';' before 'LoRa'
    while (LoRa.available()) buffer[position++](char)LoRa.read();
    ^
    Plusieurs bibliothèque trouvées pour "SPI.h"
    Utilisé : C:\Users\Utilisateur\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\SPI
    Non utilisé : C:\Users\Utilisateur\Documents\Arduino\libraries\SPI-master
    Plusieurs bibliothèque trouvées pour "LoRa.h"
    Utilisé : C:\Users\Utilisateur\Documents\Arduino\libraries\LoRa
    Non utilisé : C:\Users\Utilisateur\Documents\Arduino\libraries\arduino-LoRa-master
    Utilisation de la bibliothèque SPI version 1.0 dans le dossier: C:\Users\Utilisateur\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\SPI
    Utilisation de la bibliothèque LoRa version 0.8.0 dans le dossier: C:\Users\Utilisateur\Documents\Arduino\libraries\LoRa
    exit status 1
    expected primary-expression before 'char'
    Que j'ai corrigée comme çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while (LoRa.available()) buffer[position++],(char)LoRa.read();
    çà compile mais çà fait de drôle chose après ...désolé


    EDIT :

    Mille pardons , j'ai corrigé comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     while (LoRa.available()) buffer[position++]=(char)LoRa.read();
    et çà marche beaucoup mieux
    Images attachées Images attachées   

  8. #28
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Bonjour,

    Il y a sans doute un opérateur d'affectation qui s'est perdu quelque part.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  9. #29
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    oui il manquait le `=` (je tape le code directement dans le forum donc...)


    à affiner au niveau des messages, les tests que j'avais proposés correspondant aux anciens messages 1, 11, 1D et 1F (et pareil avec 2) ==> si vous les avez changés, il faut modifier en conséquence

    et le switch / case était faux, c'est pas 0 et 1 qu'il faut tester mais 1 et 2 bien sûr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        switch (buffer[0]) {
          case '1': Serial.print("C'était le bouton 1"); break;
          case '2': Serial.print("C'était le bouton 2"); break;
          default:  Serial.print("bouton inconnu"); break;
        }

  10. #30
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 031
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 031
    Par défaut
    Bonjour Jay M

    Juste un retour pour vous remercier pour votre patience et votre aide
    j'ai juste modifié le support du récepteur en passant sous un TTGO Lora en lieu et place d'un Wemos
    ( j'avais besoin une LED supplémentaire sur le récepteur et un bouton supplémentaire sur l'émetteur pour l'accusé de réception)

    Les deux modules semblent se "causer" et je mets en copie les 2 deux

    Émetteur

    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
     
    #include <LoRa.h>
    #include <SPI.h>
    #include <OneButton.h> //  http://www.mathertel.de/Arduino/OneButtonLibrary.aspx
     
    #define SCK     5    // GPIO5  -- SX1278's SCK
    #define MISO    19   // GPIO19 -- SX1278's MISO
    #define MOSI    27   // GPIO27 -- SX1278's MOSI
    #define SS      18   // GPIO18 -- SX1278's CS
    #define RST     14   // GPIO14 -- SX1278's RESET
    #define DI0     26   // GPIO26 -- SX1278's IRQ(Interrupt Request)
    #define BAND    433E6
     
    const byte pinBouton1 = 32;
    const byte pinBouton2 = 33;
    const byte pinBouton3 = 13;
     
     
    OneButton sw1(pinBouton1);
    int value1;
    OneButton sw2(pinBouton2);
    int value2;
    OneButton sw3(pinBouton3);
    int value3;
     
     
    void loraMessage(const char * message) {
      LoRa.beginPacket();
      LoRa.println(message);
      LoRa.endPacket();
    }
     
    // CALLBACKS BOUTON 1
    void sw1Click()       {loraMessage("1");}
    void sw1DoubleClick() {loraMessage("11");}
    void sw1DebutLong()   {loraMessage("1D");}
    void sw1FinLong()     {loraMessage("1F");}
     
    // CALLBACKS BOUTON 2
    void sw2Click()       {loraMessage("2");}
    void sw2DoubleClick() {loraMessage("21");}
    void sw2DebutLong()   {loraMessage("2D");}
    void sw2FinLong()     {loraMessage("2F");}
     
    // CALLBACKS BOUTON 3
    void sw3Click()       {loraMessage("3");}
    void sw3DoubleClick() {loraMessage("31");}
    void sw3DebutLong()   {loraMessage("3D");}
    void sw3FinLong()     {loraMessage("3F");}
     
     
    // CODE PRINCIPAL
    void setup() {
      pinMode(pinBouton1, INPUT_PULLUP);
      pinMode(pinBouton2, INPUT_PULLUP);
      pinMode(pinBouton3, INPUT_PULLUP);
      Serial.begin(115200);
      while (!Serial) yield();
      SPI.begin(SCK,MISO,MOSI,SS);
      LoRa.setPins(SS,RST,DI0);
      Serial.println("LoRa Sender");
      if (!LoRa.begin(433E6)) { // 433E6 ou 915E6 suivant région
        Serial.println("Starting LoRa failed!");
        while (true) yield();
      }
      // BTN1
      sw1.attachClick(sw1Click);
      sw1.attachDoubleClick(sw1DoubleClick);
      sw1.attachLongPressStart(sw1DebutLong);
      sw1.attachLongPressStop(sw1FinLong);
     
      // BTN2
      sw2.attachClick(sw2Click);
      sw2.attachDoubleClick(sw2DoubleClick);
      sw2.attachLongPressStart(sw2DebutLong);
      sw2.attachLongPressStop(sw2FinLong);
     
      // BTN3
      sw3.attachClick(sw3Click);
      sw3.attachDoubleClick(sw3DoubleClick);
      sw3.attachLongPressStart(sw3DebutLong);
      sw3.attachLongPressStop(sw3FinLong);
    }
    void loop() {
      sw1.tick();
      sw2.tick();  
      sw3.tick();  
    }
    Récepteur

    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
     
    #include <LoRa.h>
    #include <SPI.h>
     
    // LoRa definition
    #define SCK     5    // GPIO5  -- SX1278's SCK
    #define MISO    19   // GPIO19 -- SX1278's MISO
    #define MOSI    27   // GPIO27 -- SX1278's MOSI
    #define SS      18   // GPIO18 -- SX1278's CS
    #define RST     14   // GPIO14 -- SX1278's RESET
    #define DI0     26   // GPIO26 -- SX1278's IRQ(Interrupt Request)
    #define BAND    433E6
     
    // LED definition
    #define LED1   32
    #define LED2   33
    #define LED3   13
    bool Flag = 0;
     
    //*****************************
    // SETUP
    //*****************************
    void setup() {
      Serial.begin(115200);
     
      while (!Serial) yield();
      SPI.begin(SCK,MISO,MOSI,SS);
      LoRa.setPins(SS,RST,DI0);
      Serial.println("LoRa Receiver");
      if (!LoRa.begin(433E6)) { // 433E6 ou 915E6 suivant région
        Serial.println("Starting LoRa failed!");
        while (true) yield();
      }
     
      pinMode(LED_BUILTIN, OUTPUT);
      pinMode(LED1, OUTPUT);
      pinMode(LED2, OUTPUT);
      pinMode(LED3, OUTPUT);
     
      digitalWrite(LED_BUILTIN, LOW);
      digitalWrite(LED1, LOW);
      digitalWrite(LED2, LOW);
      digitalWrite(LED3, LOW);
    }
     
    //******************************
    //  LOOP
    //******************************
    void loop() {
      int packetSize = LoRa.parsePacket();
      if (packetSize) 
      {
        char buffer[packetSize + 1]; // +1 pour mettre un caractère nul à la fin
        size_t position = 0;
        // on récupère le message dans le buffer
        while (LoRa.available()) buffer[position++]=(char)LoRa.read();
     
        digitalWrite(LED_BUILTIN ,HIGH);
    	delay(10);
    	digitalWrite(LED_BUILTIN , LOW);
    	delay(10);
     
        // on termine le message (on suppose que c'est de l'ASCII)
        buffer[position]*= '\0';
        // On imprime le message
        Serial.print("Reception: "); Serial.println(buffer);
        // ensuite on peut jouer avec le buffer de différentes façons
        switch (buffer[0]) {
          case '1': 
    		Serial.println("Btn 1");
    		digitalWrite(LED1,HIGH);
    		delay(500);
    		digitalWrite(LED1,LOW);
    		delay(10);
    		Flag = 1;
    		break;
          case '2':
    		Serial.println("Btn 2");
    		digitalWrite(LED2,HIGH);
    		delay(500);
    		digitalWrite(LED2,LOW);
    		delay(10);
    		Flag = 1;
    		break;
    	  case '3':
    		Serial.println("Btn 3");
    		digitalWrite(LED3,LOW);
    		delay(10);
    		Flag = 0;
    		break;	
          default:
    	    break;
        }
        if (packetSize > 1) {
          switch (buffer[1]) {
            case '1':
    		  Serial.print("Double click");
    		   break;
            case 'D':
              Serial.print("Début d'appui long");
              break;
            case 'F':
              Serial.print("Fin d'appui long");
              break;
            default:
              break;
          }
        }
    	if (Flag) {
    	   digitalWrite(LED3,HIGH);
    	   //delay(000);	
    	} else {
    	   digitalWrite(LED3,LOW);
    	   //delay(500);	
    	}   
      }
    }
    Un grand merci encore
    Je clôture

  11. #31
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    Bravo

    Juste une remarque, je pense que la classe OneButton fait cela pour vous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     pinMode(pinBouton1, INPUT_PULLUP);
      pinMode(pinBouton2, INPUT_PULLUP);
      pinMode(pinBouton3, INPUT_PULLUP);
    A priori vous devez pouvoir l’enlever

  12. #32
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 031
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 031
    Par défaut
    Ok Mille Mercis Jay M

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Interruption timer 1 sur nano v3
    Par niconol dans le forum Arduino
    Réponses: 4
    Dernier message: 06/07/2018, 09h37
  2. Timer sur une fenetre "info"
    Par momobulle dans le forum WinDev
    Réponses: 2
    Dernier message: 11/07/2007, 13h26
  3. Waitable timers sur linux
    Par wajihwajih dans le forum Linux
    Réponses: 3
    Dernier message: 23/05/2007, 15h36
  4. [FLASH] Problème de timer sur FLV
    Par BnA dans le forum Flash
    Réponses: 1
    Dernier message: 03/11/2006, 11h52
  5. [C#] Timer sur les évènements des messages Windows
    Par Nullos Oracle dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/09/2006, 11h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo