Pessoal estou tentando escrever um programa p/ o arduino e estou esbarrando na função if elese.
coloquei uma imagem em anexo.
outra dúvida é a seguinte:
preciso monitorar 2 botoes ao mesmo tempo e caso um botão desse seja acionado ele deve colocar algumas portas em nível alto por um certo tempo, caso o segundo botão seja acionado ele vai colocar as portas que estão em nível alto em nível baixo (seria um botão de anula)
algum sabe onde consigo exemplos p/ eu desenvolver essas aplicação?

no meu pouco intendimento essas funções de monitorar os botões deve estar dentro da função void loop()

mas não sei como criar saltos como fazia em basic coma função goto (rotulo)

 

se fosse em basic eu faria um monitoramento dos botoes com a função if /goto ( condição 1) e if (condição 2)

mas não ví ainda na documentação de exemplos que vem na ide do arduino exemplos coma  função goto.

abraços

sanches

 

Exibições: 14089

Anexos

Respostas a este tópico

po pelo que vi na imagem está parecendo que está faltando de fechar o loop com as chaves... Não sei se é esse mesmo o erro mas pela imagem não estou vendo nada de errado. Só a parte das chaves que você abriu e fechou no if e no else mas no loop não fechou

 

Espero que seja isso =s

Voce não esta fechando a chave { do else.

 

Repare que seu programa esta assim:

 

void loop() {

 

if () {

 

}

 

else {

 

}

}   <-----Fata essa chave

Nesse momento falta uma chave para fechar a função void loop()

caros amigos, não saiu na imagem mas a } está presente

vejam como está

--------------------------------------------

void loop(){
  iniState = digitalRead(iniPin); // Leitura do botão inicio

if(iniState == HIGH); { // Se o estado do botão for alto(estiver pressionado)

digitalWrite(resPin, HIGH); // liga res
digitalWrite(valPin,HIGH);//  liga val
digitalWrite(aquPin, HIGH); // liga led aqu

}

else { // Senão
digitalWrite(resPin, LOW); // Apaga o LED:

}
}

---------------------------------mensagem de erro---------------------------------

In function 'void loop()':
error: 'else' without a previous 'if

me parece que ele diz que não vê (localiza a função if ) mas ela está presente no void loop

o problema é o ponto e virgula depois do if que o encerra sem fazer nada , o resto entre as chaves é sempre executado e o else é obvio dá erro de compilação ! tente identar melhor seu codigo para não cometer estes erros simples.       aqui   

                               |

if(iniState == HIGH) ; { // Se o estado do botão for alto(estiver pressionado)

if(iniState == HIGH); { // Se o estado do botão for alto(estiver pressionado)

Retire o ponto-e-virgula que está em negrito.

Ponto-e-virgula é apenas para informar que a linha termina ali. Mas nesse caso, vc está informando com a chave, por estar usando IF.

Abraços!

Valeu Felpe, era isso.

E sobre o equivalente a função goto?

vc tem alguma dica de onde eu possa me interar de como usar?

preciso monitorar 2 botoes ao mesmo tempo e caso um botão desse seja acionado ele deve colocar algumas portas em nível alto por um certo tempo, caso o segundo botão seja acionado ele vai colocar as portas que estão em nível alto em nível baixo (seria um botão de anula)
algum sabe onde consigo exemplos p/ eu desenvolver essas aplicação?

no meu pouco intendimento essas funções de monitorar os botões deve estar dentro da função void loop()

mas não sei como criar saltos como fazia em basic coma função goto (rotulo)

 

se fosse em basic eu faria um monitoramento dos botoes com a função if /goto ( condição 1) e if (condição 2)

mas não ví ainda na documentação de exemplos que vem na ide do arduino exemplos coma  função goto.

 

Olá Ormuz,

Existe um ";" logo depois do "if (initState == HIGH)", antes da chave "{" de abertura do if. Retire-o.

Com relação ao "goto" que você quer, recomendo não utilizá-lo, mas sim criar funções e chamá-las no momento devido. Dê uma olhada nesse endereço: http://www.arduino.cc/en/Reference/FunctionDeclaration

 

Abraços.

Caros amigo, fiz um teste com uma parte do programa, simulando no proteus e não deu nada.

o circuito basico do arduino no proteus funciona normalmente com outros programas, mas com esse parcial que escreví não deu nada.

o que eu esperava: que qdo eu mudasse o estado logico da INI de low p/ high que as portas 13 e  12 ficassem em nivel alto, mas não aconteceu.

segue abaixo o programa parcial.

---------------------------------------------------------------------------------------------------------------------------------------------------------------

const int resPin = 13; // define que o pino 13 é o driver
const int valPin = 12; // define que o pino 12 é o driver
const int estePin = 11; // define que o pino 11 é o led
const int fimPin = 10; // define que o pino 10 é o led
const int iniPin = 9; // define que o pino 9 é o botão de inicio
const int aquPin = 6; // define que o pino 6 é o led
const int anulaPin = 8; // define que o pino 8 é o botão de anula
const int sensorPin = 7;// define que pino 7 é o sensor (não implementado ainda)
//------------------------------------------------------- definição de estado inicial dos botoes---------------------------------------------
int iniState = 0;
int anulaState = 0;

void setup() {
  pinMode (resPin, OUTPUT);
  pinMode (valPin, OUTPUT);
  pinMode (estePin, OUTPUT);
  pinMode (fimPin, OUTPUT);
  pinMode (aquPin, OUTPUT);
  pinMode (iniPin, INPUT);
  pinMode (anulaPin, INPUT);
  pinMode (sensorPin, INPUT);
}
void loop(){
  blocoliga:
  iniState = digitalRead(iniPin); // Leitura do botão inicio

if(iniState == HIGH){ //goto inicio; { // Se o estado do botão for alto(estiver pressionado)
//inicio:
digitalWrite(resPin, HIGH); // liga res
digitalWrite(aquPin, HIGH); // liga led aqu
delay (600000);
digitalWrite(valPin,HIGH);//  liga val
}

}

------------------------------------------------------------------fim---------------------------------------------------------------------------------------

Ormuz,

dê uma olhada nos resistores de pull-up do Arduino:

http://www.arduino.cc/en/Tutorial/DigitalPins

Mais uma vez: não aconselho a utilizar goto. Crie if/else if/else ou mesmo funções para ligar e desligar os LEDs e deixe apenas a lógica dentro da função loop().

Caro Alvaro valeu, está rodando, quanto ao goto não utilizei se vc observar coloquei //  antes dele, deixei como referencia, mas ainda não sei ao certo o caminha a seguir, estou apanhando nas estruturas do programa

pelo que ví ficam todas as declarações dentro da função void loop()

mas vou fazer umas experimentações e vê no que dá, te mandei um e-mail sobre o curso presencial em bh ou sp.

segue a imagem do parcial do programa rodando

 

Anexos

Sanches,

 

Não é necessário usar goto.

 

faca assim:

while (1)

{

   if(condição1)

   {

      //executa o codigo da condição 1

      codigo1;

      codigo1;

   }

   else if (condição2)

   {

      //executa o codigo de for condição 2 e não for condição1

      codigo2;

      codigo2

   }

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço