Show Posts
Pages: [1] 2 3 ... 8
1  International / Français / Re: Problème #ifndef on: May 18, 2014, 06:51:58 am
Normalement non.

Si tu regarde j'en ai mis 2. Un pour le if dans ie ifndef et un pour le ifndef. Ou alors il y a un souci avec le compilateur qui en demande plus que nécessaire !

De plus en ajouter un à la fin de résoud pas le problème.  smiley-twist

OMG !
J'ai l'impression que le logiciel, enfin l'IDE, ne prenais pas les bons fichiers ! J'ai du tout supprimer et refaire !

Maintenant, j'ai une nouvelle erreur.

Quand j'écris :
Code:
/* -- INCLUDE -- */
#include <Dri2.h>

Dri2 Mot2(6, 9);

/* -- INITIALISATION -- */
void setup() {

}

/* -- BOUCLE -- */
void loop() {

}

Si ma librairie ressemble à cela:
Code:
#ifndef Dri2_h
#define Dri2_h

#include "Arduino.h"

class Dri2 {
public:
Dri2(int pin_on, int pin_pwm);
void Action(int dir, int speed);
private:
int _pin_on;
};

#endif

Et que j'ai ceci:
Code:
#include "Arduino.h"
#include "Dri2.h"

Dri2::Dri2(int pin_on, int pin_pwm) {
pinMode(pin_on, OUTPUT);
pinMode(pin_pwm, OUTPUT);

_pin_on = pin_on;
}

void Dri2::Action(int dir, int speed) {

TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS22);

if(dir) {
ORC2A = speed;
ORC2B = 50;
}
else {
ORC2A = 50;
ORC2B = speed;
}

if(speed != 0) {
digitalWrite(_pin_on, HIGH);
}
else {
digitalWrite(_pin_on, LOW);
}
}

Il devrais bien normalement trouvé Dri2 comme type de nom. Et que dalle !
Quote
GCrawler:4: error: 'Dri2' does not name a type

Comment se fait-il que ça ne passe pas ?
2  International / Français / Problème #ifndef on: May 17, 2014, 01:07:03 pm
Bonsoir,

J'avoue ne pas avoir trouvé de réponde dans mes recherches et test et devoir, du coup, m'en remettre à vos lumières.

J'essais de me faire une petite librairie pour me simplifier la tâche ensuite. Hélas, j'ai bien peur que le compilateur ne sache pas travaillé avec mes fichiers.

J'ai commencé par un sketch vide. Le but n'es juste, pour le moment que de charger la librairie.
Ce qui me donne cela:
Code:
/* -- INCLUDE -- */
#include <dri.h>


/* -- INITIALISATION -- */
void setup() {

}

/* -- BOUCLE -- */
void loop() {

}

Ensuite, j'ai créer un header, histoire de voir si ça fonctionnais. J'ai mis le strict minimum pour le moment.
Code:
#ifndef dri_h
#define dri_h

#if ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

class DRI {
public:
DRI(int pin_on, int pin_pwm);
void CMD(int sens, int vitesse);

private:
int _pin_on;
};

#endif

Et bien sûr ça ne compile pas  smiley-twist
Voila la petite erreur que je n'arrive pas à cerné:
Quote from: Erreur de compilation
In file included from GCrawler2.ino:2:
C:\Users\Geeks\Dropbox\Electronique\Arduino\sketchbook\libraries\dri0002/dri.h:1:1: error: unterminated #ifndef

En gros, il ne trouve pas de quoi finir ifndef. Ors, sauf si je me suis trompé quelque-part il se termine bien !

Et je tourne en rond. Donc voils, j'ai peut-être mal codé, ou oublier quelque chose. Mais là, je ne crois pas trop. Vos conseils sont donc les bienvenus.

Merci.  smiley-cool
3  International / Français / Re: Piloter un réseau de train avec une Arduino 2560 on: February 22, 2014, 11:57:56 am
Et bien, c'set parfait  smiley-cool

Je fini ce que j'ai à faire et je m'y colle  smiley-wink

