Arduino

  • Bricoleur22
  • Portrait de Bricoleur22
  • Hors Ligne
  • Membre premium
  • Membre premium
  • J'ai 66 ans et il me manque qu'une seule dent
Plus d'informations
il y a 2 ans 8 mois #46 par Bricoleur22
Réponse de Bricoleur22 sur le sujet Arduino
Dans cet image tu peux voir qu'a la

ligne 1 (1a et 1b)
J'ai mis deux instructions:
st_txt1 = "Bonjour"; //Attribue un texte a une string
break; //Le mot le dit, tout s'arrête là
J'aime parfois mettre beaucoup de commande sur une même ligne, parfois plus facile a suivre visuellement.

Ligne 2
Je fais simplement un break, ainsi la ligne 3 ne sera jamais exécuter

Ligne 3
Exécute une commande si aucune autre n'a envoyer la commande break plus haut. Dans cette exemple cette commande annulerait celle faite précédemment si c'est la cas.



Voici plus bas une autre façon de structurer switch et case, mais j'aime pas, c'est trop encombrant !


///////////////////////////////
switch (inByte) {
     case 'j':
          st_txt1 = "Bonjour";
          break;   
     case 's':
          st_txt1 = "Bonsoir";
          break;   
     case 'd':
          break;
     case 'n':
          st_txt1 = "Bonne nuit";
          break;    
     case '?':
          break;   
     case 'R':
          break;   
     case 't':
          break;   
      case 'P':
          break;  
      default:
          st_txt1 = "Valeur inconnue";
  }
////////////////////////////////////

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 8 mois #47 par Ephefrere
Réponse de Ephefrere sur le sujet Arduino
Dison que j'en arrache plus avec la "syntaxe" qu'avec la compréhension et le fonctionnement des commandes ou instruction car ils sont bien expliquer dans les différente documentation  mais pour la syntaxe c'est vraiment ordinaire de trouver l'information 


Merci Mr_Toupie c'est très apprécier votre aide :)  et ça améliore ma compréhension

Et toi aussi Brico merci pour tous ce bon travail qui me permet d'en apprendre beaucoup plus :)

Je continu mes lectures et exercices genre 101.3

'

Un arbre tordu vit sa vie, un arbre droit finit en planche…

Connexion ou Créer un compte pour participer à la conversation.

  • Bricoleur22
  • Portrait de Bricoleur22
  • Hors Ligne
  • Membre premium
  • Membre premium
  • J'ai 66 ans et il me manque qu'une seule dent
Plus d'informations
il y a 2 ans 8 mois #48 par Bricoleur22
Réponse de Bricoleur22 sur le sujet Arduino
Voici un autre façon de mieux structurer son code. Dans celle que je démontre plus bas, j'ai simplement déplacé une partie du code de la boucle de hier en créant une fonction en dehors de cette boucle ! Le gros avantage est que tu ne l'as pas dans la face lorsque cette fonction est a point ! Imagine avec 393  lignes de code dans cette seule boucle comme le code de mon dépoussiéreur... Ce n'est pas gérable et décourageant !

Voici un exemple : 

 

/////////////////////////////////////////////////
String st_txt1 = "Période inconnue, tu dois entrer s ou j ou n";
int inByte;

void setup() {  Serial.begin(9600);}

void loop() {
 delay(1000);
   if (Serial.available() > 0) {
     inByte = Serial.read();
     Go(inByte);
   }
  Serial.println (st_txt1);
}

void Go(int i){
     switch (i) {
      case 'j': st_txt1 = "Bonjour"; break;   
      case 's': st_txt1 = "Bonsoir"; break;   
      case 'd': break;
      case 'n': st_txt1 = "Bonne nuit"; break;    
      case '?': break;   
      case 'R': break;   
      case 't': break;   
      case 'P': break;  
      default: st_txt1 = "Valeur inconnue";
     }
}
////////////////////////////////////////////////////////////////////////////////////////
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois #49 par Mr_Toupie
Réponse de Mr_Toupie sur le sujet Arduino

