Show Posts
Pages: 1 [2] 3 4 ... 361
16  International / Français / Re: Emplacement de la déclation des variables on: September 28, 2014, 11:08:31 am
Salut 68tjs,

L'accès à une variable globale (ou statique) est deux fois plus lent que l’accès à une variable locale.
Atmel en parle dans ses doc d'optimisation de code source pour AVR-GCC smiley-wink
http://www.atmel.com/images/doc8453.pdf
17  International / Français / Re: Arduino et calcul on: September 28, 2014, 10:59:05 am
C'est un comportement compréhensible du point de vue de la norme, mais plutôt surprenant quand on sait à quel point GCC est habituellement trop permissif.
Tout dépends du dév qui a bossé sur l'implémentation de la norme.
Avec gcc tu as des trucs assez marrant dés fois smiley-sweat
(comme les "variable length array", que dieu punisse l'inventeur de cette saloperie smiley-zipper)

Pour le coup, c'est une assez mauvaise surprise. Arduino étant plutôt destiné aux débutants, on aurait pu espérer que ce genre de problème (qui ne se pose généralement plus) ne leur soit pas imposé en plus des autres difficultés qu'ils ont déjà à régler.
Si la team arduino se décidait à mettre à jour la version d'avr-gcc fourni avec l'ide se serait déja pas mal. Depuis 2008 pas mal de chose ont changé (en bien comme en mal d’ailleurs).
18  International / Français / Re: aide pour 1er projet on: September 28, 2014, 10:54:45 am
Le contrôleur est adéquat mais je ne suis pas sûr que le nema17 avec motoréducteur soit vraiment nécessaire.
Un nema17 0.9° (pas 1.8°) avec du micro-stepping 16 pas donnerait une bien meilleur précision pour beaucoup moins cher ...
19  International / Français / Re: Séquence euclidienne simple on: September 28, 2014, 10:50:01 am
Bonjour,

Tu as un moyen ultra simple de faire la même chose que sur le site web en lien :
1) tu fais un tableau à deux dimensions. Une dimension pour le nombre de "lignes", une autre pour N et K (je reprend les termes du site).

2) dans loop() tu ajoutes un delay() calculé pour donner le bon tempo entre chaque "colonne".
rappel : tdelay = BPM / 60 * 1000

3) tu gardes un compteur qui s'incrémente à chaque passage de loop() de 0 à NL-1 (NL = nombre de "lignes"). Quand il atteint NL tu repart à 0 (avant de faire la suite).

4) à chaque tour de loop(), tu traites chaque "ligne" en fonction de la valeur courante du compteur et de n/k

Rappel :
quotient = a / b (division entière)
reste = a % b (modulo)
20  International / Français / Re: Activé une led à partir du connection web client on: September 28, 2014, 10:39:11 am
Bonjour,

Tu auras besoin de faire quelques modif pour adapter mon code mais c'est en gros ce que tu cherches à faire :
http://skyduino.wordpress.com/2012/10/23/arduino-commande-a-distance-dune-led-avec-un-fichier-xml-via-le-web/
21  International / Français / Re: Comment puis spliter un Sting ayant pour delimter une virgule on: September 28, 2014, 10:32:26 am
Bonjour,

Voir mon message dans ton autre topic sur le même sujet smiley-wink

Qu'est ce que tu vas faire des sous-chaine ?
Les garder telles qu'elles ? Les convertir en un type natif (int, byte, etc..) ? Les tester et faire une action si besoin ?

En embarqué on garde le moins de chose possible en mémoire.
Faire des découpages de string comme tu le ferais en java, python ou autre sur PC c'est de la folie en embarqué.
Rappel toi bien que tu n'as que 2048 octets de RAM, pas 8Go comme sur un PC, et que la moindre allocation de String te faire perdre une place folle (en plus de te pourrir à petit feu ta RAM) smiley-wink
22  International / Français / Re: [Résolu]Comment puis-je compter le nombre de virgule dans un String on: September 28, 2014, 10:18:17 am
Bonjour,

