Maintenant que les temporisations fonctionnent bien depuis la nouvelle version 1.2.1, voici le petit exercice classique de programmation d'un feu tricolore.
On veut que la LED rouge s'allume pendant 4 secondes, ensuite la LED verte pendant 3 secondes, puis la LED jaune pendant une seconde et rebouclage du cycle rouge, vert, jaune, etc...
Il y a bien sûr différentes solutions au problème, je vous en propose une.
On va utiliser trois temporisations qui seront enclenchées au départ en même temps, mais qui se déclencheront ensuite selon des durées différentes. Au déclenchement de la dernière temporisation, on retrouvera les conditions initiales et le cycle recommencera.
On va utiliser les trois mémoires m6, m7 et m8 et leurs temporisations associées tm6, tm7 et tm8.
Les durées des temporisations sera :
- pour tm6, une durée de 4 secondes.
- pour tm7, une durée de 7 secondes.
- pour tm8, une duére de 8 secondes.
Schéma électrique :
| tm6 tm7 tm8 m6 | timer 4 s
+----]/[--------]/[--------]/[----+----( )----+
| | |
| | m7 | timer 7 s
| +----( )----+
| | |
| | m8 | timer 8 s
| +----( )----+
| |
| |
| tm6 o1 | red LED
+----] [-------------------------------( )----+ 4 s
| ___ |
| tm6 tm7 o3 | green LED
+----]/[--------] [--------------------( )----+ 3 s
| ___ ___ |
| tm6 tm7 tm8 o2 | yellow LED
+----]/[--------]/[--------] [---------( )----+ 1 s
| |
Le programme IL pour myTinyPLC :
// Simple traffic light
// IL program for myTinyPLC v.1.2
//
// Set timer 6 delay at 4 seconds
//
stp[1] = 4; // number 4
stp[2] = 66; // Set timer 6 delay
//
// Set timer 7 delay at 5 seconds
//
stp[3] = 7; // number 7
stp[4] = 67; // Set timer 7 delay
//
// Set timer 8 delay at 8 seconds
//
stp[5] = 8; // number 8
stp[6] = 68; // Set timer 8 delay
//
stp[7] = 26; // Read timer 6
stp[8] = 83; // NOT
stp[9] = 27; // Read timer 7
stp[10] = 83; // NOT
stp[11] = 28; // Read timer 8
stp[12] = 83; // NOT
stp[13] = 81; // AND
stp[14] = 81; // AND
stp[15] = 56; // Write memory 6
stp[16] = 57; // Write memory 7
stp[17] = 58; // Write memory 8
//
stp[18] = 26; // Read timer 6
stp[19] = 41; // Write output 1 (red LED)
//
stp[20] = 83; // NOT
stp[21] = 27; // Read timer 7
stp[22] = 81; // AND
stp[23] = 43; // Write output 3 (green LED)
//
stp[24] = 26; // Read timer 6
stp[25] = 83; // NOT
stp[26] = 27; // Read timer 7
stp[27] = 83; // NOT
stp[28] = 28; // Read timer 8
stp[29] = 81; // AND
stp[30] = 81; // AND
stp[31] = 42; // Write output 2 (yellow LED)
//
stp[32] = 99; // END
Aucun commentaire:
Enregistrer un commentaire