Arduino
- Bricoleur22
- Hors Ligne
- Membre premium
- J'ai 66 ans et il me manque qu'une seule dent
- Messages : 13541
- Remerciements reçus 4323
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.
- Ephefrere
- Auteur du sujet
- Hors Ligne
- Membre premium
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
- Hors Ligne
- Membre premium
- J'ai 66 ans et il me manque qu'une seule dent
- Messages : 13541
- Remerciements reçus 4323
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.
- Mr_Toupie
- Hors Ligne
- Membre premium
- Messages : 2324
- Remerciements reçus 467
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() {
delay(1000);
if (Serial.available() > 0) {
inByte = Serial.read();
Go(inByte);
}
Serial.println (st_txt1);
}
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;
}
///////////////////////////////////
Connexion ou Créer un compte pour participer à la conversation.
- Bricoleur22
- Hors Ligne
- Membre premium
- J'ai 66 ans et il me manque qu'une seule dent
- Messages : 13541
- Remerciements reçus 4323
En effet c'est plus clean comme ça ... Et en plus on utilise quelques octets de moins ...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:
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
- Hors Ligne
- Membre premium
- J'ai 66 ans et il me manque qu'une seule dent
- Messages : 13541
- Remerciements reçus 4323
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.
- Mr_Toupie
- Hors Ligne
- Membre premium
- Messages : 2324
- Remerciements reçus 467
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.
Connexion ou Créer un compte pour participer à la conversation.
- Mr_Toupie
- Hors Ligne
- Membre premium
- Messages : 2324
- Remerciements reçus 467
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.
Connexion ou Créer un compte pour participer à la conversation.
- Bricoleur22
- Hors Ligne
- Membre premium
- J'ai 66 ans et il me manque qu'une seule dent
- Messages : 13541
- Remerciements reçus 4323
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
- Bricoleur22
- Hors Ligne
- Membre premium
- J'ai 66 ans et il me manque qu'une seule dent
- Messages : 13541
- Remerciements reçus 4323
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 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.
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
- Hors Ligne
- Membre premium
- J'ai 66 ans et il me manque qu'une seule dent
- Messages : 13541
- Remerciements reçus 4323
Connexion ou Créer un compte pour participer à la conversation.
- Mr_Toupie
- Hors Ligne
- Membre premium
- Messages : 2324
- Remerciements reçus 467
Ne vous gênez pas pour poser des questions et on tentera de vous répondre.
Connexion ou Créer un compte pour participer à la conversation.
- Ephefrere
- Auteur du sujet
- Hors Ligne
- Membre premium
Ç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…
Connexion ou Créer un compte pour participer à la conversation.
- Ephefrere
- Auteur du sujet
- Hors Ligne
- Membre premium
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…
Connexion ou Créer un compte pour participer à la conversation.
- Bricoleur22
- Hors Ligne
- Membre premium
- J'ai 66 ans et il me manque qu'une seule dent
- Messages : 13541
- Remerciements reçus 4323
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:
Connexion ou Créer un compte pour participer à la conversation.