Je vois que le sujet est marqué comme résolu, mais à mes yeux j'ai l'impression qu'il n'est pas du tout résolu ...

Tu fais les choses à l'envers.
Tu comptes le nombre de "morceaux" dans ta string, morceaux séparés par des virgules, puis tu veux les avoir dans des string séparées.

C'est une mauvaise façon de faire en embarqué. Tu n'as pas assez de mémoire RAM pour te permettre de tout garder en mémoire et d'en faire des copies à tort et à travers.

La "bonne" solution consiste à prendre ta string. A chercher la première virgule disponible. A mettre de côté ce qui se trouve avant cette virgule. Puis à traiter ce morceau (ici je suppose que tu vas vouloir convertir le nombre en un int ?) avant de passer au morceau suivant.
Ainsi tu ne garde en mémoire que la string de base et le(s) résultat(s) à tout instant t, mais pas plus.

Tu l'auras compris, je suis du même avis que fdufnews.
Tu prend les choses comme elles viennent sans avoir de plan. Ou alors tu as oublié de nous présenter ton plan et la finalité de ton code smiley-wink
23  International / Français / Re: Probleme telecommande IR, codes aléatoires on: September 28, 2014, 10:05:32 am
Bonjour,

La présence des résistances s'expliquent par le type de sortie de ce genre de capteur IR.

La sortie est en générale une sortie dite "à collecteur ouvert". En gros en interne le capteur contrôle un transistor qui peut mettre la sortie qu'à la masse, mais pas à VCC.

La résistance est donc là pour garder la sortie à un état logique "1" (= VCC) par défaut. Mais aussi pour limiter le courant quand le capteur force la sortie à la masse.

Et pourquoi il y a deux résistances ? Tout simplement parce que les résistances ça ne coûtent pas cher et que les bourrins adorent leurs arracher des pattes en les manipulant smiley-wink

Edit : Pour les codes aléatoires cela s'explique par le fait que sans résistance la sortie est "flottante". En gros c'est une antenne qui capte du bruit, mais rien de plus.
24  International / Français / Re: Problème avec un Atmega 328 on: September 28, 2014, 09:58:44 am
Bonjour,

De ce que j'ai lu, je pencherai pour l’hypothèse d'un microcontrôleur défectueux, même si ça me parait un peu gros.

Une autre hypothèse, plus probable selon moi, serait une surtension sur une des broches causée par une mauvaise conception du montage, ou alors un problème de code qui ne se fait sentir que dans une situation bien précise.

Dans tout les cas, acheter des composants en provenance de chine sur ebay, dx ou autre c'es jouer à la loterie. Même des pro comme sparkfun se sont déjà fait avoir.
25  International / Français / Re: Es-ce que le boolean est fiable on: September 28, 2014, 08:51:01 am
Bonjour,

Vu les symptômes et le morceau de code fourni, je suis en mesure de te dire que le problème vient de ta fonction "sms_send()" qui retourne toujours false, même quand le sms est bien parti.
Il n'y a pas d'autre possibilité, du moins pas avec le code que tu nous donnes.

Post ton code complet en pièce jointe, on sera vite fixé sur l'origine du problème smiley-wink
26  International / Français / Re: ISR perturbé par un Ecran Lcd I2c on: September 28, 2014, 08:46:04 am
Bonjour,

Regarde le code de LiquidCrystal_I2C mais j'ai comme l'impression que tu as un conflit de ressource.

Ton code utilise le timer 2 pour la réception et je suis quasi sûr que LiquidCrystal_I2C utilise ce même timer 2 pour faire la PWM qui fait marcher le rétroéclairage de l'écran.

Une lecture rapide du code source de la lib te donneras toutes les réponses à tes questions.
27  International / Français / Re: Rendre un code plus rapide si c'est possible on: September 28, 2014, 08:43:28 am
Bonjour,

Je suis entrain de coder un programme +/- gros et je me pose cette question.
Mieux vaut-il passer un pointeur sur un "objet" dans une fonction (1) ou
passer l'objet directement dans la fonction (2).
Quelles méthode sera la plus rapide ?
Si tu passes un objet en argument - sans pointeur, il y a copie de l'objet avant appel de la fonction.
Tu t'en doute, copie de mémoire = utilisation de temps et de ressources.

