Aller au contenu

Est-ce que cela intéresse qqun,un driver indi et code arduino pour l'ouverture d'un toit à distance ?


ch_porchet

Messages recommandés

hello

alors sur la Rpi4 je suis presque ,au meme stade que la Rpi 3.

par contre sur la 4j'ai un problème de sortie d'ecran , du coup je passe par VNC ou teamviewer.

 

j'ai relancer sur indi , mais par un poste que j'avais déjà ouvert pour l'installation de meteostation , on verra si j'ai plus de chance !

je te met aussi le lien.

https://indilib.org/forum/ekos/6923-problem-installing-the-indi-meteostation.html?start=12#54957

 

pas encore essayé le BME280 et le TSL2591.

 

A+

Lien vers le commentaire
Partager sur d’autres sites

salut,

 

désolé pas eu le temps de passer ces derniers jours.

De plus j'ai repris le taf aujourd'hui.

 

Je suis ton avancement. Je devrais recevoir mon BME + mon TSL aujourd'hui. Je verrais pour essayer ce soir mais pas sur.

Pour ton pb d'hdmi je trouve cela surprenant pour du matériel neuf. Je verrais pour me le faire échanger.

 

Donc tu en es où du coup à ce jour?

Lien vers le commentaire
Partager sur d’autres sites

hello

Alors sur la RPi3 au même stade ou on c'était arrêter , pas d'affichage de jauge ,mais graphique OK.

sur la Rpi4 je vais installer le reste pour etre au meme stade que la 3.

 

Par contre je vais souder les prise, à midi, des capteur que j'ai reçu .

 

J'ai un gars qui ma dis sur le forum qu'il a déjà eu le meme problème et que c'était la carte qui était défectueuse.

je vais peut etre la retourné.

 

PS: tu as vu, j'ai aussi mis un  commentair  sur le poste que tu as ouvert  spécialement pour la météoSation ,peut être que on devrais partager les avances sur l'autre poste au cas ou qqun aurai le même soucis . 

 

A Bientôt 

Lien vers le commentaire
Partager sur d’autres sites

  • 9 mois plus tard...

Bonjour à tous,

Je m'appelle Daniel, j'habite en Suisse et je suis à la recherche d'une solution pour commander mon toit d'observatoire avec EKOS. Il semble que j'ai trouvé mon bonheur sur ce fil d'échange 🙂 🙂.

Actuellement, je pilote la commande du toit de manière semi-automatique et je voudrai le faire au moyen du montage proposé par Tom. Malheureusement, il m'est impossible de charger les documents d la première page !!

Quelque peut-il m'aider ?

 

Merci par avance

Daniel

Ah, maintenant ça marche.

Je vous tiens au courant de l'avancement .

Cordialement

Daniel

Lien vers le commentaire
Partager sur d’autres sites

Merci infiniment.

Je suis en train de faire le schéma avec QElectrotech.

Je vais y intégrer divers éléments que j'utilise actuellement (variateur pour la commande du moteur démultiplié par exemple).

Ma première question concerne les Arduino utilisés. En effet, je vois que tu utilise le modèle UNO. Je possède un Diecimila et un Leonardo, est-ce identique pour la programmation ?

De plus, serait-il possible d'avoir deux ou trois images de l'interface du pilotage du toit dans EKOS, à quoi ça ressemble.

Merci d'avance et excellente journée

 

Daniel

Lien vers le commentaire
Partager sur d’autres sites

Super, merci, je vais me procurer un Arduino Uno, ce sera plus simple. Par contre, au sujet du deuxième écran, c'est quoi "Auxiliary"?

 

Plus qu'a faire des essais 🙂

Encore merci

 

Daniel

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Alors l'auxiliaire .......... , c'est l'interrupteur "générale " de la commande 230VA de mon observatoire.

Car j'ai mis un transformateur 230VA-12VC qui alimente le moteur du toit et je voulais pas qu'il soit tous le temps alimenté.

Et du coup j'ai fais aussi que ce relais coupe tous le 230V  de l'observatoire sauf une prise qui alimente le PC et l'arduino .

 

Alors normalement le "générale"  et commandée directement dès que l'arduino  reçois l'info que Kstars communique avec l'arduino , mais j'ai quand même une commande manuel au cas ou cela ne fonctionnerais pas .

Et j'ai la commande inverse, dès que kstars s'arrête ( après un délais)  cela coupe le générale.

Du coup je pense que c'est bien que tu prennes la même carte que moi.....

 

Par contre ,pour cette option ,j'ai aucune idée comme cela fonctionne !

Car tous la partie communication driver  indi et kstars ,c'est pas moi qui l'ai faite ,c'est Tom Gibson (forum Indi) qui en est le réalisateur.

Car j'avoue que c'est trop abstrait pour moi ,et le mec il touche grave , j'aurai rien fait sans lui ,et il a prit un max de temps pour moi.

Moi, j'ai juste fais la partie Code arduino de base pour l'ouverture du toit .

 

Modifié par ch_porchet
Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois plus tard...

Un grand merci pour le code Arduino et le driver Indi.

Le driver Indi mériterait d'être intégré dans les pilotes 3rd-partie officiels. En plus ce serait pratique pour les mises à jour.

De mon coté, je n'ai pas un abri à toit ouvrant, mais c'est tout l'abri qui se déplace sur rails.

Les portes sont fermées par deux vérins électriques. Du coup, j'ai pas mal modifié le firmware Arduino pour ajouter la gestion des portes.

Pour ma station météo, j'utilise WeatherRadio un peu modifié.

En effet, j'ai des problèmes avec le MLX qui ne semble pas apprécier ses voisins et quand le MLX se plante les mesures des autres capteurs sont faussées aussi. Donc je l'ai mis tout seul sur un autre Wemos et Weatherradio se charge de récupérer les données du MLX par des requêtes http.

Mon anénomètre est un TX20 d'une vieille station Lacrosse. J'ai intégré le code un peu "à l'arrache" dans ma version de WeatherWacher.

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Il y a 17 heures, plop3 a dit :

Pour ma station météo, j'utilise WeatherRadio un peu modifié.

Moi aussi j'utilise WeatherRadio, mais j ai un problème récurant,en effet , elle ce bloqué après 8ou 10 jours .

Et j'ai pas encore trouvé pourquoi!

A+

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines plus tard...

Hello,

Je progresse un peut avec mon observatoire.

Par contre, j'ai un grand problème pour compiler le module Rolloffino. En effet, j'ai bien suivi ta procédure, même fait la manip. à Mustak, mais rien y fait, j'ai toujours le message " make: *** [Makefile:130 : all] Erreur 2
ls: impossible d'accéder à '/usr/bin/indi_rolloffino': Aucun fichier ou dossier de ce type"

Je joint le fichier complet.

Une idée peut-être ?

 

Merci par avance et excellente journée

 

Daniel


 

erreur.txt

Lien vers le commentaire
Partager sur d’autres sites

Le 13/05/2021 à 10:49, ch_porchet a dit :

Moi aussi j'utilise WeatherRadio, mais j ai un problème récurant,en effet , elle ce bloqué après 8ou 10 jours .

Et j'ai pas encore trouvé pourquoi!

A+

Bonjour Christophe,

 

il serait intéressant, je pense, de procéder à la mise à jour du driver indi! en effet depuis l'installation il y a eu bcp de MAJ majeures dont notamment la toute dernière 1.15!!! 

pas dur à faire et franchement ca vaut le coup :)

J'avais des soucis sur les valeurs de pression: tous les X temps vraiment aléatoire je perdais les paramètres "site" et du coup la correction n'était plus bonne.

Là, avec le nouveau firmware, en cas de plantage, le driver force à relancer tout comme il faut et cela de manière complètement transparente :).

 

Manip à suivre:

- tu vas dans le répertoire indi où sont stocker les "3rd party"  (de base c'est dans le dossier Projects)

- tu ouvres un terminal depuis de dossier et tu tapes :

git pull

-> cela va mettre à jour le répertoire "3rd party"

- tu fermes le terminal

- tu vas dans le dossier indi-duino et tu ouvres un terminal

- dans le terminal tu lances les commandes suivantes:

mkdir build

cd build

cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug ../

make -j4

sudo make install

 

Après l'installation tu lances kstars et dans la version tu devrais lire 1.14

 

Et zou!!

 

Olivier

Le 03/06/2021 à 16:19, nounouche a dit :

Hello,

Je progresse un peut avec mon observatoire.

Par contre, j'ai un grand problème pour compiler le module Rolloffino. En effet, j'ai bien suivi ta procédure, même fait la manip. à Mustak, mais rien y fait, j'ai toujours le message " make: *** [Makefile:130 : all] Erreur 2
ls: impossible d'accéder à '/usr/bin/indi_rolloffino': Aucun fichier ou dossier de ce type"

Je joint le fichier complet.

Une idée peut-être ?

 

Merci par avance et excellente journée

 

Daniel


 

erreur.txt 4 Ko · 0 downloads

@nounouche

Bonjour nounouche,

 

je viens de lire le rapport.

Le fichier mentionne en effet que le fichier /usr/bin/indi_rolloffino n'existe pas. Cela provient du fait que le driver ne s'est pas installé correctement.

As tu bien installé toutes les librairies et dépendance nécessaires?

 

essais dans un terminal de faire ceci:

 

sudo apt-get -y install libnova-dev libcfitsio-dev libusb-1.0-0-dev zlib1g-dev libgsl-dev build-essential cmake git libjpeg-dev libcurl4-gnutls-dev libtiff-dev libfftw3-dev libftdi-dev libgps-dev libraw-dev libdc1394-22-dev libgphoto2-dev libboost-dev libboost-regex-dev librtlsdr-dev liblimesuite-dev libftdi1-dev libavcodec-dev libavdevice-dev
 

sudo apt-get install libnova-dev libcfitsio-dev libusb-1.0-0-dev zlib1g-dev libgsl-dev build-essential cmake git libjpeg-dev libcurl4-gnutls-dev libtiff-dev libftdi-dev libgps-dev libraw-dev libdc1394-22-dev libgphoto2-dev libboost-dev libboost-regex-dev librtlsdr-dev liblimesuite-dev libftdi1-dev
 

sudo apt install libindi-dev

 

Ensuite tu preux installer de driver en suivant ça:

cd ~/Projects/indi-3rdparty

git clone https://github.com/wotalota/indi-rolloffino.git

mkdir indi-rolloffino/build

cd indi-rolloffino/build

cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug ../

sudo make install

 

reviens nous dire.

 

cordialement.

Lien vers le commentaire
Partager sur d’autres sites

Il y a 9 heures, olivier1986 a dit :

njour Christophe,

 

il serait intéressant, je pense, de procéder à la mise à jour du driver indi! en effet depuis l'installation il y a eu bcp de MAJ majeures dont notamment la toute dernière 1.15!!! 

pas dur à faire et franchement ca vaut le coup :)

J'avais des soucis sur les valeurs de pression: tous les X temps vraiment aléatoire je perdais les paramètres "site" et du coup la correction n'était plus bonne.

Là, avec le nouveau firmware, en cas de plantage, le driver force à relancer tout comme il faut et cela de manière complètement transparente :).

 

Manip à suivre:

