Show Posts
Pages: 1 ... 104 105 [106] 107 108 ... 230
1576  International / Français / Re: Probléme de code incompréhensible pour un débutant on: July 02, 2013, 06:35:54 am
Code:
#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <string.h>
#include <SD.h>

Cela fait beaucoup de librairies. Je pencherai pour un problème de saturation de la mémoire. Surtout avec les symptômes que tu décris:
Quote
lorsque j'utilise le bouton de tir l’écran m'affiche des caractères inattendues pendant quelque secondes comme ceci
Cela ressemble vraiment à une chaîne de caractères qui déborde
   - soit parce qu'il y a un problème d'allocation cela arrive souvent lorsqu'on concatène des chaînes pour en faire une plus longue
   - soit parce que la mémoire est saturée et des tampons ne peuvent plus être alloués dynamiquement et les fonctions ne le testant souvent pas on écrase à ce moment là d'autres données.

La librairies SD est je crois assez gourmande en mémoire car elle conserve des buffers ouverts en permanence. Et la librairie String est aussi connue pour sa gestion de mémoire peut optimisée.

Regardes là: http://playground.arduino.cc/Code/AvailableMemory
Cela permet de contrôler la mémoire disponible. Tu peux faire afficher la mémoire disponible à différents moments vers la console pour tenir à l'oeil l'état de la mémoire.
1577  International / Français / Re: RTClib d'ADAFRUIT on: July 01, 2013, 02:33:38 pm

Code:
...
void setup()   // Initial setup
  {   
    Wire.begin();
    RTC.begin();

  if (! RTC.isrunning())
  {
    myGLCD.print("RTC is NOT running!",CENTER, 115);
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  ....
  }

void loop()
 {   
 DateTime now = RTC.now();     
 myGLCD.printNumI(now.second(),200,300);
....
Dans la portion de code que tu donnes, la ligne RTC.adjust(DateTime(__DATE__, __TIME__))t est sensée mettre la RTC à l'heure si la RTC n'est pas activée (ce qui est le cas lorsque tu la mets en route pour la première fois). L'heure et la date utilisées sont celles de la compilation. Il faut donc compiler le soft et l'exécuter tout de suite sinon l'heure est fausse. Seulement si tu as fait tourner une fois le logiciel, cette ligne ne s'exécute plus. Si tu veux faire une mise à l'heure il faut forcer l'exécution de cette ligne. Ou mettre en place un autre moyen de mise à l'heure.

Concernant le rafraîchissement de l'affichage, la ligne DateTime now = RTC.now(); récupère l'heure courante et devrait donc permettre la mise à jour de ton affichage. Maintenant il faudrait voir le reste du code pour vérifier si rien ne bloque par ailleurs.
1578  International / Réalisations et Projets Finis / Re: IR-Blue-duino caméra thermique on: July 01, 2013, 03:57:24 am
ok, et tu peut interpréter ces données directement dans le arduino? si c'est le cas je crois que ça sera mon prochaine achat :p
Sans problème.
Voilà le code dont je suis parti. Là tous les calculs sont fait dans l'arduino. La sortie se fait sur la console mais libre à toi de faire ce que tu veux. Il suffit de remplacer la fonction Temperatures_Serial_Transmit() par ton traitement. Les données sont dans le tableau "temperatures".
Concernant la sortie sur la console, il y a un #define VT100 qui permet d'activer, lorsqu'il est decommenté, une mise en forme pour rendre l'affichage plus agréable sur un terminal émulant le standard VT100 (Hyperterminal, Putty, Realterm, Minicom, ...).

ATTENTION
Dans le fichier "MLX90620_Example.ino" il y a le tableau "alpha_ij" qui doit être adapté à chaque capteur. Pour cela il faut utiliser "MLX90620_alphaCalculator.ino" qui va générer les valeurs du tableau à recopier dans toutes les applications que tu feras avec ce même capteur. C'est à faire en premier car sinon les valeurs retournées par "MLX90620_Example.ino" sont erronées.
1579  International / Français / Re: Commande de fortes inductions on: July 01, 2013, 03:23:19 am
Si la variation de +/-300mV c'est sur la 24V il n'y a pas trop de soucis à te faire.
Si c'est sur le 5V:
  1) ou la mesure est biaisée (mesure sur une mauvaise masse)
  2) les masses ne sont pas bien connectées (masse en étoile)
  3) les alimentations sont mal séparées 24V et 5V mal ségrégués

