Aide Besoin de conseils pour programation Arduino

J

jpbbricole

Compagnon
" si le clignotant gauche est allumé....
Pour ce faire, il y a 2 petites modifs à faire, je te montre, pour la gauche, à toi de translater pour la droite

clignotEtatG = !clignotEtatG;
clignotEtatD = LOW;

if (clignotEtatG == true)
{
ledClignotementG();
}
else
{
ledTraitementA(LOW);
}


En gras à ajouter et ça marche nickel!

Par contre une chose à échappé à ma vigilence!!!

(boutonG.update());

boutonState = digitalRead(boutonGpin);
if (boutonState != etat_bouton)
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval)
{
previousMillis = currentMillis;

Dans ce cas, tu fais le debouncing toi même et la bibliothèque Debounce2 ne sert à rien!

Je te prépare la version avec les corrections.

Apres ce projet j'en avais un autre un peu plus ardu, je craint le pire....
C'est pour ça qu'il faut être patient, surtout au début afin d'acquérir de bonnes bases.
En fait je n'arrive pas a construire la hiérarchie des variables et des fonctions.
Je vais essayer de préciser tout celà dans un prochain post.

Cordialement
jpbbricole
 
J

jpbbricole

Compagnon
Resalut Mandrak
En fait je n'arrive pas a construire la hiérarchie des variables et des fonctions.
Je vais tenter d'être simple et surtout mon explication est celle d'un autodidacte qui, je pense, a compris, par la pratique.
Il n'y a pas de hiéarchie entre les divers sous-routines, celles qui commencent par void ou par int ou par string etc.

Il en est tout autre pour ce qui est des variables.
J'ai tenté une petite explication:

En résumé, les variables déclarées en dehors d'une structure, en général déclarées tout en haut du programme, sont visibles et modifiables dans TOUT le programme.
Les variables déclarées dans une structure, sont visibles et modifiables uniquement dans la structure (entre {}) dans laquelle elles son déclarées.

Si tu as encore des aspirines...

Cordialement
jpbbricole
 
M

Mandrak

Apprenti
Bonsoir a tous

@jpbbricole
Pour ce faire, il y a 2 petites modifs à faire
Ca parait tellement simple..:shock:, j'ai chercher toute la journée:sad:.
Ca doit être un réel plaisir, de maitrisé le C comme tu le fait.

(boutonG.update());
Quand je change une fonction, variable ou autre, je fait un essai en réel, il ce trouve
qu'a la compilation je n'avais pas d'erreur et quand j'ai fais l'essai ca fonctionner bien,
donc par déduction je me suis dit, bon c'est ok.
Maintenant a te lire, je m’aperçois que c'est déroutant...

afin d'acquérir de bonnes bases.
Je m'attendais pas a ce que la base soit si vaste....:shock:

Tu verras, c'est nettttttttttttttttttement plus simple!
Oui d'accord avec toi, on ne ce sert pas d'une clé a molette comme marteau, un mécano te vois faire sa il monte au plafond car lui il sais qu'il ne faut pas, le tout est de savoir...
Maintenant que j'ai vue comment tu a utilisé la bibliothèque Bounce2, j'en ai pris exemple et modifier la fonction coupe contacte, ca fonctionne j'ai seulement rajouter deux trois bricole pour avoir l'afficheur Lcd, et effectivement le code s'en trouve allégé.

qui, je pense, a compris, par la pratique.
Au vu de ton niveau, ca doit faire quand même un sacré bout de temps que tu pratique...

En résumé, les variables déclarées en dehors d'une structure,etc....
Ca je l'avais plus ou moins compris, plutôt moins que plus, la ou j'ai du mal, comment dire..
Est de choisir la bonne variable ou fonction pour une application précise, prenons l'exemple des clignotants, au départ de l'action je ne savais pas quoi choisir pour construire cette application,
une boucle For, if, else if, bollenne, long, pas long, etc,etc...
aujourd'hui j'ai essayer avec des if, eles if... des fois ca compilé mais ca ne fonctionner pas ou alors les led danser la salsa.
J'ai consulté un bon nombre d'exemple pour me faire une idée,et essayer de comprendre le déroulement du code qui me semblais correspondre a mes besoin, mais.....:cry:

Pour le quart d'heure je te remercie 1000 fois du temps que tu m’accorde, c'est très sympa de ta part, je vais faire une pause de quelques jour car la je sature.

Je met le code au grand complet en Pj, tout fonctionne, maintenant te dire si il es écrit d'une manière académique et optimal c'est une autre histoire.:lol:


Si tu as encore des aspirines...
J attend la semi-remorque..:wink:

Bonne soirée
@+Cordialement

 
M

Mandrak

Apprenti
Bonsoir a tous

Apres cette pause de quelques jours je mis suis remis, j'ai reçus le module Rtc1307 et commencer les premiers essais.
Tous content de voir la date et l'heure s'affiché comme je le souhaite sur l'ecran Lcd et qui est syncro avec l'heure de mon Pc, je me suis dit nickel, mais ma désillusion fut grande quand j'ai débrancher et rebrancher le câble Usb de l'arduino, en effet l'arduino a garder la date mais pas l'heure !!, l'heure c'est arrêter au moment ou je l'avais débrancher.
Dans le doute je vérifie la pile, elle est bonne.
Question, faut il une alimentation permanente ?, dans ce cas a quoi sert la pile!!
Bref la je sèche, je ne trouve pas ou ca coince.

Pour être complet sur le montage voici je que j'ai fais:

Le module rtc1307 que j'ai recus
images.jpg


Le cablage que j'ai effectué ( La led et la résistance ne font pas parti du montage).

images2.jpg


Et pour finir le code (ds1307.ino)que j'ai utilisé.(code de la bibliothèque RTClib)

Bonne soirée
@+Cordialement
 
J

jpbbricole

Compagnon
Salut Mandrak
Essaie en déconnectant l'affichage du bus I2c, avec le module RTC seul.
En même temps, recherche comment créer un bus I2c afin d'y connecter plusieurs modules. Chez moi, j'ai mis 1,5kOhm sur SDA et SCL.


Bonne soirée
jpbbricole

PS: j'ai retrouvé mon module RTC DS1307 au fond d'un tiroir depuis environ 3 mois et toujours à l'heure. (dérive ~5min.)
 
Dernière édition:
M

Mandrak

Apprenti
Bonsoir Jpbbricole

j'ai fait une manipulation assez bizarre, mais ca fonctionne.
Donc éteint l'arduino, enlever le rtc1307, enlever sa pile, remis en route l'arduino, remis en place le rct1307, puis remis la pile et appuyer sur le bouton reset de l'arduino.:shock:
Les mystères de l'informatique......
A la mise a jour il y a 45 secondes de retard par rapport au Pc, ca restera comme ca, je ne vais pas chipoter.


Bonne soirée
@+
Cordialement
 
M

Mandrak

Apprenti
Bonsoir a tous
@jpbbricole
Ouups, j'avais pas fais attention que tu avait mis un lien, merci je le met de coté.

En faisant des recherches sur les Lcd je suis tombé la dessus, Nextion.
Ca a l'air d’être sympa a un prix abordable, selon la taille évidement.
Pour retour d'info, qui a déjà essayer?
Bonne soirée
@+Cordialement
 
M

Mandrak

Apprenti
Bonsoir a tous

En attendant mon Oled qui n'est toujours pas arrivé:x j'ai commencer la parti hardware,
les boutons avec leur support.
j'ai tailler les supports dans du 7075 (j'avais rien d'autre) puis anodisé, les boutons sont étanches,
ma dit le monsieur qui me les a vendu:smileJap:, mais étanche combien de temps....
Vibram, comme promis voici des photos d'une parti du projet.

comodo2.jpg


comodo1.jpg


Bonne soirée
@+Cordialement
 
J

jpbbricole

Compagnon
Moi de même
C'est MA GNI FIQUE!

Bonne nuit
jpbbricole
 
M

Mandrak

Apprenti
Bonsoir a tous

Merci pour les compliments.

Je suis sur le point d'acheter un module Bluetooth, cependant il y a plusieurs modèles et ne sais lequel choisir ( la connexion ce fera entre Arduino et une tablette Android 4.4)
Quel es la différence entre ces deux modèles ?


Module Bluetooth HC-06 pour Arduino Emetteur Récepteur RF 4 Pin
Bluetooth1.jpg



Arduino IOS HM-10 BLE Bluetooth 4.0 CC2540 CC2541 Serial Wireless Module TE476
Bluetooth2.jpg


Bonne soirée
@+Cordialement


 
J

jpbbricole

Compagnon
Salut Mandrak
Je pense que la différence est dans le type Arduino IOS HM-10, d'après ce que j'ai pu voire sur le net, c'est essentiellement pour la marque à la pomme.
Le modèle HC-06 est le plus utilisé et très facile d'emploi. Le seul truc à faire gaffe, c'est pour le paramétrage (nom, vitesse etc...) Celà se fait au moyen d'un terminal et il faut préparer les commandes AT dans le blocnote et copier et coller les commandes. Si tu tapes les commandes à la main, celà ne passe pas!.
Mais les modules livrés sont directement utilisables avec des paramètres par défaut.

Bonne soirée
jpbbricole
 
B

bipbip30

Compagnon
bjr, hier soir ce lien fonctionnait et puis là ça marque erreur
 
G

gégé62

Compagnon
merci Mandrak, ça marche.
je ne connaissais pas ce site qui a l'air vraiment top. Je l'ai mis dans ma rubrique "shields" d'arduino (il commence à y avoir beaucoup de trucs là-dedans :wink: )
bonne journée
 
M

Mandrak

Apprenti
Bonjour a tous

J'ai enfin reçus mon Oled 1.3" et commencer a l'explorer avec la bibliothèque U8glib.
J'ai réussi a écrire du texte inséré des cadres, ronds, ect... mais...
Mon Oled utilise le driver SH1106, et ne fonctionne pas avec la bibliothèque Adafruit_SSD1306
apriori normal puis ce que il utilise pas le même driver.
Question, il y a il un moyen pour que je puise utilisé mon Oled avec la bibliothèque Adafruit ?
Pourquoi utilisé la bibliothèque Adafruit alors que la U8glib fonctionne !.
j'ai explorer le fonctionnement de la bibliothèque Adafruit et elle me "semble" plus conviviale a utilisé, en effet si j'ai réussi a écrire du texte changer les Font dessiner des cadre et autres, je ne suis pas arrivé a y intégré une horloge avec le rtc i2c Ds 1307 comme j'avais fais pour l'écran Lcd, j'ai que des erreurs de compilations, j'aurais voulu essayer avec la bibliothèque Adafruit.

Bonne journée
@+Cordialement
 
M

M4vrick

Compagnon
Malheureusement non sauf à réécrire la bibliothèque.
Celle de Adafruit est concue pour les écran Oled adafruit avec le controleur SSD1306, les Oled 'noname' de ebay ou aliexpress sont basé sur le SH1106 comme tu l'as remarqué.

Je te conseille de persévérer avec la bibliothèque U8glib, elle est bien plus performante et complète que celle d'Adafruit. Mais elle est bien moins conviviale, j'ai aussi eu beaucoup de mal à y passer au début.
 
M

Mandrak

Apprenti
Bonjour a tous


Si toute fois l'affichage avec le Lcd20x4 et la bibliothèque liquidcrystal, est facile a utilisé , il en est tout autres chose de la bibliothèque U8glib.
Vu que je n'ai d'autre choix que d'utilisé la bibliothèque U8glib pour faire fonctionner mon Oled, je mis suis plonger, pour le moment j'ai réussi a y affiché une horloge (voir la vidéo) et afficher un l’état (ON ou OFF), mais malheureusement pas les deux en même temps, effectivement lorsque l'horloge se rafraichie ca m’efface le texte, apriori normale vue que l'affichage de l'horloge passe par la boucle loop, je ne sais pas comment contourné le problème, j'ai essayer plusieurs méthodes mais elles ne fonctionne pas.
J'ai repris un bout de code de ce qu'il a était fait jusqu’à présent pour me faire la main, que j’étendrais au reste du code pour les autres fonctions (cligno, phare, ect...), une fois que j'aurais compris le mécanisme.

@jpbbricole
Si tu répond, ne me donne pas du code tout fait, certes ça fera avancé mon Smilblik, mais ne m’aidera pas a la l'assimilation du langage C, j'aurai plutôt besoin d'une piste, orientation, ou explication.
Tu en a déjà fait beaucoup.

@+Cordialement

Ps: le bout de code repris de l'existant en PJ



 
J

jpbbricole

Compagnon
Si tu répond, ne me donne pas du code tout fait
Compris!
Première remarque:
Tu as 2 routines quasi identiques et pour la maintenance d'un programme, c'est pas bon
void oledMoteurOFF() et void oledMoteurON()
Le mieux dans ce cas, que tu retrouveras très souvent dans tes programmes c'est de créer une
routine commune avec transmission de paramètre(s).

En premier tu défini une variable string global qui contiendra le texte de l'état. (MOTEUR ON ou MOTEUR OFF), ensuite tu crée
void oledMoteurONOFF(int MoteurEtat)
Dans la routine que l'on vient de créer, par une condition if, en fonction de la variable transmise, tu mets à jour cette variable globale.

Ainsi, dans la routine void draw(), tu affiche cette variable globale en même temps que l'horloge simplement avec un u8g.drawStr(33,58,nom de ta variable globale);.
Dans void loop(), après digitalWrite(led_DemPin,ledStateDM); il suffit de mettre oledMoteurONOFF(ledStateDM);

Le reste
oledMoteurOFF();
if (ledStateDM==LOW)
{
oledMoteurON();
}
ne sert plus, enfin je crois!

Je te spécifie que je n'ai, malheureusement, ce type de matériel, donc j'y vais un peu au pif!
Toujours à ta disposition pour des questions supplémentaires.

jpbbricole
 
M

Mandrak

Apprenti
Bonsoir Jpbbricole

Merci pour ta patience et de m'avoir répondu si rapidement, c'est franchement pas simple pour un novice, il y a tellement de chose a retenir...
On va y aller par etape.

En premier tu défini une variable string global qui contiendra le texte de l'état. (MOTEUR ON ou MOTEUR OFF)
Donc ca donne sa: String moteur_On="MOTEUR ON"; qui veut dire que variable sera appelé dans u8g.drawStr(33,58,moteur_On);.


void oledMoteurONOFF(int MoteurEtat)
la variable int MoteurEtat ne peut être lu que dans la fonction void oledMoteurONOFF si je ne me trompe.
Dans la routine que l'on vient de créer, par une condition if, en fonction de la variable transmise, tu mets à jour cette variable globale.
Pas sur d'avoir compris, bon je me lance, ca devrait donné ca !?:

void oledMoteurONOFF(int MoteurEtat) // la routine que l'on vient de créer
{
if (MoteurEtat=ledStateDM); //en fonction de la variable transmise (pas sur de moi, tu me dira)
{
moteur_on=1; // tu mets à jour cette variable globale
}
}
J'ai beau me creusé la tête, j'ai du mal a interprété "en fonction de la variable transmise, tu mets à jour cette variable globale"

Je te spécifie que je n'ai, malheureusement, ce type de matériel
Pas de problème, Je ferais l'essai de mon coté.

Toujours à ta disposition pour des questions supplémentaires.
:prayer: je pense que si tu ne m'avais répondu a mes interrogations l'arduino aurait fini dans le casier 21
Merci encore.

Bonne soirée
@+Cordialement
 
J

jpbbricole

Compagnon
Salut Mandrak
Donc ca donne sa: String moteur_On="MOTEUR ON"; qui veut dire que variable sera appelé dans u8g.drawStr(33,58,moteur_On);.
Tu y est presque:
Tout en haut du programme:
String moteur_OnOff; // La valeur de la variable sera modifiée dans void oledMoteurONOFF(int MoteurEtat)
et pour l'affichage dans void draw()
u8g.drawStr(33,58,moteur_OnOff);

Pas sur d'avoir compris, bon je me lance, ca devrait donné ca !?:
Alors, là tu n'y est pas encore tout à fait.

dans void oledMoteurONOFF(int MoteurEtat)
if (MoteurEtat==LOW); //en fonction de la variable transmise (pas sur de moi, tu me dira) oui
{
moteur_OnOff="MOTEUR OFF"; // tu mets à jour cette variable globale
}
else
{
moteur_OnOff="MOTEUR ON";
}

Dans void loop(), tu appelle oledMoteurONOFF(ledStateDM) donc tu appelle cette routine en tranmettant le valeur ledStateDM.
Ca peut paraître déroutant de "partir" de oledMoteurONOFF(ledStateDM) et d'arriver oledMoteurONOFF(int MoteurEtat) avec un nom de paramètre différent.
Mais il faut comprendre que cette routine oledMoteurONOFF est à disposition de tout le programme, l'important est le type de paramètre, int dans cet exemple.
Tu pourrais très bien invoquer cette routine oledMoteurONOFF(LOW) ou oledMoteurONOFF(HIGH) ou oledMoteurONOFF(1) ou oledMoteurONOFF(0)....

Bonne nuit
jpbbricole

 
M

Mandrak

Apprenti
Bonjour Jpbbricole

// La valeur de la variable sera modifiée dans void oledMoteurONOFF(int MoteurEtat)
et pour l'affichage dans void draw()
Ca j'ai assimilé et compris le mécanisme.

Ca peut paraître déroutant de "partir" de oledMoteurONOFF(ledStateDM) et d'arriver oledMoteurONOFF(int MoteurEtat) avec un nom de paramètre différent
"Déroutant", c'est rien de le dire, ceux qui on crée ce langage devait être :sadomaso56:pour se torturé l'esprit ainsi, pourquoi faire simple alors que l'on peut faire compliqué:smileJap: (j'ai du vécu dans un autre domaine).

