danjperron
Posts: 4678
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: gpio c++

Fri Feb 09, 2024 9:13 pm

J'ai aussi corrigé le warning pour le loop dans gpioPin.cpp.
s
Ne semblait pas gênant; il rique de masquer les autres warnings de l'option pedantic... Certains sont plus ennuyeux, de mémoire...
C'était un "for( int loop; " sans initialisation . Je sais que par défaut il est à zéro mais cela enlève le "warning".

Pour le make nous pouvons insérer une étiquette "install:" qui transférera le code à la bonne place.
Pour moi ce serait /usr/local/bin

danjperron
Posts: 4678
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: gpio c++

Fri Feb 09, 2024 9:23 pm

Pour l’arrêter je control C et op arrêt mais les pins reste alimenté
Attrape le ctrl-c

dans mon code main.cpp j'avais un handler .


il suffit de faire une fonction style FermeTout() d'ou tu spécifies quel niveau de sortie tu veux, 0 ou 1, sur chaque sortie et tu insères cette fonction dans my_ctrl_c_handler()

Code: Select all

void FermeTout()
{



}


void my_ctrl_c_handler(int s){
            FermeTout();
           delete ds18b20;
           release_gpiod();
           exit(0);
}


int main(void)
{

 signal (SIGINT,my_ctrl_c_handler);
 
 blablabla......

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Sat Feb 10, 2024 2:23 am

Il serait aussi plus simple de mettre les constantes dans un fichier .hpp. Je trouve que le fichier Gainable est surchargé.
J'ai regardé un peu les 760 lignes de Gainable.cpp

Les hysteresis sont, à ce jour, entre les lignes 133 et 186 et ont vraisemblablement -pour oi- un accident de copier coller: (lignes 180 à 186)...

Code: Select all

void hysteresisTempVitesseExtChauf() {
  if (tempVitExtCh) {
    tempVitExtCh = ds_temperature[1] >= (consigneVitExtCh - hysteresis); //
  } else {
    tempVitExtCh = ds_temperature[1] >= (consigneVitExtCh - hysteresis); // pareil que ci dessus  
  }
}
(si ces fonctions ont été faites par copier coller, la loi de Murphy peut faire craindre d'autres erreurs... je n'y crois pas, mais je suis un incurable optimiste)

Edité j'ai l'impression que gainable fait deux choses:
il lit les temperatures
il active via une machine d'état, des relais..
Peut être peut on le couper en deux tâches, l'une lisant les températures et écrivant dans un fichier à son rythme,
l'autre lisant le fichier et activant les relais à un autre rythme... (et lisant peut etre aussi les ordres , via un autre fichier)...

PS
/usr/local/bin est un très bon endroit pour moi...(et c'est transparent pour beaucoup -PAT par défaut- utilisateur: je ne sais pas si rc ou crontab le connaissent -invoquer toujours par chemin complet)

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Sat Feb 10, 2024 10:03 am

salut merci les gars !

effectivement j'avais mal ecrit une hysteresis
"faute de frappe" j'aime pas trop les copier coller car j'aime bien ecrire ! ca rentre mieux dans la tete :lol:

donc j'ai mis a jours sur github car j'ai ajouter des compteurs d'etats

danjperron
Posts: 4678
Joined: Thu Dec 27, 2012 4:05 am
Location: Québec, Canada

Re: gpio c++

Sat Feb 10, 2024 2:36 pm

Ceci me chicotte depuis le début. (terme québécois qui veut dire me tourmente).

Mise à part le code je me demande la méthode que tu vas utiliser pour la gestion de ton système?

D'après moi c'est la première chose que tu devrais penser. Vais-je utiliser une interface graphique sur mon PI ou tout simplement accéder en ssh et modifier les paramètres, Ajouter des boutons de commande avec un écran lcd.

Pour moi en tout cas la meilleure approche serait le Web. Une interface html! Si c'est le cas il faut penser à structurer ton code par variable modifiable et commande. En C++ l'utilisation de web socket sera la façon de faire.

Je sais que présentement cela te passe par dessus la tête mais c'est assez facile.

Comme je disais au début voir l'ensemble et penser comment le système dot être géré c'est la première chose à faire.
Présentement je vois le code avec beaucoup d'entrées/sorties mais nous sommes en 2023. Il est encore temps de reconfigurer l'interface pour quelque chose de plus moderne et versatile cela permettrait d'utiliser ton portable (cell au Québec) ou un ordinateur.

Voila ceci est une simple suggestion.

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Sat Feb 10, 2024 5:06 pm

salut !
oui j'y pense beaucoup a creer quelque chose soit avec un ecran tatctile ou web

qu'elle est le plus simple a mettre a l'emploi pour moi etant debutant ?

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Sat Feb 10, 2024 5:44 pm

ludoraspberry wrote:
Sat Feb 10, 2024 10:03 am
salut merci les gars !

effectivement j'avais mal ecrit une hysteresis
"faute de frappe" j'aime pas trop les copier coller car j'aime bien ecrire ! ca rentre mieux dans la tete :lol:
Avez vous pensé, avant que ça ne vous sorte de la tête, à mettre à jour, si besoin, votre script python et votre script Arduino (qui donnaient satisfaction) voir à les mettre dans votre github (peuvent interesser d'autres gens que vous et moi: creez une arborescence archives gantira la pérennité de votre code meme si votre RPi casse...)
donc j'ai mis a jours sur github car j'ai ajouter des compteurs d'etats
Il y aurait une modif un peu plus lourde que de changer - en + au bon endroit, modifier le Makefile (c'est un peu comme les fondations d'une maison; autant les fare le mieux possible, me si on sait pas encore combien d'étages doivent jaillir de terre) de la façon suivante

Code: Select all

$(BIB): BB_DS18B20.o  gpioPin.o
deviendrait

Code: Select all

$(BIB): BB_DS18B20.o  gpioPin.o $(SUPPLEMENT)
Si on invoque le Makefile comme d'habitude, il fonctionnera ... comme d'habitude
si on rajoute une (ou plusieurs) fichiers objets *.o, il le.s. mettra dans la bibliotheque statique, ce qui s'avererait bien pratique pour des essais (avant de graver la liste dans le Makefile, ennuyeux à éditer...

je l'ai teste ainsi

Code: Select all

make SUPPLEMENT="BB_DS18B20.o gpioPin.o " #  protège les listes avec des doubles quotes

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Sat Feb 10, 2024 6:03 pm

Oui je suis d’accord ! Donc on peut m’expliquer à quoi sert ce makefile ? Car franchement je me suis pas trop penché dessus !

Oui t’inquiète je mais à jour sur le GitHub

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Sat Feb 10, 2024 7:28 pm

ludoraspberry wrote:
Sat Feb 10, 2024 6:03 pm
Oui je suis d’accord ! Donc on peut m’expliquer à quoi sert ce makefile ?
|/quote]
Ca sert à tout ou presque (en ligne de commande)
* activer au bon moment des lignes de commande pour
* compiler
* * editer les liens (le bouton F9 de l'IDE arduino) uniquement si un bout de code a été modifié (ceratins bouts de code necessitent plus de 10 minutes à se compiler (vu avec opencv, qui a une "bonne" douzaine de lambins -entre autres- , si on devait recompiler tout à chaque fois qu'on fait une modif, ce serait exaspèrant)
** j'ai rajouté un pretty formatter (un autre que celui d'Arduino - je ne connais pas le bouton)
** make clean débarasse le repertoire où on compile des scories de compilation (le *.o, *.a et executables si on les a mis ailleurs)

Et tout ça sans taper des lignes de commande à rallonge (la compilation d'un sketch Arduino -ils ont un autre gestionnaire de projets que make, je pense - c'est des lignes de commande de plus de 300 caracteres, de mémoire; d'autres projets nécessitent plus... on ne va quand même pas taper tout ça)
On a un très bon tutoriel en Français dans https://gl.developpez.com/tutoriel/outil/makefile/ (20 pages; je crois que le manuel avec toutes les options en fait plus de 200 je l'ai -lu en 2013...


Car franchement je me suis pas trop penché dessus !
Tel qu'il est écrit par danjperron, il ne pose aucun problème; j'ai rajouté des fioritures pour simplifier la vie... en ne tapant pas trop de lignes de commandes. .. ou pour detecter de très rares sources de problèmes de codage...
Edité: les Makefiles peuvent devenir très longs, et difficiles à maintenir... Il y a des générateurs de Makile (configure des autotools, très populaire à ce jour, cmake utilisé par SDK de picoPi, et opencv) ... qui génèrent quasiautomatiquement des Makefile (très très longs; la maintenance est hors de question...) .
Oui t’inquiète je mais à jour sur le GitHub
Oh, je ne suis pas inquiet: demain, j'en aurai pour 2 ou 3 heures à câbler MON DS1820 (je suis très bigleux, et un peu maladroit);
vos affaires vont plus vite que je ne pensais/craignais...

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Sun Feb 11, 2024 9:36 am

vos affaires vont plus vite que je ne pensais/craignais... ????

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Sun Feb 11, 2024 2:15 pm

ludoraspberry wrote:
Sun Feb 11, 2024 9:36 am
vos affaires vont plus vite que je ne pensais/craignais... ????
J'avais un peu peur que vous n'arriviez pas à prendre en main tous les outils disponibles (un système GNU linux est quand même un peu plus riche qu'un Arduino)...
Bon, pour revenir aux Makefile:
J'ai rajouté à ce Makefile:
en tête, vers les lignes 5

Code: Select all

## pour moi; /usr/local est plus usité
RACINE := /home/pi/.local/
BIN=$(RACINE)/bin/"DS18B20.conf"
LIB=$(RACINE)/lib/
INC=$(RACINE)/include/
# copie: verbeuse et uniquement les plus recents
CP := /usr/bin/cp -uv 

et tout à la fin

Code: Select all

install: $(TARGET)
	$(CP) $^ $(BIN)/.
	$(CP) *.hpp $(INC)/.
	$(CP) *.a $(LIB)/.
	@echo
	@echo  Installation terminée . N\'oubliez pas de mettre
	@echo  \* DS18B20.conf \*
	@echo dans le répertoire où $(TARGET) doit opèrer
En passant, Gainable a besoin de "DS18B20.conf" edité vers la ligne 906 à ce jour pour fonctionner. Pour quelqu'un qui va sous github et trouve votre gestion de climatiseur (très bien, au demeurant), s'il n'a pas suivi les ca 200 posts de ce fil, il sera un peu meshugga...

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Sun Feb 11, 2024 3:51 pm

ok pouvez m'explique ce que fait mon Makefile :
merci

je vais essayer vos modif demain ! ca seras plus calme a la maison car les gosses seront a l'ecole

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Sun Feb 11, 2024 4:52 pm

ludoraspberry wrote:
Sun Feb 11, 2024 3:51 pm
ok pouvez m'explique ce que fait mon Makefile :
merci
Bon, faire/modifier un Makefile déjà bien écit par danjperron est plus rapide que de (tenter de) l'expliquer
des lignes du type CP := /usr/bin/cp -uv utilisent le
* le bon cp (vous pouvez avoir un executable nommé cp qui fait ... n'imprte quoi (utilisé par les farceurs, les pirates et ceux qui fabriquent le cp officiel)
* avec de bonnes options, sympathiques (-u : ne copie que si la cibles ancienne, -v donne des messages). g++ peut avoir des options à rallonge, ennuyeuses à taper...

Les étiquettes du genre
$(BIB): BB_DS18B20.o gpioPin.o donnent la liste des actions à effectuer

$(TARGET):$(TARGET).o $(BIB) explique à make comment fabriquer TARGET -en pratique Gainable)

%.o: %.cpp explique comment fabriquer des fichiers objets (étape intermèdiare)
clean: nettoye les scories
joli: reformatte au goût de google les sources en c++ (mais pas avec votre standard -Arduino-, )

install: $(TARGET) copie dans un autre repertoire l'executable et la petite bibliotheque statique, ainsi que les *.hpp (qu'un autre "projet" puisse en profiter. J'ai rajouté un message pour dire que ça s'est bien passé, mais qu'il faut penser au fichier de configuration, ce qui n"est pas standard

je vais essayer vos modif demain ! ca seras plus calme a la maison car les gosses seront a l'ecole
Je vais vous en soumettre une dernière :
modifier Gainable.cpp vers la ligne 903,

Code: Select all

  loadDSConfig("DS18B20.conf", ds_ID);
remplacer par (teste existence du fichier DS18B20.conf, et qu'il n'est pas trop bizarroide)

Code: Select all

et le rem  std::cout << "config DS\n";
  // charge info sur les ds18b20
  char  ficConf[654] = "DS18B20.conf";
  FILE * confHan = fopen(ficConf, "r");
  if (NULL == confHan) {
    std::cout <<
        "Le fichier de configuration \n" << ficConf << "\n doit exister\n";
    return (111);
  }
  fclose(confHan);
  loadDSConfig("DS18B20.conf", ds_ID); // protégé contre le cas où il est absent 
  std::cout << "\n configuré\n";
  if (ds_ID.size() < 2) {
    std::cout << "\nVous devez avoir au moins un thermomètre\n";
    return(112);
  }

Ces bouts ont été testés, et peuvent être pratiques ... si on n'a pas mis le fichier de configuration au bon endroit...

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Mon Feb 12, 2024 11:13 am

ludoraspberry wrote:
Fri Feb 09, 2024 8:26 am
oui c'est fait ,

parlons un peux de mes temporisation ! fin si vous voulez :

Code: Select all

// les temporisations

unsigned long departAutoMode;
unsigned long autoMode = 5000000;// 5 secondes (microseconde)
unsigned long departTempoV4V;
unsigned long tempoV4V = 45000000; // 45 secondes
unsigned long departTempoComp;
unsigned long tempoComp = 90000000; // 1.5 minutes
unsigned long departTempoCompDegElec;
unsigned long tempoCompDegElec = 60000000; // 1 minutes
unsigned long departTempoV4VDegElec;
unsigned long tempoV4VDegElec = 60000000; // 1 minutes
unsigned long departTempoTempDegElec;
unsigned long tempoTempDegElec = 300000000; // 5 minutes
unsigned long departTempoDegCh;
unsigned long tempoDegCh = 2700000000; // 45 minutes
unsigned long departTempoDegNat;
unsigned long tempoDegNat = 600000000; // 10 minutes
unsigned long departTempoEgouttage;
unsigned long tempoEgouttage = 300000000; // 5 minutes
unsigned long departTempoFinEgouttage;
unsigned long tempoFinEgouttage = 180000000; // 3 minutes
et j'utilise clock()
par exemple

Code: Select all

    case FIN_EGOUTTAGE_NATUREL:
    cout << "FIN_EGOUTTAGE_NATUREL" << endl << endl;
    
    if (clock() - departTempoFinEgouttage >= tempoFinEgouttage)
    {
      etatsGainable = DEPART;
    }
    else
    {
      desactiveTousRelais();
    }
    
    break;
clock https://cplusplus.com/reference/ctime/clock/
compte le temps effectif utilisé par le programme, pas le temps réel :
exemple : si votre programme "tourne" en même temps que vous naviguez sur le ouaibe avec votre RPi, que vous compilez (on peut faire tout ça à la fois ... et bien d'autres choses), votre programme -qui fait des attentes actives, non blocantes- sera ralenti forcement à un moment... https://stackoverflow.com/questions/876 ... -time-in-c et clock le rendra moins réactif; il en va de m^me si votre CPU est trop chaud (le CPU peut aller alors deux fois plus lentement) ; si vous utilisez difftime https://cplusplus.com/reference/ctime/difftime/, (qui regarde le temps de l'horloge du systeme), même si votre RPi est un peu chargé, votre programme sera plus réactif ... je ne sais pas si c'est gênant ou pas...

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Mon Feb 12, 2024 1:51 pm

salut

avant clean

BB_DS18B20.cpp BB_DS18B20.o gainable gainable.o gpioPin.hpp gpioPin.o Makefile
BB_DS18B20.hpp DS18B20.conf gainable.cpp gpioPin.cpp gpioPinlib.a LICENSE.TXT

donc quand je fait un make clean

BB_DS18B20.cpp DS18B20.conf gpioPin.cpp gpioPinlib.a Makefile
BB_DS18B20.hpp gainable.cpp gpioPin.hpp LICENSE.TXT

je n'arrive pas a démarrer mon programme avec ./gainable dans le terminal

pour : loadDSConfig("DS18B20.conf", ds_ID);
il est a la ligne 761 je sais que cela ne change pas ;
c'est pour le reste

et le rem std::cout << "config DS\n";
// charge info sur les ds18b20
char ficConf[654] = "DS18B20.conf";
FILE * confHan = fopen(ficConf, "r");
if (NULL == confHan) {
std::cout <<
"Le fichier de configuration \n" << ficConf << "\n doit exister\n";
return (111);
}
fclose(confHan);
loadDSConfig("DS18B20.conf", ds_ID); // protégé contre le cas où il est absent
std::cout << "\n configuré\n";
if (ds_ID.size() < 2) {
std::cout << "\nVous devez avoir au moins un thermomètre\n";
return(112);
}


return (111) 111 ???
return(112) 112 ???
pour l'instant je ne trouve pas de ralentissement au niveau du fonctionnement des tempos !
je regarde quand meme "difftime"

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Mon Feb 12, 2024 2:49 pm

ludoraspberry wrote:
Mon Feb 12, 2024 1:51 pm
salut

avant clean

BB_DS18B20.cpp BB_DS18B20.o gainable gainable.o gpioPin.hpp gpioPin.o Makefile
BB_DS18B20.hpp DS18B20.conf gainable.cpp gpioPin.cpp gpioPinlib.a LICENSE.TXT

donc quand je fait un make clean

BB_DS18B20.cpp DS18B20.conf gpioPin.cpp gpioPinlib.a Makefile
BB_DS18B20.hpp gainable.cpp gpioPin.hpp LICENSE.TXT

je n'arrive pas a démarrer mon programme avec ./gainable dans le terminal
Eh bien, c'est que votre Makefile fait bien son travail, comme prévu

Code: Select all

clean:
	$(RM) -rf $(TARGET) *.o
Il nettoye (avec massages d'horreurs à la clef tous les *.o et TARGET qui s'appelle gainable. Pas étonnant que vous ne puissiez pas lancer gainable après ça (et j'ai rajouté quelques lignes dans l'etiquette install pour que ginable aille à un endroit plus sûr qu'un répertoire de développement... où on peut faire parfois quelques bêtises .. j'en fais beaucoup.

Si ce comportement vous chagrine, retirez gainable de la liste des dépendances de clean (mais alors, il risque de se rertouver sous gitlab selon .gitignore!) ou vous tapez tout simplement make

Code: Select all


pour : loadDSConfig("DS18B20.conf", ds_ID);
il est a la ligne 761 je sais que cela ne change pas ;
avec github, on ne sait jamais quelle version on a... Je me tue à retirer les ambiguités...
c'est pour le reste

et le rem std::cout << "config DS\n";
// charge info sur les ds18b20
char ficConf[654] = "DS18B20.conf";
FILE * confHan = fopen(ficConf, "r");
if (NULL == confHan) {
std::cout <<
"Le fichier de configuration \n" << ficConf << "\n doit exister\n";
return (111);
}
fclose(confHan);
loadDSConfig("DS18B20.conf", ds_ID); // protégé contre le cas où il est absent
std::cout << "\n configuré\n";
if (ds_ID.size() < 2) {
std::cout << "\nVous devez avoir au moins un thermomètre\n";
return(112);
}


return (111) 111 ???
return(112) 112 ???
Comme toute fonction entière, main a le droit de retourner une valeur parmi 2**32 (ou 64, je ne sais pas...) -en pratique, on se limite à 128, ce qui fait déjà pas mal- avec la convention suivante:
0 signifie que tout s'est bien passé (0 erreurs à l'éxécution)

Toutes les autres valeurs en dessous de 128 (en va) sont admissibles et désignent des erreurs
-et j'exerce pleinement mon droit!-
en cas d'erreur et permettent de savoir finement où il y a eu une erreur, (le message d'erreur en clair sert au dépanneur; si on a très bien écrit un script bash, https://stackoverflow.com/questions/862 ... s-returned on peut se dépatouiller du code d'erreur numérique , dans un cas avec un scan du bus onewire, dans l'autre cas (on a un fichier bizarroide), c'est desespéré ou étrange)...
Certains logiciels peuvent renvoyer des douzaines de code d'erreur différents (mais pas tous à la fois)...
pour l'instant je ne trouve pas de ralentissement au niveau du fonctionnement des tempos !
je regarde quand meme "difftime"
J'ai essayé d'imaginer -et je ne suis pas le seul- quelles seraient les sources de bizarrerie -forte charge ou surchauffe des CPUs - dans les tempos...
Ce n'est pas parce que "ça marche" -on peut aller à l'hosto sur deux jambes, parfois- que les gens qui testeront (sous github, c'est ouvert à tous) ne rencontreront pas de problèmes. Autant tenter d'en éviter quelques uns...

A noter que les tests empiriques sont considérés comme moins utiles que les relectures.... (google et des tas d'autres ont mis des standards esthétiques de codage pour que les relecteurs puissent lire le plus vite possible, sans laisser passer trop d'erreurs potentielles)

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Mon Feb 12, 2024 4:48 pm

ca ne marche pas quand je fait "make install"
je pense que je dois modifier home/pi/.local/
en home/ludo/.local
ou
home/ludo
et dans l'un ou l'autre je mais mon DS18B20.conf dans un dossier que je creer "bin"
???

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Mon Feb 12, 2024 5:50 pm

ludoraspberry wrote:
Mon Feb 12, 2024 4:48 pm
ca ne marche pas quand je fait "make install"
je pense que je dois modifier home/pi/.local/
en home/ludo/.local
ou
home/ludo
et dans l'un ou l'autre je mais mon DS18B20.conf dans un dossier que je creer "bin"
???
J'ai relu viewtopic.php?t=356629&start=200#p2192282


RACINE (un nom de dossier; s'il n'est pas fait, il faut le faire) est à adapter dans le Makefile ; il faut que RACINE ait trois sous dossiers

bin
include
lib

* bin recevra la version stable de votre executable
* include recevra les *.hpp
* lib recevra la version stable de la librarie statique (.a)

Edité: la commande (sudo) make RACINE=ou_vous_voulez install marche bien ( pour des essais) ; je l'ai vérifiée en allant un peu partout dans ce fil et sur une station de travail sous linux) Le choix de sudo -ou pas_ et de ou_vous_voulez vous incombe...


Comme ça, vous aurez une version stable executable, une version stable de la bibliotheque et des API - *hpp - qui pourra être utilisée à terme... par d'autres executables... (j'ai mis une arborescence quasi standard, un peu simplifiée pour une bibliotheque...) Vous pouvez mettre cette arborescence où vous voulez en modifiant

Code: Select all

RACINE:=/home/pi/.local 
dans le Makefile...

danjperron conseillait de faire une manip équivalent à
RACINE:=/usr/local (préinstallée; utilise des sudo pour y mettre quelque chose "sudo make install" )
Si vous mettez
RACINE:=/home/ludo/.local ça finira par marcher .. pour vous, mais pas pour quelqu'un qui telecharge depuis github...

Vraiment, vous avez UNE ligne à modifier dans le makefile... et, si besoin, trois dossiers à creer...

Edité: la commande (sudo) make RACINE=ou_vous_voulez install marche bien ( pour des essais) ; je l'ai vérifiée en allant un peu partout dans ce fil et sur une station de travail sous linux) Le choix de sudo -ou pas_ et de ou_vous_voulez vous incombe...



Celà n'a rien à voir (ou de façon assez tordue) avec DS18B20.conf : je vous ai mis la solution, il y a 5 ou six posts (désolé, mais j'aurai mon RPi sous la main ce week end..) pour detecter l'absence ou le caractere bizarre de DS18B20.conf
.... Ce sont une vingtaine de lignes de c/c++ (j'utilise quasiment du C) qui permettent à quelqu'un qui tente d'executer ce que vous avez mis sous github de comprendre ... pourquoi son programme plante... (faute d'un fichier de configuration au bon endroit)
Une autre façon de faire pour gerer le fichier de config sans avoir à le ballader dans tous les reprtoires où on envisage de lancer gainable (avec son chemin complet, parfois) est esquissée -pour moi- dans viewtopic.php?p=2189390#p2189390

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Mon Feb 12, 2024 7:46 pm

merci a vous ! donc c'est bon j'ai reussi ce qui me bloquait c'etait
as BIN=$ ( "DS18B20.conf")
je l'ai supprimer

Code: Select all

## pour moi; /usr/local est plus usité
RACINE := /home/pi/.local/
BIN=$(RACINE)/bin/
LIB=$(RACINE)/lib/
INC=$(RACINE)/include/
# copie: verbeuse et uniquement les plus recents
CP := /usr/bin/cp -uv 
j'ai fais cela :

Code: Select all

 et le rem  std::cout << "config DS\n";
  // charge info sur les ds18b20
  char  ficConf[654] = "DS18B20.conf";
  FILE * confHan = fopen(ficConf, "r");
  if (NULL == confHan) {
    std::cout <<
        "Le fichier de configuration \n" << ficConf << "\n doit exister\n";
    return (111);
  }
  fclose(confHan);
  loadDSConfig("DS18B20.conf", ds_ID); // protégé contre le cas où il est absent 
  std::cout << "\n configuré\n";
  if (ds_ID.size() < 2) {
    std::cout << "\nVous devez avoir au moins un thermomètre\n";
    return(112);
  }
 
impecable fonctionne


par contre la je vois pas ou ce trouve gpiod_cpp ??


"J'ai modifié le main de gpiod_cpp"

Code: Select all

#ifdef NISHT_KEINMOL
int main (void) {
#else
int main (int argc, char ** argv) {
#endif
  // Délai de 4.25 secondes environ
  unsigned int  delaymicros = 4250000; // peut aller jusqu'a ca 400 secondes...
  char Config[4444] = "DS18B20.conf";
  char Sortie[4444] = ""; // par defaut, pas de fichier de sortie
  if (argc > 1) {
    for (int iarg = 1; iarg < (argc /* - 1 */); iarg++) {
      if ('-' == argv[iarg][0] ) {
        switch (argv[iarg][1]) {
        case 'h':
        case 'H' : {
          std::cout << argv[0] << "Usage :\n -h : aide\n" ;
          std::cout << " -d -D <Delai us> delai boucles de scrutation (us)\n";
          std::cout << " -f <nom fichier> (Défault :" << Config << ")\n";
          return (1);
        }
        case 'd':
        case 'D' : {
        unsigned int dela = atoi (argv[iarg + 1]);
          std::cout << "delai" << dela << std::endl;
          delaymicros = dela;
          break;
        }
        case 'f':
        case 'I':
        case 'i':
        case 'F' : {
          snprintf (Config, sizeof (Config), "%s", argv[iarg + 1]);
          std::cout<< "fichier config:<" << Config << ">\n";
          break;
        }
        case 'o':
        case 'O' : {
          snprintf (Sortie, sizeof (Sortie), "%s", argv[iarg + 1]);
          std::cout<< "fichier Sortie:<" << Sortie << ">\n";
          std::cout << "not yet implemed\n";
          return-1;
          break;
        }
        } 
        
    }
  }

        

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Tue Feb 13, 2024 6:30 am

C'était un autre fichier que celui sur lequel, gainable.cpp, vous travaillez acruellement.
Je voulais modifier le main (qui a pour arguments d'entrée argc, le nombre d'arguments, et argv une liste d'arguments, de la façon suivante:
lors de l'invocation depuis la ligne de commande ou un script de lancement,
* s'il est invoqué sans argument, il fonctionne (ou pas) avec un nom de fichier par défaut, comme avant.
* s'il est invoqué avec l'argument -h il affiche une aide ( testé partiellement)
./gainable -h
* s'il est invoqué avec deux arguments, -f (ou -F: je tolère les deux) et un nom de fichier, il utilise le nom de fichier comme fichier de config
./gainable -f fichier-de_config_avec-le-chemin-complet

Je ne l'ai pas -pour le moment- greffé à gainable (ça serait plus simple si j'avais un RPi, ce qui m'arrive le week end...); mais c'est une modif longue (chaque option rajoute des lignes de code), fastidieuse à lire, mais assez facile à comprendre et à tester... (je ai fait les deux il y a une ou deux semaines).
Si vous ne gravez plus dans le code "DS1820.conf", mais que vous lui donnez par exemple son chemin complet, la vie, à terme, risque d'être plus facile (ou plus chaotique, avec tout plein de fichiers de configuration)

____________________
Edité
Avec ce que je vois dans les fenêtres de ce forum, vous devriez seulement prendre en compte les étiquettes suivant du switch qui me sert à décoder les options de lignes de commande (les autres etiquettes du switch, a priori, sont du code dormant dans votre cas) :

Code: Select all

 switch (argv[iarg][1]) {
        case 'h':
        case 'H' : {
          std::cout << argv[0] << "Usage :\n -h : aide\n" ;
          std::cout << " -d -D <Delai us> delai boucles de scrutation (us)\n";
          std::cout << " -f <nom fichier> (Défault :" << Config << ")\n";
          return (1);
        }
      case 'f':
        case 'I':
        case 'i':
        case 'F' : {
          snprintf (Config, sizeof (Config), "%s", argv[iarg + 1]);  // Config devrait devenir ficConf  et bien sûr, être déclaré avant!
          std::cout<< "fichier config:<" << Config << ">\n";
          break;
        }
        

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Tue Feb 13, 2024 7:03 am

salut ! pour l'instant cela me sert a rien

danjperron m'a dis que le programme est surchargé , quelle est la solution pour resoudre ce probleme

:
et pour les tempos avec difftime, je trouve tous et son contraire sur le net !
avez vous un exemple

merci

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Tue Feb 13, 2024 9:17 am

ludoraspberry wrote:
Tue Feb 13, 2024 7:03 am
salut ! pour l'instant cela me sert a rien
Mais plus tard? quand vous voudrez vraiment automatiser? (j'ai mis ces verrues pour pouvoir se dépatouiller de programmes à terme en mettant des transmissions d'argument par l'interpreteur de commandes -qui se trouve être aussi, dans une certaine mesure, à la base de tout (AFAIK) système de lancement automatique; je ne pense pas que j'étais dans un état second...)

danjperron m'a dis que le programme est surchargé , quelle est la solution pour resoudre ce probleme
Une solution pourrait consister à couper votre programmme en petits morceaux. J'en vois trois à ce jour (j'en voyais deux il y a un trois mois) :

* l'acquisition des temperatures (pour vous, çe sont des DS1820; ca opeut etre d'autres types de thermomètres, voir des thermomètres transmettant par radio -wifi avec des ESPxxxx ou un picoW)

* la machine d'état, qui lit les resultats de l'acquisition des temperatures -et ignore complètement la nature des thermomètres-
et lit aussi les consignes. Je pense qu'elle n'a absolument pas à se préoccupper de l'affichage, elle gère uniquement les relais... (mais peut rendre compte à un programme d'affichage de l'état du système...)

* une interface, qui ramasse les temperatures (les mêmes que pour l'automate de commande, pour ne pas tourner en bourriquen (sans se soucier de la technologie), les affiche et permet (par des boutons poussoirs ou une ppage ouaibe) de fixer le mode souhaité ... qu'elle transmet à la machine d'état...

Pour la découpe en trois morceaux -ou plus-, seul l'auteur -c'est à dire vous- est compétent... Je pourrais le faire, mais ça pourrait ressembelr à un massacre à la tronçonneuse...
et pour les tempos avec difftime, je trouve tous et son contraire sur le net !
avez vous un exemple

merci
Lisez des docs plus officielles (je vous ai donné un lien) que tout et son contraire (parce que, avec ça, pour qu'un autre que vous se dépatouille, ça sera chaotique) ... Je verrai ce w.e. si je peux faire quelque chose (j'ai du mal, avec une vue basse, à câbler MON DS18B20) et le simple fait de savoir que ça peut poser pb. suffit parfois -on note qu'il y a une impasse en commentaire, et on verra plus tard...

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Tue Feb 13, 2024 9:46 am

Merci ! Ça m’éclaire beaucoup, je suis d’accord avec vous ! effectivement ! J’en vois 3 partis aussi ! Le plus compliqué est de trouver la bonne configuration pour moi , car c’est nouveau ! ! Je pense que au niveau de la gestion ( affichage) vas être plus tôt du ouibe comme vous dites 😜 et comme as souligné aussi Daniel un téléphone tous le monde en as un!
Grand merci as vous

dbrion1
Posts: 435
Joined: Tue May 30, 2023 4:42 pm
Location: North of France

Re: gpio c++

Tue Feb 13, 2024 1:46 pm

ludoraspberry wrote:
Tue Feb 13, 2024 9:46 am
Merci ! Ça m’éclaire beaucoup, je suis d’accord avec vous ! effectivement ! J’en vois 3 partis aussi ! Le plus compliqué est de trouver la bonne configuration pour moi , car c’est nouveau ! !
Tous les problèmes sont un peu nouveaux pour tout le monde

Code: Select all

Je pense que au niveau de la gestion ( affichage)  vas être plus tôt du ouibe comme vous dites 😜 et comme as souligné aussi Daniel  un téléphone tous le monde en as un! 
Pas forcèment: mon zelke (mobile phone en yiddish) n'a que 6 mois et avant, je m'en passais fort bien... comme 10% des français d'un âge certain.
Sans plaisanter, vous feriez bien de garder l'ancienne interface (à 5 boutons et un afficheur rudimentaire) qui peut fort bien coexister avec une nouvelle (l'automate à états n'a besoin "que" de recevoir des consignes d'une interface, quelle qu'elle soit et les valeurs de temperatures)
si l'acquisition de temperatures est bien conçue, tout un chacun (telephone, automate à états, autres) pourra les lire....

ludoraspberry
Posts: 129
Joined: Fri Jul 03, 2020 10:03 pm

Re: gpio c++

Wed Feb 14, 2024 4:35 pm

salut les ceupins , j'ai trouver un truc sympa pour mon projets c'est MagicMirror !
je l'ai installer franchement c'est pas mal du tous
https://magicmirror.builders/

qu'est ce que vous en pensez ??

Return to “Français”