Pour limiter les efets induits par une charge inductive, tu peux faire des mises sous tension et coupures progressives (soft start) en utilisant le PWM ce qui va limiter le courant. Croissance/décroissance progressive du PWM sur 50ms.
1580  International / Français / Re: Un peu coup de main? transmission RF on: June 30, 2013, 07:44:36 am
Quote
je n'est aucune erreur quand je le compile
Voilà l'erreur retournée
sketch_jun30a.cpp: In function ‘void loop()’:
sketch_jun30a.cpp:47:24: error: incompatible types in assignment of ‘int’ to ‘int [2]’

Ecoutes dans cette boucles il y a une erreur que tu le veuilles ou non
Code:
    for(int i=0; i<=numAnalogPin; i++) {
      data=analogRead(i);
    }
data est défini comme :
Code:
int data[numAnalogPin];

data définit un tableau d'entier donc la variable data est un pointeur vers des entiers
pour accéder à son contenu tu as 2 moyens
Code:
data[i]= analogRead(i);
ou
Code:
*data = analogRead(i);

Comme tu as une boucle avec un index la première solution me semble la plus simple.

Lorsque tu écris
Code:
data=analogRead(i);
tu modifies la valeur de data (le pointeur, tu suis?) donc du coup data ne pointe plus sur la zone mémoire allouée au tableau en question mais quelque part ailleurs.
1581  International / Français / Re: Un peu coup de main? transmission RF on: June 30, 2013, 03:44:09 am
Svp sa devient Urgent, je vais pas tarder a recevoir ma Camera miniature wireless que je doit installer sur mon petit véhicule et doit m'en servir dans même pas une quinzaine
Et on est pas aux ordres. On rend service mais faudrait pas abuser.

Quote
Pouvez vous me dire si je suis sur la bonne voie?
Si tu as lancé une compilation de ton programme tu dois déjà avoir vu que c'est pas bon

Ce truc ne fonctionne pas la boucle for écrase le pointeur sur le tableau
Code:
    for(int i=0; i<=numAnalogPin; i++) {
      data=analogRead(i);
    }
    send((byte*)data, dataBytes);
    delay(100);
Je pense que ça serait mieux
Code:
    for(int i=0; i<=numAnalogPin; i++) {
      data[i]=analogRead(i);
    }
    send((byte*)data, dataBytes);
    delay(100);

Pour ce qui est de la partie réception.... on dirait qu'il n'y a pas de liaison entre la partie réception du message et la partie commande moteur
1582  International / Français / Re: Un peu coup de main? transmission RF on: June 30, 2013, 03:37:10 am
test
Dis tu crois pas que tu pourrais un peu faire le ménage?
Tu peux tuer tes messages
1583  International / Français / Re: Module Icomsat 1.1 - Seeeduino Mega - carte SIM Free on: June 30, 2013, 03:27:35 am
Vu qu'avec Free on est les 3/4 du temps en itinérance, il doit falloir initialiser la liste des opérateurs préférés AT+CPOL

1584  International / Français / Re: Mega 2560 qui ne marche plus ... ou presque on: June 29, 2013, 11:51:42 am
Lorsqu'on veut faire un diagnostic sur une carte on revient aux fondamentaux avec des programmes simples
On met les broches entrée et on regarde en les mettant alternativement à Vcc et à GND si elles changent d'état
Ensuite la même chose en les mettant en sortie pour voir si elles font clignoter une LED
Rien ne dit que c'est pas tes capteurs qui ont été fusillés.
1585  International / Français / Re: Demande de renseignements sur programmation gros projet on: June 29, 2013, 07:20:42 am
Quelque soit la taille du projet c'est toujours pareil.
Organigramme, logigramme ou grafcet selon tes goûts.

