Conflito entre macro e LiquidCrystal_I2C lcd

Ola não consigo compilar o programa que esta dando erro

expression cannot be used as a function linha 12. Mas se retiro a linha do LiquidCrystal_I2C ele aceita a macro, acho que a variável do LCD 0x27 entra em conflito com a variável da macro das portas PORTX e DDRX e PINX da macro. Segue código abaixo, como posso consertar isso?

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
//Inicializa o display no endereco 0x27

#include <avr/io.h>
#include <util/delay.h>

#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)
o compilador para na linha #define set_bit(Y,bit_x) (YI=(1<<bit_x))

Ola @getulio ,

compilei este fragmento de programa que você
postou e não deu nenhum erro.

Dê mais detalhes sobre seu sketch e sobre o erro.

Leia "How to get the best out of this forum"

RV mineirin

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;
//}

The semicolon " ; " is missig in this line.
O ponto e virgula " ; " está faltando nesta linha.

RV mineirin

Bom dia Ruiviana!
Sempre li nos comentários que em programação o diabo mora nos destales; que bom que o erro era apenas uma um ponto e virgula, inexperiência minha, muito obrigado, e se você tiver uma dica sobre o meu skatch ou livro que eu possa ler para otimizar o programa eu ficaria muito agradecido, com estas mudanças você acha que vou conseguir mais rapidez na leitura e acionamento das saidas?
Bom muito obrigado.

Olá @getulio,
qual ucontrolador você está usando? Arduino Mega?

Você criou macros desnecessariamente já que existem funções que fazem isto.
Ex:

procure por bitset() e bitclear() em https://www.arduino.cc/reference/pt/language/functions/

Isto é desnecessário : você pode usar and , or , not ,

Não entendi bem o motivo desta sua frase "

Que tipo de problema de velocidade você estava tendo?

Não entendi bem o que seu programa faz, então faça um descritivo do que ele deverá fazer.

RV mineirin

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.