Je bloque sur un point de votre cours qui est la partie sur les fonctions. En effet lorsque je déclare une fonction après la boucle LOOP et que je l'appel dans la boucle LOOP, le logiciel ARDUINO considère qu'elle n'est pas déclaré car elle se trouve après. Y-a-t-il une solution?
Merci je n'avais pas compris cela dans le cours, il faut donc déclarer le void comme une variable. Merci
Sinon, je suis dans le cours sur le MCC. J'ai effectué à plusieurs reprises le montage avec le transistor bipolaire en régime de saturation. le problème est que le MCC ne s'arrête jamais. En effet j'entends un changement de vitesse et j'ai vérifié au voltmètre il y bien un passage de 5 v au 0 v entre la pin 7 et le ground mais le moteur ne s'arrête pas, il y a juste un changement de régime. De plus j'ai augmenté a 20 seconde la constante de temps mais pas d"effet??
Tu as raison, pour allumer la diode, il suffit de la relier à la pin 13 d'une coté, et à la masse de l'autre. (avec une résistance limitatrice de courant d'un côté ou de l'autre)
Le fil rouge est certainement là pour amener le +5v pour les montages qui suivront, de même le fait d'avoir 0v et 5v dans les "rails" du haut et du bas de la carte d'essais.
Probablement que celui qui a fait le cours a eu la flemme de simplifier son schéma de montage, au risque de perturber les débutants avec 4 fils totalement inutiles.
- Edité par michelbillaud 15 janvier 2017 à 16:15:38
Le câble relié à 5V envoie du courant dans la breadBoard.
Le bouton poussoir est là pour laisser passer ou non le courant vers la suite de notre circuit.
- Première question : comment le courant pourrait atteindre la suite du circuit si on laisse ouvert le bouton ?
Ensuite il semble y avoir deux choix de passage.
Mais si on suit le chemin : le courant passe par la résistance et va vers le ground.
- Il y a un câble connecté au pin 10 mais comment le courant pourrait aller là ?
Le courant choisit s'il passe par la résistance ou non ?
Si ça ne tenait qu'à moi j'aurais mis le choix du chemin avec la résistance vers le ground avant le bouton poussoir.
Il vaut mieux raisonner en tension qu'en courant. Deux cas
si le bouton est relaché; la pin 10 est relié seulement à la masse (0v) par l'intermédiaire d'une résistance. Donc elle est au niveau bas.
si il est appuyé, ça relie la pin 10 au 5v, donc entrée au niveau haut. Et il se trouve que ça laisse aussi passer un courant dans la résistance de rappel, mais comme la résistance est elevée, centaines ou milliers d'ohms, c'est des milliamperes. Donc ça ne fera pas chuter la tension de 5v fourrie par l'arduino.
- Edité par michelbillaud 17 janvier 2017 à 12:24:04
Probablement que celui qui a fait le cours a eu la flemme de simplifier son schéma de montage, au risque de perturber les débutants avec 4 fils totalement inutiles.
Si les débutants suivent le cours dans l'ordre qu'il est donné ils auront toutes les infos nécessaires pour comprendre. Il me semble que la breadboard est expliquée non? Alors mon cher Michel, ce serait sympa de l'être, sympa. Non, parce que j'ai cru comprendre qu'une chose qui t'agaces pas mal, c'est les élèves qui lisent en travers. Ou pas, les élèves tout court j'ai l'impression. Là en l'occurence tu tapes sur le rédacteur, et ce n'est pas de ton habitude. Surtout qu'en l'occurence tout était très bien expliqué dans le cours sur les BB.
Bref.
Tu sais beaucoup de choses, sur la programmation. Et tu as l'air de très bien maîtriser cet art. Et ça m'intéresse je t'avouerai ! Mais je t'avouerai surtout que je perds parfois le fil en te lisant car ton langage utilise bien trop souvent des termes qui vont au delà de ce que sont sensés savoir les débutants à ce niveau là (niveau de ce MOOC, même fini). J'aimerai pouvoir te lire avec enthousiasme mais je bute pas mal sur ces termes balancés comme de la poudre aux yeux pour se faire mousser ou pour décourager les moins tenaces. Je ne doute pas pouvoir me tromper à ton sujet mais il faut reconnaitre que tu es dur avec les newbies que nous sommes. Nanomaitre t'en as d'ailleurs déjà touché un mot...
Sinon j'ai une question à la con : Quand je déclare un variable en "deux temps" avant la boucle setup j'ai une erreur "does not type a name". Il faut alors que je place le "2eme temps" dans la boucle setup pour que ça fonctionne, ou alors que je la déclare et assigne une valeur en une seule ligne (un seul temps) pour que ça passe. Une idée?
Ah non j'ai une deuxième question encore mais elle est moins con il me semble : Si en A0 je lis une valeur stable venant d'une sonde LM35DZ, je lis une valeur complètement instable si je lis une autre valeur en A1. Vous avez une piste?
Sinon un grand merci à Nanomaitre pour ses cours et malgré tout, à Michel pour ses compétences, dont on profite si on s'accroche
Skype : applereyns - Pour se dépanner, en live, c'est parfois plus efficace.
Si c'est expliqué, et que le lecteur a mal compris, la responsabilité est souvent partagée (*). C'est pas parce qu'on a dit un truc qu'il ne faut pas le répéter de temps en temps. Et dans le schéma, franchement, je ne vois pas ce qui impose les fils non utilisés, ça ne fait qu'embrouiller le lecteur.
Dans l'autre sens, quand le problème, c'est que le lecteur a lu de travers ou d'un oeil trop distrait - ce qui arrive à tout le monde -, autant lui dire.
Pour en revenir à ta question : qu'est-ce tu appelles "déclarer une variable en deux temps" ?
(*) je dis ça d'expérience, j'ai rédigé beaucoup de choses qui ont été "incomprittes" fautes d'avoir été rappelées au fil du texte.
PS: j'ai vérifié : la plaque d'essais est présentée ici
Quand j'apprenais aux étudiants à utiliser une plaque d'essais, je leur faisais plutot mettre +V sur une ligne du haut, et GND sur une ligne du bas, avec plusieurs avantages :
ça évite les problèmes pour ceux qui visent mal
le montage concret ressemble aux schémas de principe, où on met traditionnellement le + en haut et le - en bas, donc montage plus facile à vérifier.
- Edité par michelbillaud 19 janvier 2017 à 9:38:00
Je crois que je vais me mettre à mettre (oui de "se mettre au carré") le + en haut et le -, à l'opposé, en bas. En effet niveau clarté pour se corriger c'est vraiment bien et ca ressemble au schéma en plus.
Quand je dis "en deux temps" je fais référence à ce qui est dit dans le cours, je m'explique : (en reprenant les exemples du cours, qui ne passent pas non plus par mon IDE)
int tempsDePause;// déclaration en premier temps
tempsDePause=100;// initialisation en deuxième temps
int tempsDePause=100;// déclaration et initialisation en même temps
void setup() {
}
void loop() {
delay (tempsDePause);
tempsDePause=200;
}
là j'ai l'erreur : exit status 1 'tempsDePause' does not name a type
Bon à force de tests, en fait ma question se réduit à si l'on veut déclarer en "deux temps" est-il interdit de le déclarer avant la boucle setup ? (puisque dans les autres cas, ça marche bien). Je veux me mettre à déclarer en deux temps pour maximiser l'utilisation de la mémoire. Ca m'étonne mais apparement ça ménage notre Arduino même si au final c'est plus long à écrire.
- Edité par AnthoR81 19 janvier 2017 à 13:01:56
Skype : applereyns - Pour se dépanner, en live, c'est parfois plus efficace.
Je ne vais pas lire le cours arduino pour voir ce qui induit le problème, mais c'est simple :
Un programme arduino, c'est un ensemble de déclarations et définitions
des variables
des fonctions (dont setup et loop), contenant des instructions
(et peut être des classes, mais passons)
La ligne
tempsDePause=100; // instruction
ne rentre dans aucun de ces cas. C'est une instruction (une affectation, pour être précis). Et c'est interdit d'en coller au milieu des déclarations/définitions du programme (*)
Alors que la ligne
int tempsDePause = 100;
est une définition de variable, assaisonnée d'une initialisation.
---
(*) alors qu'à l'inverse, une déclaration peut apparaitre dans des instructions à l'intérieur d'un bloc, comme par exemple le corps d'une fonction
int a = 0;
void loop() {
a = a + 1; // instruction
int b = a * a; // définition
Serial.print(b); // instruction
...
}
Un conseil : pour l'instant laisse tomber l'idée "d'optimiser la mémoire". Tant qu'on ne sait pas exactement ce que fait le compilateur, on ne peut pas prétendre faire mieux que lui. D'une part ça a un très fort risque d'être contre-productif, d'autre part c'est une vaste perte de temps.
Bon, prenons un exemple, le source suivant
int a;
void truc();
void setup() {
a = 12;
truc();
};
quand on le compile (avec -Os) produit le code suivant
Ah oui alors vu comme ça je pense qu'il faut laisser faire le compilateur. C'est un métier l'optimisation et je pense que si un jour j'avais l'idée du siècle et voulais réaliser un produit, l'appel à un professionnel expert en la matière serait de rigueur. On peut savoir des choses mais pas toutes les maitriser... là en l'occurence, je sèche, et retourne à mes déclarations en "un seul temps" qui optimisent ma lecture du code.
Merci pour toutes ces précisions
Skype : applereyns - Pour se dépanner, en live, c'est parfois plus efficace.
Il y a un principe simple en matière d'optimisation :
utiliser des algorithmes raisonnables, surtout sur des volumes de données importants
ne pas tremper dans la micro-optimisation au doigt mouillé
s'occuper d'abord d'avoir du code qui marche, et écrit proprement pour être facile à maintenair, plutot que d'astuces qui font gagner un octet ou 2 microsecondes par semaine.
Et si on veut vraiment optimiser
mesurer ce que fait exactement le code existant
repérer les endroits où une optimisation risque d'avoir un effet positif et non négligeable, chiffres à l'appui
mesurer la différence, et revenir à la version la plus simple si il n'y a pas de bénéfice à s'être pourri la vie.
Et se méfier des recettes magiques. j'ai souvenir d'un cours de programmation (en fortran) où le prof insistait pour qu'on écrive A = B + B plutot que A = 2 * B
Or le compilateur était tout à fait capable de reconnaitre une multiplication par 2, et de faire ce qu'il fallait pour que ça soit optimisé (un décalage sur des entiers, une somme sur des flottants si ça coutait moins cher qu'une multiplication). C'est à mettre à la rubrique : vérifier que ça a vraiment optimisé, ou constater qu'on s'est fait chier pour rien sur la base d'un ragot.
- Edité par michelbillaud 21 janvier 2017 à 13:02:38
Merci pour ces conseils d'ailleurs j'ai mis de coté le code qui permet de mesurer l'exécution du code et ça m'a déjà aidé. Pas à résoudre un problème très important mais j'ai comparé plusieurs façons de résoudre un exercice du cours. Je trouvais que le code que je devais corriger était un peu "lourd", je lui ai indiqué ma solution que je préfère mais j'ai pu lui dire que sa version ne déméritait pas puisque qu'elle prenait autant de temps que la mienne (elle prenait même 12 microsecondes de moins je crois). Le mieux c'est d'avoir un code lisible et compréhensible (au moins pour soi), j'ai bien saisi je crois maintenant. J'arrête de chipoter
Bienvenue dans le forum du cours Programmez vos premiers montages avec Arduino où vous apprendrez les bases de la programmation avec une carte Arduino. Ce cours sera disponible à partir du 24 novembre 2015.
Du fait des interactions possibles entre la carte Arduino et des composants et matériels électroniques, il nous paraissait évident d'ouvrir un sujet sur ce forum.
Je vous invite donc à poser vos questions ici. J'essaierai d'y répondre régulièrement, mais que cela ne vous empêche pas de discuter et de vous entraider.
À très bientôt, et j'espère que le cours vous sera utile !
Je ne comprends pas très bien ce montage, plus précisément l'utilité des diodes; et est-il possible d'utiliser l'alimentation de l'arduino et 2 transistors NPN et 2 MOSFET pour ce montage ?
bonsoir à tous, je travail sur un projet avec arduino et le module SRF05 en faite je veux savoir si cela serait possible que je traduise les données que je reçois de mon capteur (distance) en une synthèse vocale qui sera ensuite envoyée à une oreillette bluetooth ?
Débutant en tout, (même en forum :)), j'apprends tout doucement arduino. On m'a proposé un défi : fabriquer un quizz musical. Il y a dix joueurs qui ont un bouton poussoir (on/off) (non câblé donc IF ou hertz ???) devant eux et qui ont la possibilité de pousser dessus s'ils croient détenir la bonne réponse, sa lampe attribuée (il y en a dix pex) s'allume alors sur scène et l'équipe peut répondre.
Contraintes :
- il faut dix boutons on/off (les dix émetteurs) avec une portée suffisante pour une grande salle (15M).
- les commandes doivent être sans fil.
- Quand un joueur/équipe pousse sur son bouton, les autres doivent être désactivés immédiatement (switch ou while ?)
- si possible, si un joueur a donné une mauvaise réponse, "l'arbitre" peut désactiver son N° pour continuer le jeu sans faire le reset de la carte bien entendu.
Débutant en tout, (même en forum :)), j'apprends tout doucement arduino. On m'a proposé un défi : fabriquer un quizz musical. Il y a dix joueurs qui ont un bouton poussoir (on/off) (non câblé donc IF ou hertz ???) devant eux et qui ont la possibilité de pousser dessus s'ils croient détenir la bonne réponse, sa lampe attribuée (il y en a dix pex) s'allume alors sur scène et l'équipe peut répondre.
Contraintes :
- il faut dix boutons on/off (les dix émetteurs) avec une portée suffisante pour une grande salle (15M).
- les commandes doivent être sans fil.
- Quand un joueur/équipe pousse sur son bouton, les autres doivent être désactivés immédiatement (switch ou while ?)
- si possible, si un joueur a donné une mauvaise réponse, "l'arbitre" peut désactiver son N° pour continuer le jeu sans faire le reset de la carte bien entendu.
Les considérations sur la programmation sont prématurées à ce stade, autant que de savoir si les noms de variables doivent commencer par un a ou par un b. Déjà, il faut comprendre comment l'arduino discute avec son module Wifi.
- Edité par michelbillaud 10 février 2017 à 8:28:47
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Skype : applereyns - Pour se dépanner, en live, c'est parfois plus efficace.
Skype : applereyns - Pour se dépanner, en live, c'est parfois plus efficace.
Skype : applereyns - Pour se dépanner, en live, c'est parfois plus efficace.
Skype : applereyns - Pour se dépanner, en live, c'est parfois plus efficace.