Pour la partie matériel:
Tu fais la liste des entrées/sorties dont tu as besoin, en les séparant par type (bus SPI, bus I²C, entrées logiques simples, sorties logiques simples, entrées analogiques, sorties analogiques, entrées d'interruption, ...)
Tu vérifies que cela n'excède pas les ressources matérielles de la carte que tu comptes utiliser.

Pour la partie logiciel:
Tu décris les tâches à accomplir et leur enchaînement.
Tu détailles chaque tâche.
En détaillant les tâches, tu regardes s'il y a des portions de code dupliquées cela permet de compacter le programme.
Tu découpes le code en fonctions que tu puisses tester unitairement. Pour éviter de mettre au point 1000 ou 2000 lignes de code d'un coup.

Avant de faire le choix d'une seconde carte, il faut s'assurer que c'est bien nécessaire car cela entraîne certaines contraintes qui vont donner du travail supplémentaire.
Nécessité d'un moyen de communication entre les cartes
Mise en place d'un protocole d'échange et mise au point de celui-ci
Allocation des fonctionnalités sur chacune des cartes.
1586  International / Français / Re: Mega 2560 qui ne marche plus ... ou presque on: June 29, 2013, 04:39:44 am
Quote
Certes, mais à part ces digressions hautement corporatistes
Ce ne sont pas des digressions corporatistes. La masse et la terre sont 2 choses différentes.

Quote
je me souviens avoir fait un petit court-circuit de quelques secondes entre +5v et GND
Cela aurait cramé l'alimentation plutôt que la carte
1587  International / Français / Re: [Résolu] Detecter le contact de broches numériques entre elles on: June 28, 2013, 01:43:47 am
Par contre ce type de montage exposant les broches du composant directement vers l'extérieur il serait bon de prévoir quelques protections sur les I/O.
Prévoir:
  une résistance en série dans les entrée/sortie (quelques kOhms)
  une diode entre entrée et Vcc cathode au Vcc
  une diode entre entrée et GND anode au GND
Les diodes étant situé derrière la résistance près de la broche de l'arduino.
Ce montage permet d'écouler les surtensions vers les lignes d'alimentation et ainsi protège les étages d'entrée/sortie du microprocesseur.
Si les entrées sont un peu trop sensibles aux perturbations HF (radio, téléphones, allumage de lampes) prévoir un petit condensateur entre entrée et masse (10nF devrait suffire).
1588  International / Français / Re: Detecter le contact de broche numériques entre elles on: June 27, 2013, 02:20:25 pm
1) Tu mets tes broches en entrée avec un pullup
2) Tu passes l'une des broches en sortie et tu lui fais sortir un zéro
3) Tu testes l'état des 2 autres. Si l'une des broche touche la première elle passera à zéro à son tour.
4) Tu remets la broche en entrée avec pullup.
5) Tu recommences à l'étape 2 en changeant la broche que tu mets en sortie
1589  International / Français / Re: Tps de cycle interruption on: June 27, 2013, 06:00:46 am
Dans le code qui fonctionne cette partie ne doit pas être exécutées car la variable test n'est pas utilisé dans le reste du code donc l'optimisation du code doit le supprimer.
Code:
        temp3=(G_Courbe.points_courbes[G_Infos_Generation.Point_en_cours]); 
        temp3 = temp3 * 1.04;
        temp3 = round(temp3 );
        test = long(penaud);
Cette partie de code utilise une multiplication sur des flottants ce qui explique l'accroissement important du temps d'exécution .

Si tu dois absolument faire une multiplication pour faire une correction sur les valeurs, il faut essayer de ne pas passer par des flottants. Il y a souvent des solutions possibles en utilisant des multiplications/divisions avec des entiers (ou éventuellement des long). Voir même d'essayer d'utiliser des coefficients avec des puissances de 2 que l'on peut faire avec des décalages.
Par exemple, si l'erreur est acceptable, au lieu de multiplier par 1.04 tu peux essayer de multiplier par 133 (128 * 1.04=133.12) et faire un décalage à droite de 7 bits (division par 128).
1590  International / Réalisations et Projets Finis / Re: IR-Blue-duino caméra thermique on: June 27, 2013, 05:47:16 am
L’échantillonnage est - il assez rapide?
Le capteur a une interface I²C. Donc il n'y a pas de problème d'échantillonnage.
La résolution du capteur étant assez basse, il y a peu de points à lire et les données peuvent être rapatriées rapidement.
Par contre si tout le traitement est fait dans l'Arduino (compensation d'offset et  de gain point à point, compensation en température) comme les calculs se font en flottant cela charge pas mal le micro. Mais c'est possible j'ai commencé comme ça avant de trouver l'appli sur smartphone.
Pages: 1 ... 104 105 [106] 107 108 ... 230