Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Cevenol38

Pages: [1]
1
Vos projets / Re : Barrière infra rouge et interruptions
« le: juin 19, 2016, 09:33:28 pm »
Exactement, au début j'avais peur que rien ne soit détecté mais en fait la fréquence d'exécution de la boucle loop est telle qu'il n'y a aucun risque :).
Mon commentaire à 15 n'est plus à jour en effectuant de nombreuses mesures je l'ai augmenté à 100 qui semble vraiment une valeur seuil.
Tout fonctionne bien à présent :), reste à affiner le code mais je suis sur la bonne voie ;).
Merci à tous, le fait d'exposer mon problème m'a permis de le voir sous un autre angle.

2
Vos projets / Re : Barrière infra rouge et interruptions
« le: juin 19, 2016, 06:33:17 pm »
Même résultat, finalement j'ai laissé tombé les interruptions et j'ai fait cela autrement en simplement mesurant l'écart de valeur lorsque la barrière est rompue ou pas :) et ça marche très bien.
Voici le code en mode debug pour un seul canton :)
//Affectation des ports
//d'occupation
//const byte detect_v1[]={A0,A1,A2,A3,A4,A5};
const byte detect_v1[]={A0,A0,A0,A0,A0,A0};
//const byte detect_v2[]={A8,A9,A10,A11,A12,A13};
const byte detect_v2[]={A0,A0,A0,A0,A0,A0};
//de disjoncteurs
const int disj_v1[]={23,25,27,29,31,33};
const int disj_v2[]={22,24,26,28,30,32};
//des aiguillages;
const int p_aiguillages[]={34,36,38,40,42};
//Variables globales
// variable de temps en millisecondes
unsigned long liberation_v1[] = {0,0,0,0,0,0};   // derniere fois que le detecteur a changé
unsigned long liberation_v2[] = {0,0,0,0,0,0};   // derniere fois que le detecteur a changé
long Delai_liberation = 1000;   // delai d'une seconde pour valider un changement
int occup_vp1=0;
int occup_vp2=0;
int occup_v1[]={0,0,0,0,0,0};
int occup_v2[]={0,0,0,0,0,0};

//Fonctions
void init_canton(byte voie)
{
  Serial.print("Canton initialisé en mode INPUT");
  Serial.println(voie);
  pinMode(voie,INPUT);
}
void detection(byte canton,int num, int occup, int voie)
{
  int etat=analogRead(canton);
  if (etat>100)
  {
    //un train est détecté la valeur lue est supérieure à 15
    if (occup==0)
    {
      Serial.print("Valeur =");
      Serial.println(etat);
      occupation(canton,num,voie);
    }
  }
  else
  {
    if (occup==1)
    //le canton est libre
    {
     
      Serial.print("Valeur =");
      Serial.println(etat);
      liberation(canton,num,voie);
    }
   
  }
}
void occupation(byte canton,int num, int voie)
{
    if (voie==1)
    {
      occup_v1[num]=1;
      liberation_v1[num]=millis();
      Serial.print("Voie 1 Canton occupe :");
      Serial.println(canton);
    }
    else if(voie==2)
    {
      occup_v2[num]=1;
      liberation_v2[num]=millis();
      Serial.print("Voie 2 Canton occupe :");
      Serial.println(canton);
    }
   
   
}
void liberation(byte canton,int num, int voie)
{
  unsigned long time;
  time=millis();
  if (voie==1)
    {
      if (time-liberation_v1[num] > Delai_liberation)
      {
        occup_v1[num]=0;
        Serial.print("VOIE 1 Canton libre :");
        Serial.println(canton);
      }
    }
    else if(voie==2)
    {
      if (time-liberation_v2[num] > Delai_liberation)
      {
        occup_v2[num]=0;
        Serial.print("VOIE 2 Canton libre :");
        Serial.println(canton); 
      }
     
    }
}
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);           // set up Serial library at 9600 bps
  //for (int i=0;i<6;i++)
  for (int i=0;i<1;i++)
  {
    init_canton(detect_v1[i]);
   // init_canton(detect_v2[i]);
  }
}

void loop() {
  // put your main code here, to run repeatedly:
  //for (int i=0; i<6;i++)
  for (int i=0;i<1;i++)
  {
    detection(detect_v1[i],i,occup_v1[i],1);
    //detection(detect_v2[i],i,occup_v2[i],2);
  }

}

3
Vos projets / Re : Barrière infra rouge et interruptions
« le: juin 19, 2016, 02:51:40 pm »
Oui autant pour moi, la compilation fonctionne mais cela ne change rien :(. Est ce que cela ne viendrait pas de la résistance de 2.2kohm qui serai trop importante ?
Ce qui est curieux c'est que sans les interruptions cela fonctionne très bien

4
Vos projets / Re : Barrière infra rouge et interruptions
« le: juin 19, 2016, 12:05:36 pm »
Avec cette librairie le prog ne compile pas car non compatible avec arduino mega :(.
Ce qui est curieux c'est que lorsque je débranche la broche la variation de courant est détectée puisque ma led change d'état.

5
Vos projets / Re : Barrière infra rouge et interruptions
« le: juin 19, 2016, 11:55:23 am »
En fait une mesure au multimètre indique un très faible voltage sur ma sortie de circuit 0.28v sans obstacle et 0.06V lorsque il y a un obstacle est ce normal ne devrait on pas retrouver 5V ?

6
Vos projets / Re : Barrière infra rouge et interruptions
« le: juin 19, 2016, 11:48:41 am »
Bon ben je viens de faire un test avec A8 et ça ne change rien :(

7
Vos projets / Re : Barrière infra rouge et interruptions
« le: juin 19, 2016, 11:45:06 am »
OK du coup quelle broche puis je utiliser ? et surtout comment la désigner dans mon programme :) ?

8
Vos projets / Re : Barrière infra rouge et interruptions
« le: juin 19, 2016, 11:38:59 am »
Merci :)
Du coup à quoi correspond le A0 indiqué sur le circuit de la carte ?   :-[ enfin je veux dire par quel numéro est il identifié en terme de programmation ?

9
Vos projets / Barrière infra rouge et interruptions
« le: juin 19, 2016, 09:14:42 am »
Bonjour à tous,
Je souhaite utiliser le système de barrière infrarouge présenté sur le site pour gérer une coulisse. Le programme de test du site fonctionne très bien avec mon montage et mon Arduino Mega mais lorsque je souhaite utiliser des interruptions rien ne se passe  :(. Peut être que quelque chose m'a échappé sur l'utilisation des interruptions  :o. Voici le code que j'ai testé
#include <PinChangeInt.h>
const byte Test=A0;
const int ledPin = 13;
int cpt=0;
void detect()
{
  cpt++;
}
void vide()
{
  cpt--;
}

void setup()
{
  // put your setup code here, to run once:
  pinMode(ledPin, OUTPUT);     
  pinMode(Test, INPUT_PULLUP);
  PCintPort::attachInterrupt(Test, detect, RISING);
  PCintPort::attachInterrupt(Test, vide, FALLING);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (cpt>0)
  {
      digitalWrite(ledPin, HIGH);
      delay(200);
      digitalWrite(ledPin, LOW);
      delay(200);
      digitalWrite(ledPin, HIGH);
      delay(200);   
      digitalWrite(ledPin, LOW);
      delay(200);
   }
   else
   {
    digitalWrite(ledPin, LOW);
    }

}

Pages: [1]