Si tu passes un objet en argument - par pointeur, il n'y a pas de copie, tu utilises directement l'objet d'origine.
Ça veux aussi dire que si tu touches à l'objet pointé. Il sera donc modifié en dehors de la fonction courante si tu fait des modification sur celui-ci dans ta fonction.

En C++ on n'utilise pas de pointeur dans ce genre de situation (c'est old-school smiley-cool).
Si tu veux un code rapide mais qui marche "comme par copie" il convient d'utiliser une référence constante.

Exemple rapide :
Code:
void toto(String machaine) {
  // version pas rapide si tu ne fait pas de modification sur machaine.
}

void toto2(const String& machaine) {
  // L'objet d'origine est utilisé sans copie mais reste en lecture seule grâce au const.
}

Un peu de doc technique pour mieux comprendre :
http://cpp.developpez.com/faq/cpp/?page=Les-references

NB : ça reste des micro-optimisations. Regarde d'abord l'architecture de ton programme et les goulots d'étranglement possibles dans le code.
Si tu gagnes 1µs par appel de fonction mais que tu perds derrière 10ms à faire une boucle foireuse ou un calcul en flottant, avec une String ou autre ça ne sert plus à rien smiley-wink
28  International / Français / Re: Echange de données en RF on: September 28, 2014, 08:31:40 am
Bonjour,

Pour le problème de conversion d'une String en char* fdufnews a déjà donné la bonne solution.

Je rajouterai quand même que dans 99.99% 100% des cas, l'utilisation de String est plus une mauvaise chose qu'une bonne chose.
A quoi te sert la String ?

Sinon pour la différence en jours entre deux DateTime, il nous faut le nom de la librairie que tu utilises. Ce n'est pas un type "arduino" standard.
29  International / Français / Re: Menu lcd 4X16 on: September 28, 2014, 08:27:35 am
Bonjour,

Ce n'est pas du "tout prés" mais cela peux peut-être t'intéresser :
http://skyduino.wordpress.com/2014/07/06/arduino-lcd-faire-un-menu-sous-forme-de-liste/

Si tu veux un équivalent tout prés, regarde du côté de la lib "Arduino LCD Menu" de David Andrews.
https://github.com/DavidAndrews/Arduino_LCD_Menu
30  International / Français / Re: utiliser enceintes récupérées sur l'arduino on: September 28, 2014, 08:25:29 am
Bonjour,

Ce que tu as récupéré ce sont de simples hauts-parleurs.
Pour les utiliser il te faut un étage d'amplification (pour la puissance) et un CNA (convertisseur numérique-analogique, une carte son en gros) (pour le son).

Je te propose deux solutions simples à mettre en oeuvre (mais il en existe d'autres) :
- la "wave shield", qui ne peut lire que des fichiers .wav mono (pas stéréo donc).
- la "mp3 shield" qui peut lire des fichiers .mp3, .wav, .mid, ... en qualité audio PC.

La wave shield inclut un petit amplificateur juste suffisant pour un haut-parleur de 8 ohms (type casque).
La mp3 shield est capable de base de contrôler un haut parleur 8 ohms mais il est préférable de lui ajouté un amplificateur derrière pour ne rien cramer (voir la doc "line-out" sur le site de sparkfun).

Il faut donc que tu regardes à l’arrière des tes hauts-parleurs l'impédance de ceux-ci (4 ohms, 8 ohms, etc.). Si ce n'est pas marqué dessus il suffit de mettre un multimètre en position résistance entre les bornes du haut-parleur pour le savoir.

Si ce sont de petits hauts-parleurs type casque audio (8 ohms) l'ampli ne sera pas nécessaire (mais le son ne sera pas très puissant).
Si ce sont des hauts-parleurs 4 ohms, ou que tu veux du "bon son", il faudra prévoir un petit ampli pour haut-parleur. Ça peut se fabriquer soi même ou s'acheter sur ebay/dx/...
Pages: 1 [2] 3 4 ... 361