Ir ao conteúdo

Posts recomendados

Postado

Boa noite pessoal, venho trabalhando em um programa e me deparei com um aviso do CCS antes da compilação, como sou novo na programação em C mais voltada ao Microcontrolador PIC gostaria que se possível alguém me de uma luz.

 

Segue abaixo parte do programa (ainda não esta completo e falta muito ajustes mas gostaria de sanar esses erros).

 

while (true){
if(input(Botao_pin_a7)==1){
tela++;
if(tela>5){//por enquanto maior que 5
tela=1;
}
delay_ms(350);
}
if(tela=1){
printf(lcd_putc,"\fBEM VINDO!");
printf(lcd_putc,"\nCONTROLE GERAL");
delay_ms(1000);
}
if(tela=2){
printf(lcd_putc,"SENSOR 1");
printf(lcd_putc, "TEMP1:%f ""UMID1:%f",temp1,umid1);
}
if(tela=3){
printf(lcd_putc,"SENSOR 2");
printf(lcd_putc, "TEMP2:%f""UMID2:%f",temp2,umid2);
}
if(tela=4){
printf(lcd_putc,"SENSOR 3");
printf(lcd_putc, "TEMP3:%f""UMID3:%f",temp3,umid3);
}
if(tela=5){
printf(lcd_putc,"SENSOR 4");
printf(lcd_putc, "TEMP4:%f""UMID4:%f",temp4,umid4);
}

 

no momento em que tento compilar aparece esse erro:

assignment inside relational expression

 

E ele se refere a minha linha --- if(tela=5), if(tela=4), if(tela=3), if(tela=2)

 

Se alguém ja passou por essa por favor me indique um caminho

 

Desde já agradeço a todos...

 

Att. Fernando 

Postado

Olá amigo.

Pelo trecho de código que você postou só posso considerar duas hipóteses para este erro:

 

1ª: Você não declarou a variável tela

2ª: Quando se está comparando, deve ser feito if (tela == 5) e não do jeito que está fazendo, que fica como se fosse uma atribução.

 

Abraço

Postado

@Rafael Del Pino

int Botao_pin_a7;
int tela=1;
  float temp1, temp2, temp3, temp4;
  float umid1, umid2, umid3, umid4;
  //temperatura recebe dados de dht11 (temp1, temp2, temp3, temp4)
  //umidade recebe dados de dht11 (umid1, umid2, umid3, umid4)
void main()
{
   lcd_init();

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
while (true){
if(input(Botao_pin_a7)==1){
tela++;
if(tela>5){//por enquanto maior que 5
tela=1;
}
delay_ms(350);
}
if(tela==1){
printf(lcd_putc,"\fBEM VINDO!");
printf(lcd_putc,"\nCONTROLE GERAL");
delay_ms(1000);
}
if(tela==2){
printf(lcd_putc,"SENSOR 1");
printf(lcd_putc, "TEMP1:%f ""UMID1:%f",temp1,umid1);
}
if(tela==3){
printf(lcd_putc,"SENSOR 2");
printf(lcd_putc, "TEMP2:%f""UMID2:%f",temp2,umid2);
}
if(tela==4){
printf(lcd_putc,"SENSOR 3");
printf(lcd_putc, "TEMP3:%f""UMID3:%f",temp3,umid3);
}
if(tela==5){
printf(lcd_putc,"SENSOR 4");
printf(lcd_putc, "TEMP4:%f""UMID4:%f",temp4,umid4);
}


Obrigado pela resposta amigo Rafael, será que meu erro esta no que coloquei em vermelho?

no programa coloquei somente isso -int tela =1 - ja procurei no fórum da própria CCS e eles deram uma resposta semelhante a sua porém se coloco uma igualdade '==' a minha simulação não funciona, o display não sai da tela 1.

 

Obrigado mais uma vez e fico no aguardo se puder me dar mais uma dica valiosa.

 

Abraço

  • Membro VIP
Postado

oi. pode ser o circuito. Publique-o. Tipo assim...

if(input(Botao_pin_a7)==1)...

considera que você está ligando o botão no vcc com pulldown.

 

Algo a+.. um bom momento pra você utilizar e aprender algo sobre o swtch-case-break
 

switch (tela) {

case 1:
printf(lcd_putc,"\fBEM VINDO!");
printf(lcd_putc,"\nCONTROLE GERAL");
delay_ms(1000);
break;

case 2:
printf(lcd_putc,"SENSOR 1");
printf(lcd_putc, "TEMP1:%f ""UMID1:%f",temp1,umid1);
break;

case 3:
printf(lcd_putc,"SENSOR 2");
printf(lcd_putc, "TEMP2:%f""UMID2:%f",temp2,umid2);
break;

// etc...

}

E a lesma lerda, mas uma opção digamos.. mais .. perfumada.

Abç

  • Curtir 1
Postado

Se o programa compilou, realmente era aquele o problema.

Agora temos apenas um problema de programação, e não de sintaxe.

 

A parte que tu marcou em vermelho está correta. O que está estranho é isso...

 

If(input(Botao_pin_a7)==1)

 

Não lembro como é no CCS, pois uso o mplab. Maaaaas, pra funcionar, acho que o correto seria 

 

if ((input(pin_a7))==1)

     Função a ser executada;

 

ou se quiser usar a variável...

 

Botao_pin_a7 = input(pin_a7);

If (Botão_pin_a7 == 1)

         Função a ser executada

 

E da uma olhada, não sei como é essa biblioteca, tenho uma que eu mesmo fiz. Mas acredito que sempre que for escrever uma frase nova tu tenha que limpar o LCD. Ou usar uma função do tipo goto(x,y) pra colocar o cursor na linha e coluna 1 e sobrescrever o que estava escrito.

 

Masminhadica pra testar se os ifs estão funcionando é: ao invés de mandar escrever no LCD, manda colocar 1 em outros pinos pra ver se funciona. Mas olhando por cima, através do celular, no ônibus, é isso que posso ajudar. Abraço

Postado

Pessoal deu certo, muitíssimo obrigado por todas as dicas preciosas que me forneceram e espero que eu possa ajudar vocês um dia assim como me ajudaram com esse programa...forte abraço a todos 

 

Att

 

Fernando

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...