- tu vas dans le répertoire indi où sont stocker les "3rd party"  (de base c'est dans le dossier Projects)

- tu ouvres un terminal depuis de dossier et tu tapes :

git pull

-> cela va mettre à jour le répertoire "3rd party"

- tu fermes le terminal

- tu vas dans le dossier indi-duino et tu ouvres un terminal

- dans le terminal tu lances les commandes suivantes:

mkdir build

cd build

cmake -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug ../

make -j4

sudo make install

 

Après l'installation tu lances kstars et dans la version tu devrais lire 1.14

 

Et zou!!

 

Olivier

Hello Olivier 

Merci ,je vais essayer ça dès que j'ai un moment. 

A bientôt 

Christophe 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour les gens,

J'ai fait quelques essais et je suis arrivé à implanter le driver ROLLOFFINO sur 3 pc avec la même méthode. J'ai fait un mix entre la version d'installation de Wotalota et tes conseils.

Je met en fichier joint la procédure qui fonctionne chez moi.

 

Je vais maintenant m’attaquer à la station météo.

 

Merci pour tes précieux conseils, je vous tien au courant 🙂

 

Bien cordialement

 

Daniel

INstallation drivers 3D party (rolloff)

Lien vers le commentaire
Partager sur d’autres sites

il y a 10 minutes, nounouche a dit :

Bonjour les gens,

J'ai fait quelques essais et je suis arrivé à implanter le driver ROLLOFFINO sur 3 pc avec la même méthode. J'ai fait un mix entre la version d'installation de Wotalota et tes conseils.

Je met en fichier joint la procédure qui fonctionne chez moi.

 

Je vais maintenant m’attaquer à la station météo.

 

Merci pour tes précieux conseils, je vous tien au courant 🙂

 

Bien cordialement

 

Daniel

INstallation drivers 3D party (rolloff) 1 Ko · 0 downloads

Bonjour,

 

content pour toi que cela fonctionne.

A lire cela ressemble bcp à ce que j'ai publié quelques poste plus tôt ;)

Je suis en train de revisiter le driver arduino pour plus de commodités pour moi. (je n'ai pas besoin du contact reed par exemple). Ajout de quelques LED etc...

je le déposerais ici pour qui veut :)

 

concernant la station météo, avec Ch_Porchet nous l'avons installé.

C'est pas si aisé que ça.

La partie firmware est très bien faite mais la partie serveur web est assez délicate. Il faut jouer dans le Crontab et d'autre petites choses!

tu as un post où l'on en parle avec Christophe.

C'est ici:

 

 

Enfin, pour la toute dernière mise à jour en V1.15 du driver INDI la doc n'est pas mise à jour à 100% et j'ai un poil galéré.

 

N'hésites pas du coup :)

 

edit: lien vers ma station météo weatherradio qui est dans ma maison ..... ^^ pour le moment!

http://82.65.92.229:8280/weatherradio

 

Olivier

Modifié par olivier1986
Lien vers le commentaire
Partager sur d’autres sites

Hello Olivier, oui effectivement, j'ai relus plusieurs fois le fil du sujet et c'est quasiment identique, j'ai juste rassemblé vos expériences. 🙂

 

Suite aux prochaines aventures 😅😅

 

Daniel

 

Lien vers le commentaire
Partager sur d’autres sites

@ch_porchet

 

Salut Christophe,

 

je suis en train d'essayer de comprendre le code arduino.

Bon, j'avoue avoir à peu près compris le fonctionnement, le plus délicat étant la partie Serial, et forcément....c'est sur celle-ci que je vais avoir une question ^^

Pour résumer, depuis le port série je peux allumer le relais 220V avec la commande suivante:

(SET:AUXSET:ON)

Donc jusque là tout va bien: Cette commande apparait bien ici dans le programme:

else if (strcmp(command, "SET") == 0)
      {
        if (strcmp(target, "AUXSET") == 0)      // Relais Alimentation
        {
          if (strcmp(value, "ON") == 0)
          {
            timerActive = true;
            if (!estAlimente)
              remotePowerRequest = true;

 

Bon, sauf que lorsque je passe sur le pilotage de la motorisation ba ça ne fonctionne pas.

 

De ma compréhension, le buffer série doit contenir une chaine de caractère ressemblant à cela:

 

(command:target:value)

 

Dans le programme on peut voir deux types de commande: GET et SET

 

Je suppose donc que dans le cas de l'allumage du moteur il faut utiliser la commande SET.

 

Pour la target, toujours de ma compréhension, je dois utiliser soit OPEN, soit CLOSE soit ABORT.

 

// Power is on
          else
          {
            if (strcmp(target, "OPEN") == 0)            // BoutonOpenState
            {
              BoutonOpenState = LOW;
            }
            else if (strcmp(target, "CLOSE") == 0)      // BoutonCloseState
            {
              BoutonCloseState = LOW;
            }
            else if (strcmp(target, "ABORT") == 0)      // BoutonStopState
            {
              BoutonStopState = LOW;

 

là où ca coince c'est sur la valeur. J'ai eau essayé 0, 1, ON, OFF, LOW, HIGH, OPEN ..... il ne se passe rien.

le moniteur série me renvoie une réponse avec en valeur ce que j'ai "écris, par exemple:

- j'envoie la commande (SET:OPEN:ON)

- le moniteur série répond (ACK:OPEN:ON)

mais il ne se passe rien.

 

Saurais tu quelle est la valeur à utiliser pour ouvrir ou fermer depuis le port série?

 

Merci Christophe.

 

EDIT:

autant pour moi, j'ai trouvé réponses sur le site de Woltawolta:

https://github.com/wotalota/indi-rolloffino/blob/master/readme.txt

 

On y voit bien que les requêtes sont les bonnes.

du coup je ne comprends pas pk les commandes fonctionnent avec le relais 220V mais pas sur les autres relais.

Poutant depuis EKOS ça fonctionne!!!

 

va comprendre quelque chose ^^ ralala!! l'informatique!!

 

Olivier

Modifié par olivier1986
Lien vers le commentaire
Partager sur d’autres sites

@ch_porchet Bonjour Christophe,

 

j'ai pu avancer sur mes mésaventures.

En fait, après moultes et moultes relecture du code arduino j'ai enfin compris ce qui n'allait pas!!

Dans le code que tu fourni en 1ere page de ce topic il y'a une erreur!

 

dans la loop() la fonction position_toit() n'est pas au bon endroit.

Elle devrait être juste après le readUSB() alors que là elle est avant (juste après la lecture des boutons).

 

Du coup tout fonctionne, en simulateur tinkerCAD et en vrai :)

 

Je vais pouvoir bientôt commencer la création du coffret électrique :)

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

@ch_porchet

Salut Christophe,

 

le soucis venait des commandes via le port série de l'ouverture et de fermeture.

Dans le simu puis en vrai, si j'utilisais les boutons OUVRIR et FERMER, ca ne fonctionnait pas.

J'ai donc débuggé le code et une ligne n'était pas à sa place:

dans le code fourni à la page 1 de ce topic, dans la loop()  tu as:

 

  // début du programme des fonctions
  if (estAlimente) {
    BoutonOpenState = digitalRead (BoutonOpen) ;
    BoutonCloseState = digitalRead (BoutonClose) ;
    FinOuvertureState = digitalRead (FinOuverture) ;
    FinOuvertureSecState = digitalRead (FinOuvertureSec) ;
    FinFermetureState = digitalRead (FinFermeture) ;
    FinFermetureSecState = digitalRead (FinFermetureSec) ;
    Telescope_ParcState = digitalRead (Telescope_Parc);
    BoutonStopState = digitalRead (BoutonStop);
    position_toit() ;
    if (timerActive)
      remotePowerRequest = inactivityCheck();
    if (Serial && Serial.available() > 0)
      readUSB();
  }
  delay(250);                                      // 0.25 

 

 

Mais en fait cela devrait être:

  // debut du programme des fonctions
  if (estAlimente) {
    BoutonOpenState = digitalRead (BoutonOpen) ;
    BoutonCloseState = digitalRead (BoutonClose) ;
    FinOuvertureState = digitalRead (FinOuverture) ;
    #ifdef use_fdc_security    
    FinOuvertureSecState = digitalRead (FinOuvertureSec) ;
    #endif
    FinFermetureState = digitalRead (FinFermeture) ;
    #ifdef use_fdc_security
    FinFermetureSecState = digitalRead (FinFermetureSec) ;
    #endif
    #ifdef use_park_switch 
    Telescope_ParcState = digitalRead (Telescope_Parc);
    #endif
    BoutonStopState = digitalRead (BoutonStop);
    if (timerActive)
      remotePowerRequest = inactivityCheck();
    if (Serial && Serial.available() > 0)
      readUSB();
      position_toit() ;
  }
  delay(250);                                      // 0.25 

 

Tu vois que dans ma loop() la fonction position_toit() se situe juste après la fonction readUSB().

Dans ton cas en fait il ne lit jamais la commande envoyée par le port série.

 

Dans ma version tout refonctionne impeccablement :)

 

Je joins ici ma version perso modifiée pour mes besoins, à savoir:

- Ajout du choix d'utiliser ou non une led verte pour indiquer l'état ouvert du toit.

- Choix d'utiliser ou non les fins de courses de sécurité -> si les gens ne souhaitent en mettre que 2.

- Choix d'utiliser ou non les détecteurs de park de la monture -> Dans mon cas je laisse INDI gérer car pas de risque de collision.

- Choix d'utiliser ou non le relais 12V optionnel. -> je l'ai laissé en place pour si un jour... et puis sur une rampe de 8 relais il est là... donc autant s'en servir!!

 

A +

 

Olivier

RollOff_codefinal (4).ino

Lien vers le commentaire
Partager sur d’autres sites

Ok,

Je vais regarder, par contre moi j'ai des fois la fonction de la commande du relais qui n'est pas automatique quand cela se connect, du coup je  dois le faire par la commande de kstars.

 

Le truc que je n'ai jamais réussi à résoudre, c'est le faite que la commande du relais me pose un autre problème avec kstars, vu que celui-ci  et commander après la connexion, je dois reconnecter via kstars les caméras.

Ce qu'il faudrait arriver à faire c'est de mettre une tempo sur la connexion des agrégat connecter à kstars. 

Comme tant que le toit et pas ouvert ,les caméra,roue à filtre,etc ne se connecte pas.

Mais je crois pas que l'on peut le faire.

 

Mais le gros avantage ,c'est que quand tu a fini tous et couper du coup pas de consommation appart le micro PC en veille.

Lien vers le commentaire
Partager sur d’autres sites

Le 14/06/2021 à 19:07, ch_porchet a dit :

Ok,

Je vais regarder, par contre moi j'ai des fois la fonction de la commande du relais qui n'est pas automatique quand cela se connect, du coup je  dois le faire par la commande de kstars.

 

Le truc que je n'ai jamais réussi à résoudre, c'est le faite que la commande du relais me pose un autre problème avec kstars, vu que celui-ci  et commander après la connexion, je dois reconnecter via kstars les caméras.

Ce qu'il faudrait arriver à faire c'est de mettre une tempo sur la connexion des agrégat connecter à kstars. 

Comme tant que le toit et pas ouvert ,les caméra,roue à filtre,etc ne se connecte pas.

Mais je crois pas que l'on peut le faire.

 

Mais le gros avantage ,c'est que quand tu a fini tous et couper du coup pas de consommation appart le micro PC en veille.

 

Salut Christophe,

 

je viens répondre dans la limite de mes connaissances ^^

 

Pour la 1ère partie, c'est plutôt étonnant que tu doivent le reconnecter à la main.

Mais cela vient peut être d'un problème que je rencontre avec le code et que je suis en train de résoudre avec Tom.

En effet, dans le code version boutons lorsque tu démarres la communication entre indi et l'arduino, INDI envoie la commande (CON:0:0).

L'arduino retourne en echange comme réponse (ACK:0:0).

Mais, car c'est là qu'arrive le mais, l'arduino la renvoie deux fois alors que pour toutes les autres commandes il n'en renvoie qu'une.

 

Donc je dis bien peut être que ton problème vient d'ici.

D'ailleurs, le programme de base sans les boutons (rolloff.ino.standard sur le git) ne revoie qu'une seule réponse (ACK:0:0).

 

J'ai eu beau débogger le programme ligne par ligne je ne comprends pas vraiment pourquoi il fait deux fois la fonction sendAck(value) avec la commande

(CON:0:0).

 

A priori je pense que ca vient de la vérification du "estAlimente".

 

J'échange à ce sujet avec Tom et te tiendrais informé de l'avancement.

 

Concernant la deuxième partie de ton message, en fait je pense qu'il est tout à fait possible de faire ce que tu souhaites d'une manière un peu détourné.

Je m'explique ^^

Si tu utilises la fonction scheduler tu peux lancer un script python de démarrage et de fin.

Il te "suffit" alors de réaliser un script dans lequel tu fais exactement le cheminement que tu souhaites avec les tempo souhaiter ect etc...

 

Par exemple, lance rolloff, attend 30s, lance cam1, attend 30s etc etc...

 

Après je ne suis pas un pro de python donc je ne pourrais pas vraiment t'aider la dessus.

 

Je pense que sur les fofo Indi tu trouveras ton bonheur.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

        // Handle requests to obtain the status of switches
        // GET: OPENED, CLOSED, LOCKED, AUXSTATE
        strcpy(value, "OFF");

        if (strcmp(command, "GET") == 0)
Le 14/06/2021 à 09:54, olivier1986 a dit :

    if (Serial && Serial.available() > 0)


c’est pas beau !

 

La réponse à ce test est soit True (1) soit False (0). Donc ici tu cherches la réponse True. 

 

if (Serial && Serial.available()) tout court suffit. Ça te fait gagner quelques octets de mémoire. Sur Arduino, c’est utile.

 

Le code fait aussi un énorme usage des if else if else ... Ca serait mieux de faire ça avec des switch case. Pour que le switch accepte une chaine de caractères, il faut utiliser une fonction de hash, par exemple voir solution ici :

 

https://hbfs.wordpress.com/2017/01/10/strings-in-c-switchcase-statements/

 

Ca rendrait le code bien plus simple à lire et à débugger.

 

Pour le double envoi dont tu parles, la fonction sendAck() est appelée deux fois dans le if (parseCommand())

 

1) quand command = CON

2) quand il n'y a pas d'erreur et qu'on est branché

 

Voilà pourquoi tu as cette erreur de double envoi. Pour corriger ça voici le code à modifier :

 

      if (strcmp(command, "CON") == 0)
      {
        if (!estAlimente)
        {
          remotePowerRequest = true;
          timerActive = true;
        }
        connecting = true;
        strcpy(value, INFO_1);
        // sendAck(value); // cette ligne n'est pas utile, l'envoi se fait à la fin
      }

 

Lien vers le commentaire
Partager sur d’autres sites

 

il y a 55 minutes, Fred_76 a dit :


c’est pas beau !

 

La réponse à ce test est soit True (1) soit False (0). Donc ici tu cherches la réponse True. 

 

if (Serial && Serial.available()) tout court suffit. Ça te fait gagner quelques octets de mémoire. Sur Arduino, c’est utile.

Oui tu as raison.

apres sur un arduino uno y’a largement de quoi faire ^^
c’est pas un très gros programme 🙂

mais hésites pas a regarder si tu trouves autre chose 

Lien vers le commentaire
Partager sur d’autres sites

il y a 2 minutes, olivier1986 a dit :

 

Oui tu as raison.

apres sur un arduino uno y’a largement de quoi faire ^^
c’est pas un très gros programme 🙂

mais hésites pas a regarder si tu trouves autre chose 

J'ai corrigé ton pb de double envoi de CON:0:0

Lien vers le commentaire
Partager sur d’autres sites

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.