diff --git a/Programme_arduino_esclave b/Programme_arduino_esclave index 04ee952..6806e27 100644 --- a/Programme_arduino_esclave +++ b/Programme_arduino_esclave @@ -1,9 +1,11 @@ #include +//Déclaration des trois liaisons série soft de la brique esclave. La quatrième liaison est la liaison hard SoftwareSerial soft1(A3,A2); SoftwareSerial soft2(6,5); SoftwareSerial soft3(9,10); +//Déclaration des pins pour handshake des quatre liaisons const int in1 = A5; const int out1 = A4; @@ -16,13 +18,21 @@ const int out3 = 12; const int in4 = 2; const int out4 = 3; +//Indique si un premier message a été reçu ou non int prem = 0; + +//Indique sur quelle liaison se trouve la brique maitre int papa = 0; +//Potentiomètre, pour une potentielle utilisation future int potar = A0; +//Id et type de la brique. A modifier si l'on veut changer l'un ou l'autre. +char id = 0b00110001; + void setup() { + //Initialiser les quatres liaisons série, les pins du handshake en input/output, et mettre les valeurs par défaut sur les out. Serial.begin(9600); soft1.begin(9600); soft2.begin(9600); @@ -45,16 +55,28 @@ void setup() void loop() { + //Message qui sera envoyé par la brique String msg=""; + + //Variable stockant chaque octet reçu char inByte='a'; + + //Pour les délais int tps; int timeout; + + //Indique par quel port série le message a été reçu int fin1=0,fin2=0,fin3=0,fin4=0; - char id = 0b01100001; + + + //Lecture du pin handshake à high sur un des quatres port, ce qui veut dire qu'une demande de communication est envoyée. + //Chacune des quatre sections qui suivent sont presque entièrement identiques, la seule variation est le port lu. if(digitalRead(in1)==HIGH){ + + //Protocole d'écoute sur une liaison série digitalWrite(out1,HIGH); soft1.listen(); - timeout=0; + timeout=0; tps=millis(); while(soft1.available()<=0 && timeout<1000){ timeout= millis() - tps; @@ -68,12 +90,14 @@ void loop() delay(10); } } + + //Si c'est le premier message reçu, on attribue au port correspondant le statut de père, c'est dans cette direction qu'est la brique maitre. if(prem==0){ prem=1; papa=1; msg += id; - if((id & 0xF0) ==0x60) msg += '{'; //char pour 123 - else if((id & 0xF0) ==0x40) msg += 0b00000100; + if((id & 0xF0) ==0x60) msg += '{'; //char pour 123 //0x60 correspond à une brique if, insèrer ici le code pour lire un potentiomètre (valeur à comparer) + else if((id & 0xF0) ==0x40) msg += 0b00000100; //0x40 correspond à une brique début while, insèrer ici le code pour lire un potentiomètre (nombre de boucles à exécuter) msg += '\n'; } else msg+= '\n'; @@ -82,6 +106,7 @@ void loop() delay(50); } + //Voir ci-dessus pour les détails else if(digitalRead(in2)==HIGH){ digitalWrite(out2,HIGH); soft2.listen(); @@ -113,6 +138,8 @@ void loop() delay(50); } + +//Voir ci-dessus pour les détails else if(digitalRead(in3)==HIGH){ digitalWrite(out3,HIGH); soft3.listen(); @@ -144,6 +171,7 @@ else if(digitalRead(in3)==HIGH){ delay(50); } +//Voir ci-dessus pour les détails else if(digitalRead(in4)==HIGH){ digitalWrite(out4,HIGH); timeout=0; @@ -173,9 +201,15 @@ else if(digitalRead(in3)==HIGH){ digitalWrite(out4, LOW); delay(50); } - + + + //Si on a reçu un message sur un port, on le renvoie sur tous. + //Comme ci-dessus, les quatres sections suivantes sont identiques. if(fin1==1 || fin2==1 || fin3==1 || fin4==1){ + + //Si le père est dans cette direction, ou si le message ne provient pas de cette direction, on y envoie la chaine if((fin1==1 && papa == 1) || (fin1 == 0)){ + //Début du protocole d'envoi timeout=0; tps = millis(); while(timeout<1000){ @@ -189,8 +223,10 @@ else if(digitalRead(in3)==HIGH){ } } digitalWrite(out1,LOW); + //Fin de l'envoi série } + //Identique à celui-ci dessus if((fin2==1 && papa == 2) || (fin2 == 0)){ timeout=0; tps = millis(); @@ -208,7 +244,7 @@ else if(digitalRead(in3)==HIGH){ digitalWrite(out2,LOW); } - + //Identique à celui-ci dessus if((fin3==1 && papa == 3) || (fin3 == 0)){ timeout=0; tps = millis(); @@ -225,7 +261,8 @@ else if(digitalRead(in3)==HIGH){ } digitalWrite(out3,LOW); } - + + //Identique à celui-ci dessus if((fin4==1 && papa == 4) || (fin4 == 0)){ timeout=0; tps = millis(); -- libgit2 0.21.2