ola Ruilviana, desculpa por não ter postado ontem, mas vamos la.
o programa segue a logica do FBD (blocos com transições entre as ações), meu primeiro skatch usava pinmode- digitalRead -DigitalWrite, mas estava tive problemas com lentidão na leitura das postas e acionamento dos reles, não sou programador e apenas estudo em casa para fazer minhas pequenas automações, deve conter erros de logica e programação no skatch. segue abaixo o codigo inteiro.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <avr/io.h>
#include <util/delay.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//Inicializa o display no endereco 0x27
#define set_bit(Y,bit_x) (Y|=(1<<bit_x)) //ativa o bit x da variável Y (coloca em 1)
#define clr_bit(Y,bit_x) (Y&=~(1<<bit_x)) //limpa o bit x da variável Y (coloca em 0)
#define tst_bit(Y,bit_x) (Y&(1<<bit_x)) //testa o bit x da variável Y (retorna 0 ou 1)
#define cpl_bit(Y,bit_x) (Y^=(1<<bit_x)) //troca o estado do bit x da variável Y (complementa)
#define AND &&
#define OR ||
#define NOT !
//#define set_bit(RES, BIT)(RES |= (1 << BIT)) // Por BIT em nível alto
//#define clr_bit(RES, BIT)(RES &= ~ (1 << BIT)) // Por BIT em nível baixo
//#define tst_bit(RES, BIT)(RES & (1 << BIT)) // testar BIT, retorna 0 ou 1
//#define cpl_bit(RES, BIT)(RES ^= (1 << BIT)) // Inverter estado do BIT
#define pino2_sensor PE4
volatile byte sensor1=LOW; //HIGH;
volatile byte valor = LOW ; //HIGH;
volatile byte Cv1= HIGH ; //HIGH;
volatile byte Cv2= HIGH ; // HIGH;
volatile byte estado_anterior_sensor= LOW ; //HIGH;
volatile byte conta1 = LOW;
volatile byte conta2=LOW;
// variaveis etapas
int E0; int E1; int E2; int E3; int E4; int E5; int E6; int E7;
int E8; int E9; int E10; int E11; int E12;
// variaveis de transisao
int M0; int M2; int M3; int M4; int M5;
int M6; int M7; int M8; int M9; int M10; int M11; int M12;
// fariaveis de transicao ou esclusivo
int MT2;
int MT3;
int MT4=0;
int MT5=0;
int MT6;
int MT7;
int MT10;
int MT11;
//entradas
const byte BTN_LIGAR = PA0; // Botao LIGAR PINO 22 PA0
const byte BTN_DESLIGAR = PA1; // BotaO DESLIGAR PINO 23 PA1
const byte BTN_POS1 = PA2; //BOTao posicao 1 DO CARRINHO PINO 24 PA2
const byte BTN_POS2 = PA3; //Boato posicao 2 DO CARRINHO PINO 25 PA3
const byte BTN_FABRICAR = PA4; //Botao FABRICAR PINO 26 PA4
const byte BTN_PROGRAMAR = PA5; //Botao programar no pino 27 PA5
const byte BTN_CONT1 = PA6; //botao contador 1 da programacao PINO 28 PA6
const byte BTN_CONT2 = PA7; //botao contador 2 da programacao PINO 29 PA7
const byte BTN_MAIS = PC6; //botao crescende da programacao PINO 31 PC6
const byte BTN_MENOS = PC4; //botao decresente da programacao PINO 33 PC4
const byte BTN_OK = PC2; //botao finalizador da programacao dos contadores PINO 35 PC2
const byte SENSOR_POS1 = PL4; //SENSOR INDUTIVO CARRINHO POSIcao 1 PINO 45 PL4
const byte SENSOR_POS2 = PL2; //SENSOR INDUTIVO CARRINHO POSIcao 2 PINO 47 PL2
//saidas
const byte BOMBA_OLEO = PC7; // BOMBA DE OLEO , rele n1 PINO 30 PC7
const byte MOTOR1 = PC5; //MOTOR DE FABRICAcao DA TELA , rele n2 PINO 32 PC5
const byte CIL_CARRINHO = PC3; //SOLENOIDE CILINDRO PNEUMATICO DO CARRINHO ,rele n3 PINO 34 PC3
const byte CIL_GAN = PC1; //SOLENOIDE CILINDRO PNEUMATICO DA GANCHEIRA ,rele n4 PINO 38 PC1
//int CIL_DOBRADOR = 41; //SOLENOIDE CILINDRO PNEUMATICO DO DOBRADOR 1 E 2 ,rele n5 PINO 41
//int led1 = 42; // LED INDICADOR DE LIGADO pino 42
//variaveis do contador
unsigned int contador_s1 = 0; //VARIAVEL de preset do contador 1
unsigned int contador_s2 = 0; //VARIAVEL de preset do contador 2
unsigned int preset_s1 = 0; //variavel que amarsena valor lido dos sensores para contagem do contador 1
unsigned int preset_s2 = 0; //variavel que amarsena valor lido dos sensores para contagem do contador 2
//variaveis de controle
int desliga = 0; //desliga o processo quando BTN_DESLIGAR for apertado
int ETAPA = 0; //variavel que mostra em qual etapa esta o processo etapas
int estado = 0; // variavel de controle acionada pelo BTN_LIGAR
int programar = 0; // variavel acionada quando BTN_PROMGRAMAR e apertado e abilita a mudanca do valor de contado s1 e S2
int cont1 = 0; // seleciona o contador_s1 para incrementar ou decrementar o valor da variavel
int cont2 = 0; // seleciona o contador_s2 para incrementar ou decrementar o valor da variavel
void setup()
{
sensor1= HIGH;
lcd.begin (20, 4); //Inicializa o display LCD 20x4 I2C
//entradas
DDRE &= ~pino2_sensor; // Configura o pino 2 sensor eixo faca INPUT
DDRA &= ~BTN_LIGAR;
DDRA &= ~BTN_DESLIGAR;
DDRA &= ~BTN_POS1;
DDRA &= ~BTN_POS2;
DDRA &= ~BTN_FABRICAR;
DDRA &= ~BTN_PROGRAMAR;
DDRA &= ~BTN_CONT1;
DDRA &= ~BTN_CONT2;
DDRC &= ~BTN_MAIS;
DDRC &= ~BTN_MENOS;
DDRC &= ~BTN_OK;
DDRL &= ~SENSOR_POS1;
DDRL &= ~SENSOR_POS2;
//SAIDAS
// o como OUTPUT (1)
DDRC |= BOMBA_OLEO; // o pino 30 como OUTPUT PC7
DDRC |= MOTOR1; // o pino 32 como OUTPUT PC5
DDRC |= CIL_CARRINHO; // o pino 34como OUTPUT PC3
DDRC |= CIL_GAN; // o pino 38 como OUTPUT PC1
// colocar os pinos de saida em 5v rele logica HIGH
set_bit(PORTC,BOMBA_OLEO); // rele n1
set_bit(PORTC,MOTOR1); //rele n2
set_bit(PORTC,CIL_CARRINHO); // rele n3
set_bit(PORTC,CIL_GAN); // rele n4
// digitalWrite(CIL_DOBRADOR, HIGH); // rele n5
//estado inicial das variaveis
contador_s1 = 17; contador_s2 = 18; preset_s1 = 0; preset_s2 = 0;
desliga = 0; ETAPA = 0; estado = 0;
programar = 0; cont1 = 0; cont2 = 0;
// DECLARACAO DOS ESTADOS INICIAIS DAS ETAPAS
E0 = 1; // ETAPA INICIAL ATIVANA DA INICIALIZACAO
E1 = 0; E2 = 0; E3 = 0; E4 = 0; E5 = 0; E6 = 0; E7 = 0;
E8 = 0; E9 = 0; E10 = 0; E11 = 0; E12 = 0;
M0 = 0; M2 = 0; M3 = 0; M4 = 0; M5 = 0;
M6 = 0; M7 = 0; M8 = 0; M9 = 0; M10 = 0;
M11 = 0; M12 = 0;
MT2 = 0; MT3 = 0; MT6 = 0; MT7 = 0;
MT10 = 0; MT11 = 0; MT4=0; MT5=0;
}
void loop() {
//informacoes iniciais do lcd
//lcd.setBacklight(HIGH);
lcd.setCursor(0, 0);
lcd.print("maquina=");
lcd. setCursor(0, 1);
lcd.print("valor: atual:");
lcd.setCursor(0, 2);
lcd.print("cont1:"); // contador 1
lcd.setCursor(6, 2);
lcd.print(contador_s1); // mostra o valor de pre-selecao do contador 1
lcd.setCursor(10, 2);
lcd.print(preset_s1); //mostra o valor da variavel preset_s1
lcd.setCursor(15, 2);
lcd.print("ETAPA"); //mostra a palavra em etapa no lcd
lcd.setCursor(0, 3);
lcd.print("cont2:"); //contador 2
lcd.setCursor(6, 3);
lcd.print(contador_s2); //mostra o valor de pre-selecao do contador 2
lcd.setCursor(10, 3);
lcd.print(preset_s2); //mostra o valor da variavel preset_2
lcd.setCursor(15, 3);
lcd.print(ETAPA); //mostra em qual etapa esta o programa
if (estado == 1) { // se a variavel estado for 1 mostra a palavra ligado no lcd
// lcd.clear();
lcd.setCursor(9, 0);
delay(150);
lcd.print("lidado---");
}
else { //se nao mostra desligado
lcd.setCursor(9, 0);
lcd.print("desligado");
}
// condicoes das etapas e transicoes
E0 = ((E0 | (E7 & M7) | (E11 & M11) ) & (~E1)); // E0 vai no inicio da ilicializacao e etapa 7 e transicao M7 ou E11 e M11 for concluida e E1 for =0
E1 = ((E1 | (E0 & M0 )) & (~E2 ) &(~E3) ); // E1 e = 1 quando a etapa E0 e transicao M0 for igual a 1 e E2 e E3 = 0
E2 = ((E2 | (E1 & MT2)) & (~E4)); // E2 e =1 quando a etapa E1 e transicao MT2 for igual a 1 e E4 = 0
E3 = ((E3 | (E1 & MT3 )) & (~E5)); // E3 e =1 quando a etapa E1 e transicao MT3 for igual a 1 e E5 = 0
E4 = ((E4 | (E2 & M2 ) | ( E9 & MT4 )) & (~E6 ) & (~E7)); // E4 e =1 quando a etapa E2 e transicao M2 ou E9 e transicao MT4 igual a 1 e E6 e E7 = 0
E5 = ((E5 | (E3 & M3 ) | (E9 & MT5 )) & (~E10) & (~E11)); // E5 e =1 quando a etapa E3 e transicao M3 ou E9 e transcao MT5 igual a 1 e E10 e E11 = 0
E6 = ((E6 | (E4 & MT6)) & (~E8)); // E6 e =1 quando a etapa E4 e transicao MT6 for igual a 1 e E8 = 0
E7 = ((E7 | (E4 & MT7)) & (~E0)); // E7 e =1 quando a etapa E4 e transicao MT7 for igual a 1 e E0 = 0
E8 = ((E8 | (E6 & M6 )) & (~E9)); // E8 e =1 quando a etapa E6 e transicao M6 for igual a 1 e E9 = 0
E9 = ((E9 | ( (E8 & M8) | (E12 & M12) ) ) & (~E4) & (~E5) ); // E9 e =1 quando a etapa E8 e transicao M8 ou E12 e transicao M12 igual a 1 e E4 e E5 = 0
E10 = ((E10 | (E5 & MT10 )) & (~E12) ); // E10 e =1 quando a etapa E5 e transicao MT10 for igual a 1 e E12 = 0
E11 = ((E11 | (E5 & MT11)) & (~E0)); // E11 e =1 quando a etapa E5 e transicao MT11 for igual a 1 e E0 = 0
E12 = ((E12 | (E10 & M10 )) & (~E9)); // E12 e =1 quando a etapa E10 e transicao M10 for igual a 1 e E9 = 0
//condicoes iniciais
// if ( estado == 1) { // quando a variavel estado for 1 liga o led1
// digitalWrite(led1, HIGH);
if (tst_bit(PINA,BTN_DESLIGAR)== 1) { // quando o BTN_DESLIGAR for acionado a fariavel desliga asume o valor 1
desliga = 1;
}
if (desliga == 1) { //quando a variavel edesliga e 1
set_bit(PORTC,MOTOR1); // desliga o motor1 no rele n1, obs rele desliga desliga com HIGH
set_bit(PORTC, BOMBA_OLEO); //desliga bonba na saida n1 do rele
//digitalWrite(led1, LOW); desliga o led1
conta1=LOW;
conta2=LOW;
Cv1=HIGH;
Cv2=HIGH;
estado = 0; //variavel estado = 0
lcd.clear(); //lipa o lcd
desliga = 0; //coloca a variavel desliga =0 como no inicio
E0 = 1; // COLOCA TUDO COMO NA INICIALIZAcao DO PROCESSO MESNOS OS CONTADORES E ABILITA APENAS E0 PARA NICIALIZAR O PROCESSO
E1 = 0; E2 = 0; E3 = 0; E4 = 0; E5 = 0; E6 = 0; E7 = 0;
E8 = 0; E9 = 0; E10 = 0; E11 = 0; E12 = 0;
M0 = 0; M2 = 0; M3 = 0; M4 = 0; M5 = 0;
M6 = 0; M7 = 0; M8 = 0; M9 = 0; M10 = 0;
M11 = 0; M12 = 0;
MT2 = 0; MT3 = 0; MT6 = 0; MT7 = 0;
MT10 = 0; MT11 = 0; MT4=0; MT5=0;
}
if (tst_bit(PINA,BTN_PROGRAMAR) ==1 and ( E1== 1 or E6== 1 or E10==1) ) {
programar = 1;
}
if (tst_bit(PINA,BTN_CONT1) == 1 and programar == 1 ) { //se o BTN_CONT1 for presionado e a variavel programar =1 e atribui 1 a variavel cont1
cont1 = 1;
}
if (tst_bit(PINA,BTN_CONT2) == 1 and programar == 1) { //se o BTN_CONT2 for presionado e a variavel programar =1 e atribui 1 a variavel cont1
cont2 = 1;
}
if (programar == 1 and cont1 == 1 and cont2== 0 and tst_bit(PINC,BTN_MAIS) == 1 ) { // se programar = 1 e cont1=1 e presionado o BTN_MAIS
contador_s1++; //acresenta uma unidade na variavel contador_s1
}
if (programar == 1 and cont1 == 1 and cont2==0 and tst_bit(PINC,BTN_MENOS) == 1 ) { // se programar = 1 e cont1=1 e presionado o BTN_MENOS
contador_s1--; //decrementa uma inidade na variavel contador_s1
}
if ( programar == 1 and cont2 == 1 and cont1==0 and tst_bit(PINC,BTN_MAIS) == 1 ) { //mesmo processo anterior acresenta uma unidade no contador_s2
contador_s2++;
}
if ( programar == 1 and cont2 == 1 and cont1==0 and tst_bit(PINC,BTN_MENOS) == 1 ) { //decremeta uma unidade no contador_s2
contador_s2--;
}
if ( (tst_bit(PINC, BTN_OK) == 1) && programar == 1) { //finaliza a programacao dos contadores e coloca as variaveis em estado inicial
programar = 0;
cont1 = 0;
cont2 = 0;
}
if (E0 == 1 ) { ETAPA = 0; } //atribui a variavel ETAPA os valores corespondente a medida que as etapas
if (E1 == 1 ) { ETAPA = 1; } // e transcicao sao ultrapasadas no decorer do proceso
if (E2 == 1 ) { ETAPA = 2; }
if (E3 == 1 ) { ETAPA = 3; }
if (E4 == 1 ) { ETAPA = 4; }
if (E5 == 1 ) { ETAPA = 5; }
if (E6 == 1 ) { ETAPA = 6; }
if (E7 == 1 ) { ETAPA = 7; }
if (E8 == 1 ) { ETAPA = 8; }
if (E9 == 1 ) { ETAPA = 9; }
if (E10 == 1 ) { ETAPA = 10; }
if (E11 == 1 ) { ETAPA = 11; }
if (E12 == 1 ) { ETAPA = 12; }
switch (ETAPA) { //conforme o valor da variavel etapa uma acao determinada e realizada , e apenas uma etapa por fez pode ser acionada
case 0 : // se etapa= 0 ,M0=1
if (tst_bit(PINA ,BTN_LIGAR) == 1 and desliga == 0) { //se presionado o BTN_LIGAR
desliga = 0; //atribui 0 a variavel desliga
estado = 1; // atribui 1 a variavel estado mudando no lcd de desligado ára ligado acendendo o led1
M0 = 1; //atrinui 1 a M0 pulando a transicao e ´passando E1=1
M7=0; //atrinui 0 a transicao de E7 e desativando esta etapa
M11=0; //atrinui 0 a transicao de E7 e desativando esta etapa
// lcd.clear();
}
else {
M0 = 0; //se nao manten a transicao M0=0 aguardando ate que o botao BTN_LIGAR seja acionado
}
break;
case 1 :
clr_bit(PORTC, BOMBA_OLEO); // liga a bomba de oleo no rele em n1
if (tst_bit(PINA ,BTN_POS1) == 1) { //se BTN_POS1 e acionado
M0 = 0; //desabilita etapa anterio E0
MT3 = 0; //mantem transicao para etapa 3 desabilitada
MT2 = 1; //abilita transicao etapa 2
}
else if (tst_bit(PINA ,BTN_POS2) == 1) { //se BTN_POS2 e acionado
M0 = 0; //desabilita etapa anterio E0
MT2 = 0; //mantem transicao para etapa 2 desbilitada
MT3 = 1; // abilita transicao etapa 3
}
break;
case 2 :
if (tst_bit(PINC ,CIL_GAN) == 1){
clr_bit(PORTC, CIL_CARRINHO); // Liga solenoide CIL_CARRINHO NO RELE SAIDA n3
preset_s1 = 0; //sera o valor preset_s1
preset_s2 = 0; // sera o valor preset_s2
if (tst_bit(PINL ,SENSOR_POS1) == 1 and tst_bit(PINA, BTN_FABRICAR) == 1) { //se o sensor indutivo posicao 1 estiver ligado e BTN_PROGRAMAR for acionado
MT2 = 0; //desabilita etapa anterior E1
M2 = 1; //abilita trassicao etapa 4
}
} else {MT2 = 0;
M0= 1;
}
break;
case 3 :
if (tst_bit(PINC, CIL_GAN) == 0){
set_bit(PORTC, CIL_CARRINHO); // desliga solenoide CIL_CARRINHO NO RELE SAIDA n3
preset_s1 = 0; //sera o valor preset_s1
preset_s2 = 0; //sera o valor preset_s2
if (tst_bit(PINL,SENSOR_POS2) == 1 and tst_bit(PINA, BTN_FABRICAR) == 1) { //se o sensor indutivo posicao 2 estiver ligado e BTN_PROGRAMAR for acionado
MT3 = 0; //desabilita etapa anterior E1
M3 = 1; //abilita transicao etapa 5
}
} else { MT3 = 0;
M0= 1;
}
break;
case 4 :
conta1= HIGH;
if (tst_bit(PINC,BOMBA_OLEO) == 0) { // se BOMBA_OLEO ligad a n1 no rele
clr_bit(PORTC,MOTOR1); // liga MOTOR1 na saida n2 do rele
attachInterrupt(digitalPinToInterrupt(pino2_sensor),contador,HIGH);
}
if (Cv1==LOW){
set_bit(PORTC, MOTOR1); // desliga MOTOR1 na saida n2 do rele
detachInterrupt(pino2_sensor);
delay(100);
M2 = 0; //desabilita etapa anterior E2
MT4=0; //mantem transicao MT4 desabilitada e desabilita E9
MT7 = 0; //mantem trasicao MT7 desabilitada e desabilitanto E7
MT6 = 1; //abilita transicao Etapa 6
}
else if (tst_bit( PINA ,BTN_DESLIGAR) == 1) { // então se presionado BTN_DESLIGAR
detachInterrupt(pino2_sensor);
set_bit(PORTC, MOTOR1); // desliga MOTOR1 na saida n2 do rele
M2 = 0; //desabilita etapa anterior E4
MT4=0; //mantem transicao MT4 desabilitada e desabilita E9
MT6 = 0; //mantem trasiÃcao MT6 desabilitada e desabilitanto E6
MT7 = 1; //abilita transicao Etapa 6
}
break;
case 5 :
conta2= HIGH;
if (tst_bit(PINC,BOMBA_OLEO) == 0) { // ferifia se abomba de oleo esta ligada na saida n1 do rele
clr_bit(PORTC,MOTOR1); // liga MOTOR1 rele n2 LOW e ligado e HIGH desligado
attachInterrupt(digitalPinToInterrupt(pino2_sensor),contador,HIGH);
}
if (Cv2== LOW){
set_bit(PORTC, MOTOR1); // desliga MOTOR1 na saida n2 do rele
delay(100);
M3 = 0; //desabilita etapa anterior E3
MT5=0; //mantem transicao MT5 desabilitada e desabilita E9
MT11 = 0; //mantem trasicao M11 desabilitada e desabilitanto E11
MT10 = 1; //abilita transicao o Etapa 10
}
else if (tst_bit( PINA ,BTN_DESLIGAR) == 1) { // então se presionado BTN_DESLIGAR
set_bit(PORTC, MOTOR1); // desliga MOTOR1 na saida n2 do rele
detachInterrupt(pino2_sensor);
M3 = 0; //desabilita etapa anterior E3
MT5=0; //mantem transicao MT5 desabilitada e desabilita E9
MT10 = 0; //mantem trasicao M10 desabilitada e desabilitanto E10
MT11 = 1; //abilita transicao Etapa 11
}
break;
case 6 :
clr_bit(PORTC ,CIL_GAN); // liga o solenoide do clindro da gancheira saida n4 do rele
if (tst_bit(PINA, BTN_FABRICAR) == 1) { //se BTN_FABRICAR for presionado
// desliga = 0;
conta1=LOW;
Cv1= HIGH;
Cv2=HIGH;
MT6 = 0; //desabilita etapa anterior E4
M6 = 1; //abilita transicao ETAPA 8
lcd.clear(); //lipa o lcd
}
break;
case 7 :
set_bit(PORTC, MOTOR1) // desliga MOTOR1 na saida n2 do rele
set_bit(PORTC, BOMBA_OLEO); //desliga bonba na saida n1 do rele
MT7 = 0; //desabilita etapa anterior E4
M7=1; //abilita transcicao ETAPA E0
desliga = 1; //muda o valor da fariavel desliga para 1 e aciona a rotina de desligamento
lcd.clear(); // limpa o lcd
break;
case 8 :
preset_s1 = 0; //zera o valor dos contadores
preset_s2 = 0;
// digitalWrite(CIL_DOBRADOR, LOW); // liga solenoide dos cilindros dos dobradores na saida n5 do rele
set_bit(PORTC, CIL_CARRINHO); // desliga solenoide do cilindro do carrinho na saida n3 do rele
if (tst_bit(PINL,SENSOR_POS2) == 1) { //se sensor indutivo SENSOR_POS2 acionado
M6 = 0; //desabilita etapa anterior E6
M8 = 1; //abilita transcicao ETAPA 9
}
break;
case 9 :
if (M8 == 1){ //se variavel de transicao M8 = 1
MT5 = 1; //abilita transicao etapa 5
MT4 = 0; //mante desabilitado transicao etapa 4
M8 = 0; //desabilita etapa anterior E8
lcd.clear(); //limpa lcd
}
else if (M12 == 1) { //se a variavel de transicao M12 ==1
MT5 = 0; //mantem desabilitado trasnsicao etapa 5
MT4 = 1; //abilita transição etapa 4
M12 = 0; //desabilita etapa anterior E12
lcd.clear(); //limpa lcd
}
break;
case 10 :
conta2=LOW;
set_bit( PORTC ,CIL_GAN); // desliga solenoide cil gancheira na saida n4 do rele
if (tst_bit(PINA, BTN_FABRICAR) == 1) { // se BTN_FABRICAR for presionado
desliga = 0; //atribui 0 variavel desliga
Cv1= HIGH;
Cv2=HIGH;
MT10 = 0; // desabilita etapa anterior E5
M10 = 1; //abilita transicao etapa12
lcd.clear(); //lipa o lcd
}
break;
case 11 :
set_bit(PORTC, MOTOR1); // desliga o motor1 na saida n2 do rele
set_bit(PORTC,BOMBA_OLEO); // desliga o bomba na saidae n1 do rele
MT11 = 0; //desabilida etapa anterior E5
M11=1; //abilita transicao etapa E0
desliga = 1; //atribui 1 a variavel desliga chamando a rotina de desligamento
lcd.clear(); //limpa o lcd
break;
case 12 :
preset_s1 = 0; //zera os contadores
preset_s2 = 0;
// digitalWrite(CIL_DOBRADOR, LOW); // liga o solenoide cilindros dobradores na saida n5 do rele
clr_bit(PORTC, CIL_CARRINHO); // liga o solenoide do cilindro do carrinho na saida n3 do rele
if (tst_bit(PINL ,SENSOR_POS1) == 1) { // se o sensor indutivo SENSOR_POS1 for ativado
M10 = 0; //desabilita etapa anterior E10
M12 = 1; //abilita transicao etapa E9
}
break;
default:
E0 = HIGH;
}
}
void contador (){
valor= tst_bit(PINE ,pino2_sensor);
if (valor !=estado_anterior_sensor) {
if (valor==HIGH and conta1 == HIGH) {
preset_s1++;
// delayMicroseconds(50);
} else if (valor==HIGH and conta2== HIGH){
preset_s2++;
// delayMicroseconds(50);
}
estado_anterior_sensor = valor;
}
if (preset_s1 == contador_s1 ){
//digitalWrite(MOTOR1, HIGH); // desliga MOTOR1 na saida n2 do rele
Cv1=LOW;
}
if (preset_s2 == contador_s2 ){ // digitalWrite(MOTOR1, HIGH);
Cv2=LOW;
}
}
//state = !state;
//}