Bonsoir à tous,
Bon je n'ai pas encore fini mais j'ai essayé de faire un programme...
Vous en pensez quoi? je vais dans le mur ou je peux poursuivre??
C'est surement bourré de fautes mais j'y travail..
D'avance merci pour vos réponses..
// Gestion d'un train automatique par badges RFID posés sur la voie
#include <SPI.h>
#include <RFID.h>
RFID RFID(10,9);
/*
* Décommentez la ligne ci-dessous pour avoir l'affichage
* de l'état courant de l'automate sur les broches 8 à 12
*/
// #define AVEC_AFFICHAGE_ETAT
//répertoir des gadges :
int UID[5]={};
int Gare1[5]={34,199,71,115,209}; // badge gare 1
int Gare2[5]={60,111,82,115,114}; //badge gare 2
int Fin1[5]={17,17,76,115,63}; //badge Fin de voie 1
int Fin2[5]={176,247,96,131,164}; //badge Fin de voie 2
//gestion du pont en H
int IN1 = 6; // commande pont en H "1"
int IN2 = 7; // commande pont en H "2"
int a; //rapport cyclique entre 0 et 255
/*-------------------------------------------------------------------*/
/* Les états possible pour le PN */
enum { LOCO_ARRET, LOCO_SENS1, LOCO_SENS2, LOCO_ACC_SENS1GARE, LOCO_DEC_SENS1GARE, LOCO_ACC_SENS2GARE, LOCO_DEC_SENS2GARE, LOCO_ACC_SENS1FIN, LOCO_DEC_SENS1FIN, LOCO_ACC_SENS2FIN, LOCO_DEC_SENS2FIN, TEMPO_FIN_SENS1, TEMPO_GARE_SENS1, TEMPO_FIN_SENS2, TEMPO_GARE_SENS2 } etat_loco;
//adressage à des pin en vu d'un affichage
const byte Badge_Gare1 = 2;
const byte Badge_Gare2 = 3;
const byte Badge_FinDeVoie1 = 4;
const byte Badge_FinDeVoie2 = 5;
/* Feux de la loco */
const byte feu_sens_1Pin = 8;
const byte feu_sens_2Pin = 9;
/*-------------------------------------------------------------------*/
// La temporisation en gare en ms
const unsigned long temporisationEnGare = 60000;
const unsigned long temporisationEnFinDeVoie = 2000;
/*-------------------------------------------------------------------*/
/* Intialisations */
void setup()
{
Serial.begin(9600);
SPI.begin();
RFID.init();
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
//sortie moteur sens 1 et sens 2 à 0
digitalWrite(IN2, 0);
digitalWrite(IN1, 0);
// Rapport cyclique à 0
a=0;
}
/*-------------------------------------------------------------------*/
/* Recherche des Badges RFID */
void loop()
{
if (RFID.isCard()) {
/* Lecture du tag */
if (RFID.readCardSerial())
{
/*Serial.print("L'UID est: ");*/
for(int i=0;i<=4;i++)
{
UID[i]=RFID.serNum[i];
/* Serial.print(UID[i],DEC);
Serial.print(".");*/
}
/*Serial.println("");*/
}
/* fin de Lecture du tag */
if (UID[0] == Gare1[0]
&& UID[1] == Gare1[1]
&& UID[2] == Gare1[2]
&& UID[3] == Gare1[3]
&& UID[4] == Gare1[4])
{
Badge_Gare1 = HIGH;
else
Badge_Gare1 = LOW;
}
if (UID[0] == Gare2[0]
&& UID[1] == Gare2[1]
&& UID[2] == Gare2[2]
&& UID[3] == Gare2[3]
&& UID[4] == Gare2[4])
{
Badge_Gare2 = HIGH;
else
Badge_Gare2 = LOW;
}
if (UID[0] == Fin1[0]
&& UID[1] == Fin1[1]
&& UID[2] == Fin1[2]
&& UID[3] == Fin1[3]
&& UID[4] == Fin1[4])
{
Badge_FinDeVoie1 = HIGH;
else
Badge_FinDeVoie1 = LOW;
}
if (UID[0] == Fin2[0]
&& UID[1] == Fin2[1]
&& UID[2] == Fin2[2]
&& UID[3] == Fin2[3]
&& UID[4] == Fin2[4])
{
Badge_FinDeVoie1 = HIGH;
else
Badge_FinDeVoie1 = LOW;
}
RFID.halt();
delay(100);
}
switch (etat_loco)
{
case LOCO_SENS1:
analogWrite(IN1, 255);
/* lecture du badge détecter un train */
if (digitalRead(Badge_Gare1) = HIGH) {
/* train en gare 1 */
/* On décélère */
analogWrite(IN1, a);
a = a - 1;
delay(20);
etat_loco = LOCO_DEC_SENS1GARE;
}
if (digitalRead(Badge_FinDeVoie1) = HIGH) {
/* train en fin de voie 1 */
/* On décélère */
analogWrite(IN1, a);
a = a - 1;
delay(20);
etat_loco = LOCO_DEC_SENS1FIN;
}
break;
case LOCO_SENS2:
analogWrite(IN2, 255);
/* lecture du badge détecter un train */
if (digitalRead(Badge_Gare2) = HIGH) {
/* train en gare 1 */
/* On décélère */
analogWrite(IN2, a);
a = a - 1;
delay(20);
etat_loco = LOCO_DEC_SENS2GARE;
}
if (digitalRead(Badge_FinDeVoie2) = HIGH) {
/* train en fin de voie 1 */
/* On décélère */
analogWrite(IN2, a);
a = a - 1;
delay(20);
etat_loco = LOCO_DEC_SENS2FIN;
}
break;
case LOCO_DEC_SENS1GARE:
/* On attend que a = 0 puis on lance la tempo */
if (a = 0) {
etat_loco = TEMPO_GARE_SENS1;
}
break;
case LOCO_DEC_SENS2GARE:
/* On attend que a = 0 puis on lance la tempo */
if (a = 0) {
tempsArret = millis() + temporisationEnGare;
etat_loco = TEMPO_GARE_SENS2;
}
break;
case LOCO_DEC_SENS1FIN:
/* On attend que a = 0 puis on lance la tempo */
if (a = 0) {
etat_loco = TEMPO_FIN_SENS1;
}
break;
case LOCO_DEC_SENS2FIN:
/* On attend que a = 0 puis on lance la tempo */
if (a = 0) {
etat_loco = TEMPO_FIN_SENS2;
}
break;
case TEMPO_GARE_SENS1:
/* Un train est en gare on attends 60secondes */
if (millis() >= temporisationEnGare) {
/* On redémare progressivement */
etat_loco = LOCO_ACC_SENS1GARE ;
}
break;
case TEMPO_GARE_SENS2:
/* Un train est en gare on attends 60secondes */
if (millis() >= temporisationEnGare) {
/* On redémare progressivement */
etat_loco = LOCO_ACC_SENS2GARE ;
}
break;
case TEMPO_FIN_SENS1:
/* Un train est en gare on attends 60secondes */
if (millis() >= temporisationEnFinDeVoie) {
/* On redémare progressivement */
etat_loco = LOCO_ACC_SENS2FIN ;
}
break;
case TEMPO_FIN_SENS2:
/* Un train est en gare on attends 60secondes */
if (millis() >= temporisationEnFinDeVoie) {
/* On redémare progressivement */
etat_loco = LOCO_ACC_SENS1FIN ;
}
break;
case LOCO_ACC_SENS1FIN:
/* On attend que a = 0 puis on lance la tempo */
analogWrite(IN1, a);
a = a + 1;
delay(20);
etat_loco = LOCO_SENS1;
}
break;
case LOCO_ACC_SENS2FIN:
/* On attend que a = 0 puis on lance la tempo */
analogWrite(IN2, a);
a = a + 1;
delay(20);
etat_loco = LOCO_SENS2;
break;
case LOCO_ACC_SENS1GARE:
/* On attend que a = 0 puis on lance la tempo */
analogWrite(IN1, a);
a = a + 1;
delay(20);
etat_loco = LOCO_SENS1;
break;
case LOCO_ACC_SENS2GARE:
/* On attend que a = 0 puis on lance la tempo */
analogWrite(IN2, a);
a = a + 1;
delay(20);
etat_loco = LOCO_SENS2;
break;
case LOCO_ARRET:
/* La loco est arrté ou qu'elle soit */
analogWrite(IN1, 0)
analogWrite(IN2, 0)
break;
}
}