Pour résumé:

int ledStateDM = LOW; //l’état de la led a été initialisé a bas (ou 0 )
pinMode(bouton_DemPin, INPUT_PULLUP); // l’état du bouton est a haut (ou 1) car Pullup

void loop()
{
if ( boutonDM.fell() ) //On appui sur le bouton l’état passe a bas (ou 0)
{
ledStateDM = !ledStateDM; //on inverse l’état de la led qui de bas passe a haut
digitalWrite(led_DemPin,ledStateDM);// ledStateDM qui es a 1=>digitaleWrite dit=>led_DemPin +5V
Tu pourrais très bien invoquer cette routine
oledMoteurONOFF(LOW)
if (ledStateDM==LOW)
{
oledMoteurONOFF(HIGH);
}
}

Je n'arrive pas a assimilé l'interaction de
oledMoteurONOFF(ledStateDM) avec oledMoteurONOFF(int MoteurEtat)
En définitive je ne vois pas quel rôle vient joué intMoteurEtat, si ce n'ai que cette variable fait parti de la fonction oledMoteurONOFF que tu déclare a l’état bas.

Bonne journée.
@+Cordialement
 

Sujets similaires

V
Réponses
3
Affichages
923
vibram
V
F
Réponses
6
Affichages
25 595
fraiddy
F
G
Réponses
88
Affichages
8 767
gaston83
G
G
Réponses
31
Affichages
42 223
gaston83
G
G
Réponses
123
Affichages
19 020
gaston83
G
G
Réponses
0
Affichages
574
gaston83
G
zygo4619
Réponses
34
Affichages
35 391
zygo4619
zygo4619
Moi33
Réponses
3
Affichages
47 955
speedjf37
S
V
Réponses
62
Affichages
5 196
vibram
V
Mcar
Réponses
65
Affichages
11 571
Mcar
R
Réponses
55
Affichages
49 836
jacounet
jacounet
U
Réponses
85
Affichages
7 105
Hubert86
H
2
Réponses
27
Affichages
905
jean-jacques
J
Haut