Implementando Grafcet en Arduino

Hola a tod@s!

Soy estudiante de automatización y robótica industrial, en junio tengo que entregar un proyecto (maqueta) y he decidido automatizarlo con Arduino a modo de PLC.
El caso es que el programa querría basarlo en Grafcet pero mirando en internet poco he encontrado, por no decir nada... sobre como implementar Grafcet en codigo C, y menos en Arduino...
Todavía no estoy muy familiarizado con las particularidades del código Arduino, os pongo un sckech de prueba que hice ayer a ver si podéis decirme si lo veis bien y que cambiaríais.
Básicamente primero hago un registro de entradas, después voy activando etapas cuando se cumplen sus condiciones de transición y al final está la parte combinacional en la que según estén activas unas variable u otras, se activarán las correspondientes salidas.
También querría saber si las variables están bien declaradas o si hay algo mal hecho... (es solo una primera parte del programa) falta mucho por hacer , solo es un borrador... pero si vale para hacerse una idea de lo que quiero hacer y que me podáis corregir si algo es incoherente o está en mal sitio...

const int final_1=21, final_2=22, final_3=23, final_4=24, boton_1=25, boton_2=26, boton_3=27, boton_4=28, boton_5=29; // pines de entrada*************
const int led_1=31,led_2=32,led_3=33,led_4=34,led_5=35; // pines salida****************

int estado_final_1=0, estado_final_2=0, estado_final_3=0, estado_final_4=0, estado_final_5=0;
int estado_boton_1=0, estado_boton_2=0, estado_boton_3=0, estado_boton_4=0, estado_boton_5=0;

boolean etapa_0=true, etapa_1=false, etapa_2=false, etapa_3=false, etapa_4=false, etapa_5=false, etapa_6=false, etapa_7=false, etapa_8=false, etapa_9=false, etapa_10=false;


void setup() {
  
  pinMode(led_1, OUTPUT), (led_2, OUTPUT), (led_3, OUTPUT), (led_4, OUTPUT),(led_5, OUTPUT);
  pinMode(final_1,INPUT), (final_2,INPUT), (final_3,INPUT), (final_4,INPUT), (boton_1,INPUT), (boton_2,INPUT), (boton_3,INPUT), (boton_4,INPUT), (boton_5,INPUT);
}


 void loop(){
  
   estado_final_1= digitalRead(final_1); estado_final_2= digitalRead(final_2); estado_final_3= digitalRead(final_3); estado_final_4= digitalRead(final_4);
   estado_boton_1= digitalRead(boton_1); estado_boton_2= digitalRead(boton_2); estado_boton_3= digitalRead(boton_1); estado_boton_4= digitalRead(boton_4); estado_boton_5= digitalRead(boton_5);
   
   //*******************
   
   // etapa 1
   if (etapa_0 == true && estado_boton_1==HIGH ) {     
        etapa_1=true; etapa_0=false; } 
  
  // etapa 2    
   if (etapa_1 == true && final_1==HIGH ) {     
        etapa_2=true; etapa_1=false; }
   
   // etapa 3
   if (etapa_2 == true && estado_boton_2==HIGH ) {     
        etapa_3=true; etapa_2=false; 
      } 
  
  // etapa 4   
   if (etapa_3 == true && final_2==HIGH ) {     
        etapa_4=true; etapa_3=false; }
        
   // etapa 5
   if (etapa_4 == true && estado_boton_3==HIGH ) {     
        etapa_5=true; etapa_4=false; 
      } 
  
  // etapa 0   
   if (etapa_5 == true && final_3==HIGH ) {     
        etapa_0=true; etapa_5=false; }     
        
   //************************

   if (etapa_1== true)
   digitalWrite(led_1,HIGH);
   else 
     digitalWrite(led_1,LOW);
   
   if (etapa_2== true)
   digitalWrite(led_2,HIGH);
   else 
     digitalWrite(led_2,LOW);
     
   if (etapa_3== true)
   digitalWrite(led_3,HIGH);
   else 
     digitalWrite(led_3,LOW);
   
   if (etapa_4== true)
   digitalWrite(led_4,HIGH);
   else 
     digitalWrite(led_4,LOW);
     
    if (etapa_5== true)
   digitalWrite(led_5,HIGH);
   else 
     digitalWrite(led_5,LOW);
    
 }

Como digo más arriba, solo es un sckech de prueba para ver si es viable la cosa. Iré poniendo aquí el progreso
Un saludo

He cambiado el código, ahora es "más decente" XD

Y al meterlo en el arduino te funciona bien? Es decir, con todo el hardware conectado
Deberias echarle un ojo al numero de pin donde conectas los leds porque hasta el 35 no se yo si hay....

Hola!
Este código así como está no funciona, pero no por la cantidad de pines... uso una placa Arduino Mega que tiene un total de 54 pines E/S...
El código funciona perfectamente (no este de arriba), me falta ver la manera de añadir temporizadores y contadores en funciones independientes , así como un par de funciones de seguridad / estabilidad como es el reinicio tras corte de corriente y alguna cosilla de la guia GEMMA.
Cuando esté un poco más avanzado lo pondré aquí :wink:
Un saludo

Mira esto => Máquina de estados: Librería FSM - Español - Arduino Forum

Busca en google por "finite state machine"

Muy interesante Igor, de momento tengo hecho este grafcet:
Lo he simulado en una protoboard con leds y funciona, aunque todavía faltan cosas por añadir.
Es una maqueta que separará bolas de colores con 2 servos, varios sensores fotoeléctricos, un sensor de color y un cilindro neumático de doble efecto con su correspondiente electroválvula 4/3.
Faltan por llegarme algunas piezas, tan pronto tenga todo empezaré a montarlo y veremos como va la cosa :wink: