*/*********************************************************************************************
* Détecteur d'occupation des voies S88n à 8 canaux basé sur un controleur Arduino Nano.
*
* Programme librement interpreté par Babar sur la base de celui de Ruud Boer de Novembre 2014.
*
***********************************************************************************************/
Brochage du Bus S88n, des prises RJ45 et de l'Arduino Nano
Data In--------->> S88n: 7------------>> RJ45: 2------------- >> Arduino Nano: D0
Data Out------->> S88n: 7----------->> RJ45: 2--------------->> Arduino Nano: D1
GND------------ >> S88n: 4,6-------- >> RJ45: 3,5------------>> Arduino Nano: GND
Clock---------- >> S88n: 5------------>> RJ45: 4-------------->> Arduino Nano: D2
PS(Load)------>> S88n: 3----------- >> RJ45: 6--------------->> Arduino Nano: D3
Signal--------- >>----------------------- >>-------------------------->> Arduino Nano: D5-D12
*/
int clockCounter=0;
long loopCounter=0;
unsigned int sensors=0;
unsigned int data=0xffff;
const byte dataIn=0; //Entrée des données depuis l'Arduino Nano suivant.
const byte dataOut=1; //Sortie des données vers l'Aarduino Nano précédent ou vers l'ordinateur
boolean loadSensors=false; //Flag qui démarre le chargement des données
void setup() {
pinMode(2, INPUT_PULLUP);
attachInterrupt(0,clock,RISING); //broche 2 = clock interrupt
pinMode(3, INPUT_PULLUP);
attachInterrupt(1,PS,RISING); //broche 3 = PS interrupt
pinMode(dataIn,INPUT_PULLUP); //broche 12 = Entrée des données depuis les modules suivants
pinMode(dataOut, OUTPUT); //broche 13 = Sortie des données vers les modules précédents
digitalWrite(dataOut, LOW); //LED off
pinMode(5, INPUT_PULLUP); // capteur 01
pinMode(6, INPUT_PULLUP); // capteur 02
pinMode(7, INPUT_PULLUP); // capteur 03
pinMode(8, INPUT_PULLUP); // capteur 04
pinMode(9, INPUT_PULLUP); // capteur 05
pinMode(10, INPUT_PULLUP); //capteur 06
pinMode(11, INPUT_PULLUP); //capteur 07
pinMode(12, INPUT_PULLUP); //capteur 08
}
void loop() {
if (loopCounter==10){bitSet(sensors,0);}
if (!digitalRead(5)){bitSet(sensors,0);}
if (!digitalRead(6)) {bitSet(sensors,1);}
if (!digitalRead(7)) {bitSet(sensors,2);}
if (!digitalRead(8)) {bitSet(sensors,3);}
if (!digitalRead(9)) {bitSet(sensors,4);}
if (!digitalRead(10)) {bitSet(sensors,5);}
if (!digitalRead(11)) {bitSet(sensors,6);}
if (!digitalRead(12)) {bitSet(sensors,7);}
}
void PS() {
clockCounter=0;
data=sensors;
sensors=0;
loopCounter++; //Incrémente loopCounter pour créer une temporisation
}
void clock() {
digitalWrite(dataOut,bitRead(data,clockCounter));
delayMicroseconds(16); // améliore la lecture du signal qui vient de l'élément suivant.
bitWrite(data,clockCounter,digitalRead(dataIn));
clockCounter =(clockCounter +1) % 8;
}
|