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