void loop() {
 delay(1000);
   if (Serial.available() > 0) {
     inByte = Serial.read();
     Go(inByte);
   }
  Serial.println (st_txt1);
}


 
Une légère modification au code pour que le texte n'apparaisse uniquement lorsqu'il y a une activité sur le port série au lieu d'afficher constamment à toute les secondes. C'est mieux ainsi si on a à effectuer d'autres opérations dans et ne voulons pas attendre 1 seconde pour les effectuer:

void loop() {
   if (Serial.available() > 0) {
     inByte = Serial.read();
     Go(inByte);
     Serial.println (st_txt1);
   }

  // Faire autre chose ici ...
}


Et si tu veux avoir le même code, même fonctionalité mais plus condensé et épuré:

///////////////////////////////////
void setup() {  
  Serial.begin(9600);
}

void loop() {
   if (Serial.available() > 0) Serial.println (Go(Serial.read()));
}

String Go(int i) {
  String st_txtl;
  switch (i) {
    case 'j': st_txtl = "Bonjour"; break;   
    case 's': st_txtl = "Bonsoir"; break;   
    case 'n': st_txtl = "Bonne nuit"; break;    
    default: st_txtl = "Période inconnue, tu dois entrer s ou j ou n";
  }
  return st_txtl;
}
///////////////////////////////////







 
Les utilisateur(s) suivant ont remercié: Bricoleur22

Connexion ou Créer un compte pour participer à la conversation.

  • Bricoleur22
  • Portrait de Bricoleur22
  • Hors Ligne
  • Membre premium
  • Membre premium
  • J'ai 66 ans et il me manque qu'une seule dent
Plus d'informations
il y a 2 ans 7 mois #50 par Bricoleur22
Réponse de Bricoleur22 sur le sujet Arduino

Une légère modification au code pour que le texte n'apparaisse uniquement lorsqu'il y a une activité sur le port série au lieu d'afficher constamment à toute les secondes. C'est mieux ainsi si on a à effectuer d'autres opérations dans et ne voulons pas attendre 1 seconde pour les effectuer: 
 
En effet c'est plus clean comme ça ... Et en plus on utilise quelques octets de moins ...

Je viens tester ton code (copier/coller), et c'est beaucoup mieux, où je suis surpris est que lorsque la string est vide la commande Serial.println(st_txt1) en n'envoit pas le chr(13) pour le changement de ligne ! C'est bon a savoir !

Merci du truc !

Connexion ou Créer un compte pour participer à la conversation.

  • Bricoleur22
  • Portrait de Bricoleur22
  • Hors Ligne
  • Membre premium
  • Membre premium
  • J'ai 66 ans et il me manque qu'une seule dent
Plus d'informations
il y a 2 ans 7 mois #51 par Bricoleur22
Réponse de Bricoleur22 sur le sujet Arduino

Effectivement, la commande "Switch" du langage Arduino ne supporte pas les comparaisons avec des chaînes de caractères.

Par contre, tout dépendemment de ce que tu veux faire, il est possible d'utiliser un "énumérateur" pour rendre la chose plus facile à lire pour un humain:

 

J'allais te reposer la question, et oupps je vois que tu avais répondu hier !

C'est décevant pour switch. En vb j'utilise souvent Select Case ce qui est l'équivalent de switch. Cette fonction accepte les string, integer, long, double et boolean.

Je n'ai jamais utilisé enum, peut-être ais-je passé a coté de quelques choses de différent !

Selon toi, est-ce que ca fait une différence de la déclarer ainsi :
int Essences[4] { INCONNU, SAPIN, EPINETTE, ERABLE };    // tableau



 

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois #52 par Mr_Toupie
Réponse de Mr_Toupie sur le sujet Arduino


C'est important car, avec Arduino, la mémoire est assez limitée et ce surtout quand on commence à utiliser des libraries ou vouloir utiliser des images et des polices de charactères variés pour un  écran LCD ou OLED.
 
Les utilisateur(s) suivant ont remercié: Bricoleur22

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois #53 par Mr_Toupie
Réponse de Mr_Toupie sur le sujet Arduino

 

Selon toi, est-ce que ca fait une différence de la déclarer ainsi :
int Essences[4] { INCONNU, SAPIN, EPINETTE, ERABLE };    // tableau




 

Pour que ton énoncé fonctionne tu dois faire ceci :

const int INCONNU = 0;
const int SAPIN = 1;
const int EPINETTE = 2;
const int ERABLE = 3;
int Essences[4] { INCONNU, SAPIN, EPINETTE, ERABLE };

Tu dois assigner une valeur à chaque constante avant de les assigner à une chaine de nombre (array of integer)

Tandis que « enum » assigne automatiquement un nombre entier pour chaque élément du enum.

Encore une fois, avec « enum » nous avons un code plus condensé et performant.
Les utilisateur(s) suivant ont remercié: Bricoleur22

Connexion ou Créer un compte pour participer à la conversation.

  • Bricoleur22
  • Portrait de Bricoleur22
  • Hors Ligne
  • Membre premium
  • Membre premium
  • J'ai 66 ans et il me manque qu'une seule dent
Plus d'informations
il y a 2 ans 7 mois #54 par Bricoleur22
Réponse de Bricoleur22 sur le sujet Arduino
Une autre façon que j'aime est de bien compartimenter mes fonctions surtout lorsque le code devient trop gros a gérer.
Comme celle-ci :

Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

  • Bricoleur22
  • Portrait de Bricoleur22
  • Hors Ligne
  • Membre premium
  • Membre premium
  • J'ai 66 ans et il me manque qu'une seule dent
Plus d'informations
il y a 2 ans 7 mois #55 par Bricoleur22
Réponse de Bricoleur22 sur le sujet Arduino

const int INCONNU = 0;
const int SAPIN = 1;
const int EPINETTE = 2;
const int ERABLE = 3;
int Essences[4] { INCONNU, SAPIN, EPINETTE, ERABLE };

Tu dois assigner une valeur à chaque constante avant de les assigner à une chaine de nombre (array of integer)
Tandis que « enum » assigne automatiquement un nombre entier pour chaque élément du enum.
Encore une fois, avec « enum » nous avons un code plus condensé et performant.
 
Oupps c'est que je faisais, mais j'avais oublié le  détail que je devais lui attribuer une valeur , je me souviens plus dans quel contexte mais c'était différents comme suit, mais peut-être était-ce tordu :

const int Nbr_outils = 6;
int Relai = 0 ;                         //Ne pas modifier
int AmpereMetre5A = 185;                //Ne pas modifier
int AmpereMetre20A = 100;               //Ne pas modifier
int AmpereMetre30A = 66;                //Ne pas modifier
int TypeDeSonde[Nbr_outils] = {Relai, AmpereMetre5A, AmpereMetre20A, AmpereMetre30A, Relai, Relai};

J'aurais peut-être  pu la déclarer ainsi mais probablement plus difficile a suivre. :
int TypeDeSonde[6] = {0, 185, 100, 66, 0, 0};

 

Connexion ou Créer un compte pour participer à la conversation.

  • Bricoleur22
  • Portrait de Bricoleur22
  • Hors Ligne
  • Membre premium
  • Membre premium
  • J'ai 66 ans et il me manque qu'une seule dent
Plus d'informations
il y a 2 ans 7 mois - il y a 2 ans 7 mois #56 par Bricoleur22
Réponse de Bricoleur22 sur le sujet Arduino
Voici la compartimentation de mon code dans de fausses librairies:
Les variables tous a la même place, et mes déclaration tous ailleurs... etc ....

Cliquer deux fois pour agrandir au maximum :

Dernière édition: il y a 2 ans 7 mois par Bricoleur22.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois #57 par Mr_Toupie
Réponse de Mr_Toupie sur le sujet Arduino
Bon, je pense qu'on a assez pris en otage le fils de discussion de Ephefrere.



Ne vous gênez pas pour poser des questions et on tentera de vous répondre.

 
Les utilisateur(s) suivant ont remercié: Bricoleur22

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois - il y a 2 ans 7 mois #58 par Ephefrere
Réponse de Ephefrere sur le sujet Arduino
Votre discutions est fort intéressante et remplis de plein d'information que je m'efforce d'assimiler en même temps que mes différentes lecture

Ça vas me prendre un plan de travail consacrer exclusivement à ça, mon inspecteur de chat a déjà mis son nez et j'en ai eu pour un bon boute à tous retrouver le stock hi hi hi

Je vous reviens avec des questions un peu plus pointu dans les prochain jours

Merci

Un arbre tordu vit sa vie, un arbre droit finit en planche…

Dernière édition: il y a 2 ans 7 mois par Ephefrere.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 7 mois - il y a 2 ans 7 mois #59 par Ephefrere
Réponse de Ephefrere sur le sujet Arduino
Petit défit purement éducatif 

En ouput l'Ardino développe 5V  avec 40mA  max  selon les spec 

L'objectif: énergiser un relais 12 volts (1432790-1) avec un coil qui demande 133.3 mA   avec 7 v minimum pour clancher un moteur 12V de 20A

Le 12V provient d'une batterie de voiture 

Bien sur il existe des relais 5V avec moins de 40mA  (coil) qui pourrai driver ce relais mais c'est pas ça le défit

Comment avec résistance, condensateur et autre truc électronique  en venir à produire du 12 volts  avec 133 mA durant un bref instant le temps d'actionner le relais 12V qui vas se "latcher" par la suite avec sont 12 V de la batterie 

Spec du relais : 1432790-1 TE Connectivity - Power Relays - Distributors, Price Comparison, and Datasheets | Octopart component search

Juste pour vous dire hier j'ai réussi à démêler les codes de couleur sur une résistance mais j'en ai encore à en apprendre sur leur fonctionnement hi hi hi

Merci

Un arbre tordu vit sa vie, un arbre droit finit en planche…

Dernière édition: il y a 2 ans 7 mois par Ephefrere.

Connexion ou Créer un compte pour participer à la conversation.

  • Bricoleur22
  • Portrait de Bricoleur22
  • Hors Ligne
  • Membre premium
  • Membre premium
  • J'ai 66 ans et il me manque qu'une seule dent
Plus d'informations
il y a 2 ans 7 mois #60 par Bricoleur22
Réponse de Bricoleur22 sur le sujet Arduino
Tu ne dois pas alimenter un coil de relai avec le ouput d'une carte arduino ... tu risque de la sauter !
Tous mes relais son alimentés par une source  externe en passant par une sorte de optocoupleur ou transistor pour le déclencher !
Il y a ce type de relai qui sont déjà monté pour ça  avec un trigger  au cout de 3$ et qui demande que 1 ou 2 mA à la carte arduino:





 
Les utilisateur(s) suivant ont remercié: Ephefrere

Connexion ou Créer un compte pour participer à la conversation.

We use cookies
Nous utilisons des cookies sur notre site web. Certains d’entre eux sont essentiels au fonctionnement du site et d’autres nous aident à améliorer ce site et l’expérience utilisateur (cookies traceurs). Vous pouvez décider vous-même si vous autorisez ou non ces cookies. Merci de noter que, si vous les rejetez, vous risquez de ne pas pouvoir utiliser l’ensemble des fonctionnalités du site. L'information recueillie ne sert qu'à l'utilisation adéquate du site LaMortaise.com