collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Ajuda com o Arduino  (Lida 4347 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Silvio Severino

  • Mini Robot
  • *
  • Mensagens: 76
Ajuda com o Arduino
« em: 28 de Fevereiro de 2013, 11:36 »
Ola pessoal estou a fazer um projecto e estou com um problema....

Queria meter a correr um programa no arduino para controlar um motor.
Mas ao mesmo tempo queria que estivesse a piscar um lede mas se carregarem no botão de emergência (estou a usar logica envertida no botão de emergência) ele devia ficar sempre ligado.
Já construí o programa. Mas não sei porque ele quando entra no programa "Buzz" não me corre o programa principal.

Código: [Seleccione]

//Entradas DIGITAIS
//
  int LED1= 10;
  int sensor_MAG_1= 40;
  int sensor_MAG_2= 41;
  int sensor_MAG_3= 42;
  //int sensor_Norte=50;
  //int sensor_sul=51;
  int HOOK_CIMA= 43;
  int HOOK_Baixo_= 44;
  int Direccao_BAIXO= 45;
  int Direccao_CIMA= 46;
  int Botao_ON= 30;
  int Botao_Reset= 31;
  int Botao_START= 32;
  int Y32= 7;

//Entradas Analogicas
//

      //Saidas Digitais
      //
            int BUZZ=13;
            int Luz_Vermelha=48;
            int Motor_HOOK_Cima=49;
            int Motor_HOOK_Baixo=50;
            int Motor_Direccao_Cima=51;
            int Motor_Direccao_Baixo=52;
           
       //Saidas Analogicas
      //
           int Motor_Esq=9;
           int Motor_Dr=8;

                    //Declaração de Variaveis
                         
                          int sistema_em_baixo;
                          int marcha_var;
                          int velocidade_1;
                          int velocidade_2;
                          int Lazer_Zona_1;
                          int Lazer_Zona_2;
                          int velocidade_esq_var;
                          int velocidade_dr_var;
                          int Baixar_Hook;
                          int Levantar_HooK;
                          int virar_Dr;
                          int virar_Esq;
                          int STOP;
                          int deslgar_Lazer;
                          int Y32_var=0;
                          int Botao_ON_var=0;
                          int Direccao_CIMA_var=0;
                          int Direccao_BAIXO_var=0;
                          int Botao_START_var=0;

             
void setup()
{
   //Declaração de Saidas Digitais
   //
            pinMode(LED1,OUTPUT);
            pinMode(BUZZ,OUTPUT);
            pinMode(Luz_Vermelha,OUTPUT);
            pinMode(Motor_HOOK_Cima,OUTPUT);
            pinMode(Motor_HOOK_Baixo,OUTPUT);
            pinMode(Motor_Direccao_Cima,OUTPUT); 
            pinMode(Motor_Direccao_Baixo,OUTPUT);
 
       //Declaração de Entradas Digitais
   //
          pinMode(Botao_ON,INPUT);
          pinMode(Botao_START,INPUT);
          pinMode(Botao_Reset,INPUT);
          pinMode(Y32,INPUT);
 
         
    //Declaração de Saidas Analogicas
   //
           pinMode(Motor_Esq,OUTPUT);
           pinMode(Motor_Dr,OUTPUT);
   
   //Declaração de Entradas Analogicas
   //
 

//Declaração do Valor das variaveis iniciais...
//
      velocidade_1=HIGH;
      sistema_em_baixo=LOW;


Serial.begin(9600);
Serial.println("Imeguisa Portugal");


}
//Inicio do Programa...
void loop()
{
 
        Serial.println("__________Imeguisa Portugal_________");
        Serial.println("Prima ON para Activar o Sistema de Direccao");
       
       
        Y32_var = digitalRead(Y32);
        Botao_ON_var = digitalRead(Botao_ON);
        Botao_START_var = digitalRead(Botao_START);
        Direccao_CIMA_var = digitalRead(Direccao_CIMA);
        Direccao_BAIXO_var = digitalRead(Direccao_BAIXO);
       
             
  if ( Botao_ON_var==HIGH && Direccao_CIMA_var== HIGH && Direccao_BAIXO_var==LOW && Y32_var==HIGH)
     {
       digitalWrite(Motor_HOOK_Baixo,HIGH);
       delay(Direccao_BAIXO=HIGH);
       digitalWrite(Motor_HOOK_Baixo,LOW);
       sistema_em_baixo=1;
       
       Serial.println("Sistema de Traccao Baixo");
     }
     
  if ( Botao_ON==HIGH && Direccao_CIMA== LOW && Direccao_BAIXO_var==HIGH && Y32==HIGH)
     {
       digitalWrite(Motor_HOOK_Cima,HIGH);
       delay(Direccao_CIMA=HIGH);
       digitalWrite(Motor_HOOK_Cima,LOW);
       sistema_em_baixo=0;
     
       Serial.println("Sistema de Traccao Cima");
     }
    if(sistema_em_baixo==HIGH && marcha_var==LOW)
      {
     
        Serial.println("Prima START Para Iniciar A Marcha");
      }
 
     
   if(Botao_START_var==HIGH && sistema_em_baixo==HIGH && Y32==HIGH)
     {
     marcha_var=HIGH;
     marcha();
     codigo_MAG();
     
     Serial.println("Inicio AGV Em Funcionamento");
     }

  if (Y32_var==LOW)
     {
      marcha_var=LOW;
     
      Serial.println("Botao De Emergencia Activado");
     }

 //Serial.println("Fim");
}
//Fim do Programa...

//Sub-Programa Marcha.....
//
void marcha()
     {
       velocidade();
     
    if (sensor_MAG_1==HIGH && sensor_MAG_2==LOW && sensor_MAG_2==LOW && marcha_var==HIGH)
        {
        analogWrite(Motor_Esq,velocidade_esq_var);
        analogWrite(Motor_Dr,50/velocidade_dr_var);
        }
   else if (sensor_MAG_1==LOW && sensor_MAG_2==HIGH && sensor_MAG_2==LOW && marcha_var==HIGH)
        {
        analogWrite(Motor_Esq,velocidade_esq_var);
        analogWrite(Motor_Dr,velocidade_dr_var);
        }
   else if (sensor_MAG_1==LOW && sensor_MAG_2==LOW && sensor_MAG_2==HIGH && marcha_var==HIGH)
        {
        analogWrite(Motor_Esq,50/velocidade_esq_var);
        analogWrite(Motor_Dr,velocidade_dr_var);
        }
   else
        {
        analogWrite(Motor_Esq,0);
        analogWrite(Motor_Dr,0);
        } 
    }
//Fim do Sub-Programa Marcha.....
 
//Sub-Programa velocidade.....
//
void velocidade()
     {
     
       if (velocidade_1==HIGH && Lazer_Zona_1==LOW)
          {
          velocidade_esq_var==250/2;
          velocidade_dr_var==250/2;
         
          Serial.println("Velocidade Minima");
         }
       
       if (velocidade_2==HIGH && Lazer_Zona_1==LOW);
          {
          velocidade_esq_var==250;
          velocidade_dr_var==250;
         
          Serial.println("Velocidade Maxima");
          }
       
       if (Lazer_Zona_1==HIGH);
          {
          velocidade_1==LOW;
          velocidade_2==LOW;
          velocidade_esq_var==250/5;
          velocidade_dr_var==250/5;
         
          Serial.println("Velocidade de seguranca");
          }
     
      }
     
//Fim do Sub-Programa velocidade..... 

//Sub-Programa Buzz...
//
void Buzz()
    {
     
      if(Y32_var == HIGH)
      {
        digitalWrite(BUZZ,HIGH);
        delay(500);
        digitalWrite(BUZZ,LOW);
        delay(500);
        }
     if(Y32_var == LOW)
        {
        digitalWrite(BUZZ,HIGH);
        } 
    }
//Fim do Sub-Programa Buzz..... 
 

//Sub-Programa Código Mag...
//
void codigo_MAG()
    {
     
    }
//Fim do Sub-Programa Código Mag...


Ou isto não é possível com o arduino?

Offline samc

  • Mini Robot
  • *
  • Mensagens: 442
Re: Ajuda com o Arduino
« Responder #1 em: 07 de Abril de 2013, 00:54 »
Analisei o código por alto, e não encontrei nenhuma chamada à função Buzz no loop

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.598
    • Tróniquices
Re: Ajuda com o Arduino
« Responder #2 em: 07 de Abril de 2013, 01:34 »
Numa passagem assim muito por alto tens aí várias coisas mal:

delay(Direccao_CIMA=HIGH);

velocidade_esq_var==250/2;
          velocidade_dr_var==250/2;

velocidade_esq_var==250;
          velocidade_dr_var==250;

velocidade_1==LOW;
          velocidade_2==LOW;
          velocidade_esq_var==250/5;
          velocidade_dr_var==250/5;

          velocidade_1==LOW;
          velocidade_2==LOW;
          velocidade_esq_var==250/5;
          velocidade_dr_var==250/5;


e outras do género. Precisas de estudar a linguagem C.

Offline samc

  • Mini Robot
  • *
  • Mensagens: 442
Re: Ajuda com o Arduino
« Responder #3 em: 09 de Abril de 2013, 19:12 »
e outras do género. Precisas de estudar a linguagem C.
Aconselho o mesmo, o teu código parece que foi "costurado" a partir de outros existentes e o problema disso, é que a pessoa acaba por não perceber o que está a fazer por vezes.
Existem muitos livros sobre C que podem ajudar-te a melhorar o domínio da linguagem, procura aqui no fórum ou no google. Tirares uma semana para estudares um livro em C vai ser de muita ajuda não só para o projeto mas para futuros projetos.