Merci beaucoup.
4  International / Français / Re: Piloter un réseau de train avec une Arduino 2560 on: February 22, 2014, 10:48:32 am
Ok, je test ça se soir  smiley-cool

Bon après je ne sait pas encore comment je vais faire ma tambouille. Mais je trouverais une parade.

Autre chose. Ca n'a rien à voir avec le port en lui-même.

On sait comparer un tableau avec un autre ? Si c'est le cas, c'est une des possibilités à explorer avec la précédente.
5  International / Français / Re: Piloter un réseau de train avec une Arduino 2560 on: February 22, 2014, 08:45:50 am
Ah oui, très intéressant ton lien. Je le garde en mémoire pour m'en servir.

Mais je me demande quel est la démarche pour recevoir le port entier sous forme binaire.

Quoi qu'il existe peut-être un moyen de concaténé pour géré ça.
6  International / Français / Re: Piloter un réseau de train avec une Arduino 2560 on: February 21, 2014, 05:58:32 pm
Et bien voila... Nouvel élément de réponse ! Ca fonctionne !

Mais il y a un mais je vais en parlé plus loin  smiley-mr-green

Au niveau include et variables globales
Code:
#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

const int CE1 = 8; //Cellule 1
const int CE2 = 9; //Cellule 2
const int CE3 = 10; //Cellule 3
const int CE4 = 11; //Cellule 4

Au niveau setup, pour le moment, j'ai assigné mes 4 boutons de base. Elles simules les cellules.
Code:
void setup() {
lcd.begin(16,2);

pinMode(CE1, INPUT); //CE1 en mode input
pinMode(CE2, INPUT); //CE2 en mode input
pinMode(CE3, INPUT); //CE3 en mode input
pinMode(CE4, INPUT); //CE4 en mode input

}

Et maintenant, mon loop. Attention les yeux !
Code:
void loop() {


int cellule1 = digitalRead(CE1);
int cellule2 = digitalRead(CE2);
int cellule3 = digitalRead(CE3);
int cellule4 = digitalRead(CE4);

if(cellule1 == HIGH && cellule2 == LOW && cellule3 == HIGH && cellule4 == HIGH) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Za1 -> Za2");
}

if(cellule1 == LOW && cellule2 == HIGH && cellule3 == HIGH && cellule4 == HIGH) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Za4 -> Za1");
}

if(cellule1 == HIGH && cellule2 == HIGH && cellule3 == HIGH && cellule4 == LOW) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Za3 -> Za4");
}

if(cellule1 == HIGH && cellule2 == HIGH && cellule3 == LOW && cellule4 == HIGH) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Za2 -> Za3");
}
delay(100);
}

