166 lines
3.4 KiB
C++
166 lines
3.4 KiB
C++
#include "main.hpp"
|
|
#include "autom.cpp"
|
|
#include <thread>
|
|
#include <atomic>
|
|
|
|
int marche_precedent = 0;
|
|
int marche_frontmontant = 0;
|
|
|
|
int arret_precedent = 1;
|
|
int arret_frontdescedant = 0;
|
|
|
|
int bouton_precedent[8];
|
|
int bouton_frontmontant[8];
|
|
int bouton_frontdescendant[8];
|
|
|
|
int cycle = 0;
|
|
long unsigned tempo = 0;
|
|
|
|
int compteur[4];
|
|
|
|
int sens = 1;
|
|
|
|
int ci = 0;
|
|
int mode_auto = 0;
|
|
int mode_manu = 0;
|
|
int etape = 0;
|
|
int etape_2 = 0;
|
|
int etape_sauvegarde = 0;
|
|
|
|
int c7_frontdescendant = 0;
|
|
int c7_precedent = 0;
|
|
|
|
|
|
int main()
|
|
{
|
|
mqtt_open(&client);
|
|
|
|
std::atomic<bool> running{true};
|
|
|
|
while (running)
|
|
{
|
|
std::this_thread::sleep_for(std::chrono::seconds(1));
|
|
}
|
|
|
|
mqtt_close();
|
|
return 0;
|
|
}
|
|
|
|
void process()
|
|
{
|
|
// Gestion du RESET
|
|
// ****************************************************************
|
|
if (reset == 1) {
|
|
std::cout << "RESET" << std::endl;
|
|
etape = 0;
|
|
return;
|
|
}
|
|
|
|
// ****************************************************************
|
|
|
|
// Détection des fronts
|
|
// front montant (état courant supérieur à l'état précédent)
|
|
// front descendant (état courant inférieur à l'état précédent)
|
|
// ****************************************************************
|
|
marche_frontmontant = marche > marche_precedent;
|
|
arret_frontdescedant = arret < arret_precedent;
|
|
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
bouton_frontmontant[i] = bouton[i] > bouton_precedent[i];
|
|
bouton_frontdescendant[i] = bouton[i] < bouton_precedent[i];
|
|
}
|
|
|
|
/* ****************************************************************
|
|
VOTRE PROGRAMME COMMENCE ICI
|
|
**************************************************************** */
|
|
if (etape == 0 && interrupteur[1] == 1 && capteur[1] == 1 && capteur[3] == 1 && capteur[5] == 1) {
|
|
etape = 1;
|
|
}
|
|
|
|
if (etape == 1 && !interrupteur[1]) {
|
|
etape = 0;
|
|
}
|
|
|
|
if (etape != 11 && interrupteur[2] && interrupteur[1] == 0 && (capteur[1]!=1 || capteur[3]!=1 || capteur[5]!=1))
|
|
{
|
|
etape = 10;
|
|
}
|
|
|
|
if (etape == 1 && marche_frontmontant) {
|
|
etape = 2;
|
|
}
|
|
|
|
if (etape == 2 && capteur[0]) {
|
|
etape = 3;
|
|
}
|
|
|
|
if (etape == 3 && capteur[2]) {
|
|
etape = 4;
|
|
}
|
|
|
|
if (etape == 4 && capteur[4]) {
|
|
etape = 5;
|
|
}
|
|
|
|
if (arret_frontdescedant) {
|
|
etape_sauvegarde = etape;
|
|
etape = 6;
|
|
}
|
|
|
|
if (etape == 6 && marche_frontmontant) {
|
|
etape = etape_sauvegarde;
|
|
}
|
|
|
|
if (etape == 10 && marche_frontmontant)
|
|
{
|
|
etape = 11;
|
|
}
|
|
|
|
if (etape == 11 && capteur[1] && capteur[3] && capteur[5])
|
|
{
|
|
etape = 0;
|
|
}
|
|
|
|
if (etape == 1) {
|
|
sortie[8] = 1;
|
|
}
|
|
else if (etape == 5) {
|
|
sortie[8] = 3;
|
|
}
|
|
else if (etape > 1 && etape < 5) {
|
|
sortie[8] = 2;
|
|
}
|
|
else if (etape == 10)
|
|
{
|
|
sortie[8] = millis() / 500 % 2 ? 2 : 0;;
|
|
}
|
|
else {
|
|
sortie[8] = 0;
|
|
}
|
|
|
|
actionneur[0] = !capteur[0] && etape == 2;
|
|
actionneur[2] = !capteur[2] && etape == 3;
|
|
actionneur[4] = !capteur[4] && etape == 4;
|
|
|
|
actionneur[1] = !capteur[1] && etape == 11;
|
|
actionneur[3] = !capteur[3] && etape == 11;
|
|
actionneur[5] = !capteur[5] && etape == 11;
|
|
|
|
/* ****************************************************************
|
|
VOTRE PROGRAMME S'ARRETE ICI
|
|
**************************************************************** */
|
|
|
|
sortie[10] = etape;
|
|
|
|
// Prêt pour un nouveau cycle
|
|
// L'état courant devient l'état précédent
|
|
marche_precedent = marche;
|
|
arret_precedent = arret;
|
|
for (int i = 0; i < 8; i++)
|
|
{
|
|
bouton_precedent[i] = bouton[i];
|
|
}
|
|
c7_precedent = capteur[7];
|
|
}
|