Bon, comme on peut le voir, j'ai été obliger de mettre mes 4 conditions pour que ça marche. La raison en est très simple. Le while (attendre que) ne fonctionne pas. C'est la boucle infinie. J'ai donc étudier les cas. Et j'ai ceci:
1/ Au démarrage 1011 (c'est mes 4 inter, ce1 ce2 ce3 ce4)
2/ Le train part donc 0011
3/ Le train arrive sur la ce2 0111 -> séquence 2

Ok mais justement, si on regarde bien, els autres if partait si je ne prennais que 2 cas sur la totalité. Le système croyant qu'il fallait bouclé.

J'ai donc eu une autre idée et qui sera à mon avis beaucoup plus optimisé. Si je fais l'écoute du portB en entier. Pour les test c'est une uno. Bref ! Il faudra que j'ai quelque chose comme 1011000 (pin 9 à 13). Cela m'arrange car !
Si je fais un test sur un masque.
if(port == 1011000) -> sequence 1
if(port == 0111000) -> sequence 2

On n'a plus besoin de rajouter les "&&" et la ribambelle de code si un jour une extension survient. Vous voyez ou je veux en venir ?

Bon, alors c'est ça que je veux coder maintenant  smiley-mr-green
Comment configurer le port B de ma Uno de test pour permettre de lire tout le port d'un coup ?
Comment faire pour que le code reste sous forme binaire ?
Comment faire le if() avec le binaire ?

Demain je commencerais une série de recherche en ce sens. Cependant, si quelqu'un d'expérience a déjà tester et à un petit exemple vite paf sur ce port, ça serais pas si mal.  smiley-lol

Merci beaucoup.
7  International / Français / Re: Piloter un réseau de train avec une Arduino 2560 on: February 21, 2014, 01:53:19 pm
Bon,

J'ai pas totalement abandonné l'idée des interruptions. Je vais le gardé pour une autre fonction très importante  de sécurité.

Pour le moment, je teste un bout de programme qui fait la sélection entre 4 capteurs / 10. Histoire de valider le concept.
J'ai écrit cela en pseudo-code. Je but sur la fonction d'attente.

Code:
//Si Za1 pleine et Za2 vide.
//Lancer Za1 vers Za2.
//Attendre que Za2 soit pleine.

Il faut comprendre qu'au départ du train de Za1, il peut devenir vide et il peut existé autant de rebonds que de wagon. C'est pourquoi j'attends impérativement Za2 qui est une valeur sûr. Les if fontionnent. Parfit c'est déjà ça. Mais faire un while sur Za2 ça ne va pas du tout. On ne sort jamais de la boucle qui est infini. C'est sur ce dernier point que j'aimerais un peu d'aide.

Merci.
8  International / Français / Re: Piloter un réseau de train avec une Arduino 2560 on: February 21, 2014, 12:02:54 pm
Et oui, c'est à peut prêt ça.

Alors voila ou j'en suis. Chaque capteur (LDR) seront raccordé à des LM311N monté en comparateurs. Le but est d'avoir un fron bien nette pour attaquer les entrées digitales.

A partir de là, j'ai établi un ensemble de choses. Ce que nous devons scruter. Ce que nous devons faire comme séquences.

La partie séquencielle:

Quote
Au lancement, on doit avoir de Za1 à Za6, 101111, on lance donc la séquence 1.
On attends jusqu'à ce que Za2 soit pleine, 011111. Dans ce cas ça nous amène à la séquence 2.
On attends que Za1 soit pleine, 111110. Dans ce cas ça nous ammène à la séquence 3.
On attends que Za6 soit pleine, 111101. Dans ce cas ça nous ammène à la séquence 4. (Je m'affranchi de 4-a et 4-b).
On attends que Za5 soit pleine, 110111. Dans ce cas ça nous ammène à la séquence 5.
On attends que Za3 soit pleine, 101111. Dans ce ças on se retrouve à la séquence 1.

Code:
//Programme principale:
//Si on a 101111
   //-> faire truc séquence 1
//Si on a 011111
   //-> faire truc séquence 2
//Si on a 111110
   //-> faire truc séquence 3
//Si on a 111101
  //-> faire truc séquence 4
//Si on a 110111
   -> faire truc séquence 5

//Interruption
   //Prendre l'état des broches
   //Stoquer dans le tableau
   //Si sécurité
      //Couper le réseau
   //Revenir

Et voila ou j'en suis smiley
9  International / Français / Piloter un réseau de train avec une Arduino 2560 on: February 20, 2014, 02:20:47 pm
Bonsoir,

Voila un bout de temps que j'ai pas eu l'occasion de m'amuser dans le petit monde de l'embarqué libre. Ce soir, je remet le nez dedans.

Passez cette petite introduction de retour, je viens avec une belle interrogation et j'aimerais gravité autour d'un même sujet. Le pilotage d'un réseau de train. J'ai réaliser un séquensage complet et je me charge de travailler avec des sous-routines. Les sorties de la cartes piloterons des petits transistors (2N2222) qui piloterons des relais avec diode de roue libre.

Voyons maintenant la capture d'événements non bloquant.  Je possède plusieurs capteur, on va dire entre 6 et 10 en analogique de type LDR (résistance qui varient en fonction de la lumière). Les interruptions sont disponible sur certaines pins. Hélas, je pense utiliser les CAN intégré aux voies A0 à A10.

A ce moment là; en farfouillant sur le net, j'ai vue qu'il était possible de faire ceci:
- Toutes les 20 à 30µs, passer en interruption
-- Lire l'état de chaque entrées analogiques
-- Mettre des flags (pour éviter les rebonds due aux wagons)
-- Placer dans un tableau chaque état
-- Revenir au programme principal
- En fonction des états de chaque capteur, de l'image du terrain, il convient de piloter tel et tel sorties.

Mon principal souci est de savoir si, comme je dois faire des pauses programme sans blocage, on peut faire ces interruptions toute les x µs. Dans le cas ou c'est possible, quelles types de code est à mettre en oeuvre ?

Ensuite, j'ai un second souci. Forcément !! Comme j'ai expliqué, c'est un automatisme. C'est à dire que les trains se pilotent seul. Il se trouve qu'à un moment donné, je gère une séquence qui n'en est plus une. L'ensemble de la séquence peut-être longue.

Pour faire bref, c'est du style.
- Le train 1 part, 3 minutes plus tard il croise la cellule 1 (capteur optique).
- Le train 2 part, la section précédente est éteinte.
- Le train 1 arrive en gare 1, il passe sur la cellule 2 ce qui déclenche le départ du train 3.
- Le train 3 part, 4 minutes plus tard, il passe sur la cellule 1.
...

Comme on voie, la même celule est croisé deux fois dans la séquence et, bien sûr ne doit pas faire la même action. Une des idées aurait été de placé plus astucieusement les cellule. C'est en cours d'étude. Mais je suis convaincue qu'il faille impérativement avoir l'image des train et leurs position en mémoire dans le logiciel. Voila les avis la dessus sont ouvert.

N'hésitez pas à me demande des informations ou à me demander de complété. Je vais essayer d'aller jusqu'au bout. Le tout est que ça soit possible à mettre en ouvre avec des sous-routines (fonctions / classes).

Merci de votre attention et des réponses qui me seront données.
10  International / Français / Re: Tempo, gestion de train, programme parallèle. on: September 12, 2013, 07:58:19 am
Oui, mais à ce moment là tu n'exploite pas la possibilité d'étendre celle-ci.

La méga s'impose pour deux choses. Ses nombreux ports TX/RX + I2C. C'est pas le cas de la Uno.

Ensuite, ma volonté est de garder le moins de fils possible tout en disposant de block cantons.

Un canton peut aussi être une uno avec ses relais ou voir de la PWM pour les démarrages progressifs ainsi que ses capteurs et la signalisations.

Ainsi un bus I2C peut circuler sous le réseau et piloter le tout depuis une UC simplifié. Tout dépends de ce que le club qui possède le réseau voudra faire. Je m'adapte aux deux cas !

Mais en gros il faut pas résonner en une carte pour ce projet. Il faut aller au delà.
11  International / Français / Re: Tempo, gestion de train, programme parallèle. on: September 10, 2013, 11:40:32 pm
Bonjour,

Alors, il semblerais qu'une solution viable puisse se faire directement avec les registres. Sauf que sur ce point, en Arduino, je ne suis pas calé. Comme je veux pouvoir disposer de plusieurs sorties, je vais donc reconcidérer le système différemment.

Alors, nous avons les entrées (capteurs optiques), ils passeront par des PCF 8574, le bus via la carte méga de gestion.
Nous avons des sorties qui peuvent se temporiser au lancement et qui passeront par le bus, le PCF 8574, transistor et enfin relais puissance + feux.

Rien ne nous empêche de partir avec un bus série sur une autre carte uno ou méga par exemple avec la sortie série 1 ou 2, et de charger de tempo particulière la carte 2 qui elle enverra aussi sur i2c ses propres sorties temporisés. Ainsi, les tempos qui doivent être indépendante sont bien piloté par la carte de gestion mais peut sans problème laisser le fonctionnement des autres capteur sans blocage.

En retour la carte tempo peut donner d'autres infos tel que (j'ai fini, tu peux lancer une autre commande...)

On se retrouverais avec le principe suivant.

Capteurs -> PCF -> I2C -> Méga 1 (Si tel capteur est en marche.... lancer la tempo) -> série -> Uno (J'ai ordre de temporiser 5s le relais X, je renvoie un ACK) Début de tempo.
Capteurs -> PCF -> I2C -> Méga 1 (Si tel capteur est en marche.... Démarrer le relais Y, Eteindre le relais Z) -> I2C -> PCF -> Relais -> voies
Capteurs -> PCF -> I2C -> Méga 1 (Si tel capteur est en marche.... Démarrer le relais Z, Eteindre le relais Y) -> I2C -> PCF -> Relais -> voies
Uno (5s le relais X est collé, je renvoie une information) -> série -> Méga 1 (la tempo est fini, eteindre Z et Y) -> I2C -> PCF -> Relais -> voies

Voila, en fait, je partage le travail. D'une c'est plus simple, De deux , si  on a pas besoin d'étendre plus que ça le comportement des cartes, on peut retirer la Uno.

Maintenant, il faut que je parle structure de programme. Je prévoie de travailler sur plusieurs scénarios. Et en cette matière, il faudra gérer une matrice des zones vides et pleine. Les sections d'arrêt. Bien, qu'avec l'âge, j'aurais tendance aussi à couler les pleines voies par sécurité. Ainsi on limiterais les collisions. J'en veux pour preuve que je cours encore derrière les trains en cas de panne automatisme et même arrêt de celui-ci ! La logique choisit ai départ voulais qu'un train seul finisse toujours par avancer de base. C'est une grave erreur après coup.

Il faut donc, je pense crée un tableau de bool. Chaque section ayant un numéro de 0 à X, il devient évident que nous pouvons écrire:
canton
  • =1
canton[1]=0
canton[2]=0
...
canton[X]=1

On voie très nettement que si canton 1 précède le canton 0, le train situé sur le canton 0 peut aller sur le canton 1. Alors le relais qui pilote le canton 0 peut se fermer et le train part sur le canton 0. Quelques ms plus tard, les feux basculerons du vert au rouge. Sauf que du coup, je me retrouve avec un jeu de tempo... encore ! Pire, j'ai tellement de voies à gérer et de boutons à prendre en ligne de compte que mes PCF vont vite être limité.

Il convient alors de passer à autre chose. Mais quoi ? I2C entre Méga et plusieurs UNO ?

Merci pour vos remarqes.
12  International / Français / Tempo, gestion de train, programme parallèle. on: September 10, 2013, 11:24:42 am
Bonjour,

Voila un long moment sans venir poser des questions sur l'Arduino. Je dois dépanner un réseau de train. Ben oui, les modifications qui ont eu lieu à eu raison de l'ancien système de contrôle.

Avant de me lancer dans le type de pilotage à scénario, j'aurais aimer poser une question technique et éventuellement voir sa réponse coder pour m'en inspirer dans le projet de restructuration de l'automatisme.

Je dois gérer des captures, elles passeront par des capteurs optiques, des PCF8574 de chez NXP et attérirons sur le bus I2C. Ca je gère pas trop mal. Disons que j'ai l'état de l'occupation des voies, ou plus précisément des top synchros. Ces tops, permette de faire avancer l'automatisme d'un pas. Oué, c'est pas encore ça la question et ça va venir.

Là ou je n'en sait rien. Est-il possible de déclencher une temporisation qui déclenchera une sortie sur l'i2c au bout d'un certain temps, tout en ayant le reste qui fonctionne ?

Au départ je pensait attendre que. Tant que la cellule X n'est pas actionné, on attends. Sauf que 6 j'ai mes 5 trains qui circules, là, je risque de ne plus être capable de compter en attendant que. Du coup, ma tempo ne se ferais pas ! Il reste la solution de l'interruption. J'ai remarque combien elle était hasardeuse sous Arduino dans certains cas (i2c entre autre). Du coup, est-ce qu'il existe une vraie solution compatible ?

Voila, j'attends de voir les réponses et quelques exemples que je pourrait faire sur table avec quelques boutons et diodes. Une dernière chose, il faut que ça soit mis en place demain et... heu, on viens de me prévenir ! Donc faut un truc simple, vite fais et qui tienne la charge pendant 8h sur 2jours. Voyez le chantier !

Remarque c'est toujours quand c'est la cata... que l'on demande à l'électricien de refaire tout neuf !

Merci pour les infos.
++
13  International / Français / Re: Arduino nano, quelques informations on: February 04, 2013, 02:09:44 am
Ok, ça c'est une solution à étudier  smiley-wink

Si je résume, tu fais reconnaître ta carte en bluetooth puis ensuite, tu programme avec ton ide classique.
Au lieu d'avoir /dev/tty, c'est un autre lien à choisir.

Quelqu'un aurais une piste sur ce type d'emploie ?
14  International / Français / Re: Arduino nano, quelques informations on: January 31, 2013, 07:38:55 am
Bon, à ce stade, je pense que je vais devoir recadré !

Quote
De plus on me parle d'un tuto, quelle lien ? Quelle forum ? Quelles données saisir sur google pour retrouver le dit sujet ? Je veux pas faire mon noob mais bon, avancer une source sans lien

Tu ne vas quand même pas dire que depuis 1 an que tu es inscrit sur ce forum tu n'as jamais vu que juste sous le sigle arduino  il y avait écrit :

Child board:
    Tutoriels et cours
    Réalisations et Projets Finis
    Le bar


1/ Je ne suis pas censé avoir parcouru tout le site, même en un ans !
2/ C'est beau d'avancer de tels propos à mon égard, mais comme je t'ai expliqué plus haut, si tu avance un post particulier, pense à mettre le lien.
3/ Je ne me prends pas pour la modération mais quand même tu y va un peu fort pour un simple lien.
4/ Continue à faire la forte tête et je n'écouterais plus tes indications, mais ceux des autres qui prennent eux, le temps d'expliquer et de mettre des liens.

Maintenant, si ça plait pas que des gens poste sur un forum pour avoir les bonnes infos, pourquoi poste-tu sur ce sujet ? Je te laisse la liberté de te ressaisir avant que les choses ne s'enveniment entre toi et moi. Merci

Fin du recadrage.

Ok pour le câble. C'est vrai j'avais pas pensé à ça. Mais alors si j'utilise un tel câble, je suis donc reliée en direct sans séparation machine PC <=> carte. C'est un risque à prendre avec le milieu aquatique ! Pas sûr que ça puisse être le bon choix. M'enfin ça me coûte pas grand chose d'essayer ce genre de méthode.
15  International / Français / Re: Arduino nano, quelques informations on: January 31, 2013, 03:53:47 am
Où as tu vu que la nano n'est plus fabriquée ?
Lorsque je clique sur le lien buy From Arduino Store, j'ai ceci : http://store.arduino.cc/eu/index.php?main_page=product_info&cPath=11&products_id=77

Pas clair cette affaire là  smiley-eek-blue

Si c'est un problème de place je persiste le mieux, si tu n'as pas besoin de la liaison USB en permanence, c'est une mini-pro (35mm x 20mm) et cerise sur le gâteau  tu économise la consommation de l'interface USB, même si ce n'est que quelques mA c'est toujours ça de pris.
Ah bon, l'interface usb est une conso de plus ? Ok, je note !  smiley-wink

Pour la programmation voir le tuto de Jean-Marie : c'est un long fil très complet on ne fait pas mieux.
Mwai certes faut épluché... Mais bon, j'ai pas l'impression que ça soit une si bonne idée de toujours épluché. Je veux dire par là que peut-être on devrais avoir une page qui regroupe déjà toutes les bonnes infos !

De plus on me parle d'un tuto, quelle lien ? Quelle forum ? Quelles données saisir sur google pour retrouver le dit sujet ? Je veux pas faire mon noob mais bon, avancer une source sans lien  smiley-eek-blue

Bon, ce qui est sûr c'est qu'il faille au mini:
1/ 6 voies PWM hors TX/RX
2/ Une voie série TX/RX (éventuellement une Interruption autre que les pins cités)
3/ Une voie I2C pour augmenter les ports d'entrées / sorties du récepteur (capteurs, accéléromètres, sonar...)

Voila, les impératifs sont là, maintenant, je pense effectivement passé sur une carte sans USB + système USB externe. C'est plus simple au final encore que. Si je conserve l'USB, je pourrait facilement dépanner sur table. Sinon, faudra que je me trimbale avec le labo  smiley-fat
Pages: [1] 2 3 ... 8