top of page

LINGUAGEM C ++

 

C++ (em português lê-se "cê mais mais", em inglês lê-se see plus plus) é uma linguagem de programação compilada multi-paradigma(seu suporte inclui linguagem imperativa,orientada a objetos e genérica) e de uso geral. A linguagem é considerada de médio nível, pois combina características de linguagens de alto e baixo níveis. Desde os anos 1990 é uma das linguagens comerciais mais populares, sendo bastante usada também na academia por seu grande desempenho e base de utilizadores.

 

Então temos: 

 

#define st_mtr_df 2       //define o sentido de rotação do motor dianteiro direito (HIGH-avança,LOW-recua)
#define st_mtr_ef 4       //define o sentido de rotação do motor dianteiro esquerdo (HIGH-avança,LOW-recua)
#define st_mtr_dt 10      //define o sentido de rotação do motor traseiro direito (HIGH-avança,LOW-recua)
#define st_mtr_et 12      //define o sentido de rotação do motor traseiro esquerdo (HIGH-avança,LOW-recua)
#define ss_ob_av 53       //Sensor de obstaculo para avanço
#define ss_ob_rc 52       //Sensor de obstaculo para recuo
#define std 50            //entrada pino STD do modulo decodificador de DTMF
#define bt0 42            //entrada pino Q1 do modulo decodificador de DTMF
#define bt1 44            //entrada pino Q2 do modulo decodificador de DTMF
#define bt2 46            //entrada pino Q3 do modulo decodificador de DTMF
#define bt3 48            //entrada pino Q4 do modulo decodificador de DTMF

int vc_mtr_df=3, vc_mtr_ef=5, vc_mtr_dt=11, vc_mtr_et=13;                                     //Variaveis responsaveis pela variação de velocidade dos mtrs 
int cfg0_av=0, cfg0_rc=0, cfg0_e=0, cfg0_d=0, cfg0_f=0, num_dtmf=0, v1=0, v2=0, ve=0, vd=0;   //Variaveis Globais

/*Declaração de funções*/
void Carro_avanca();
void Carro_recua(); 
void Carro_g_esquerda();
void Carro_g_direita();
void Carro_frena();

void setup() {
  /*entradas*/
  pinMode(std,INPUT);
  pinMode(bt0,INPUT);
  pinMode(bt1,INPUT);
  pinMode(bt2,INPUT);
  pinMode(bt3,INPUT);
  /*entradas com pullup*/
  pinMode(ss_ob_av,INPUT_PULLUP);
  pinMode(ss_ob_rc,INPUT_PULLUP);
  /*Saidas para mtrs*/
  pinMode(st_mtr_df,OUTPUT);
  pinMode(st_mtr_ef,OUTPUT);
  pinMode(st_mtr_dt,OUTPUT);
  pinMode(st_mtr_et,OUTPUT);

  /*jogar todas as saidas para 0, para eviatar que 
  o carro se movimente antes de ser dado algum comando*/
  digitalWrite(st_mtr_df,LOW);
  digitalWrite(st_mtr_ef,LOW);
  digitalWrite(st_mtr_dt,LOW);
  digitalWrite(st_mtr_et,LOW);
  analogWrite(vc_mtr_df,0);
  analogWrite(vc_mtr_ef,0);
  analogWrite(vc_mtr_dt,0);
  analogWrite(vc_mtr_et,0);
}

void loop() {

  
  if(digitalRead(bt0)==LOW && digitalRead(bt1)==HIGH && digitalRead(bt2)==LOW && digitalRead(bt3)==LOW) num_dtmf = 2;                     //Se DTMF == 2 e sensor de obstaculo avanço desacionado, variavel num_dtmf = 2 

  if(digitalRead(bt0)==LOW && digitalRead(bt1)==LOW && digitalRead(bt2)==LOW && digitalRead(bt3)==HIGH) num_dtmf = 8;                     //Se DTMF == 8 e sensor de obstaculo recuo desacionado, variavel num_dtmf = 8

  if(digitalRead(bt0)==LOW && digitalRead(bt1)==LOW && digitalRead(bt2)==HIGH && digitalRead(bt3)==LOW) num_dtmf = 4;                                       //Se DTMF == 4, variavel num_dtmf = 4        
  
  if(digitalRead(bt0)==LOW && digitalRead(bt1)==HIGH && digitalRead(bt2)==HIGH && digitalRead(bt3)==LOW) num_dtmf = 6;                                      //Se DTMF == 6, variavel num_dtmf = 6

  if(digitalRead(bt0)==HIGH && digitalRead(bt1)==LOW && digitalRead(bt2)==HIGH && digitalRead(bt3)==LOW || ss_ob_av==LOW || ss_ob_rc==LOW) num_dtmf = 5;    //Se DTMF == 5, ou sensor de obstaculo avanço acionado ou sensor de obstaculo recuo acionado, variavel num_dtmf = 5

    /*conforme numeração da 
    variavel execute a função*/  
  if(num_dtmf==2) Carro_avanca();

  if(num_dtmf==8) Carro_recua();

  if(num_dtmf==4) Carro_g_esquerda();

  if(num_dtmf==6) Carro_g_direita();

  if(num_dtmf==5) Carro_frena();

}

void Carro_avanca(){

if(digitalRead(ss_ob_av)==LOW)num_dtmf = 5; // sensor de obstáculo

/*Inicialização de variáveis*/
if(cfg0_av == 0){   //cfg0_av: configurações iniciais avanço
  v1=255;           //v1 variavel utilizada na velocidade dos motores
  cfg0_rc=0;        //cfg0_rc: configurações iniciais recuo
  cfg0_e=0;         //cfg0_av: configurações iniciais esquerda
  cfg0_d=0;         //cfg0_av: configurações iniciais direita
  cfg0_f=0;         //cfg0_av: configurações iniciais freio
  cfg0_av++;        //permite que as configs sejam inicializadas apenas 1 vez durante uma rotina  
}

/*Define o sentido de rotação do motor
      HIGH: avanço, LOW rucua*/
digitalWrite(st_mtr_df,HIGH);
digitalWrite(st_mtr_ef,HIGH);
digitalWrite(st_mtr_dt,HIGH);
digitalWrite(st_mtr_et,HIGH);

       /*controle de velocidade
digito 1 acelera e digito 3 desacelera*/
if(digitalRead(std)==1){
  if(digitalRead(bt0)==HIGH && digitalRead(bt1)==HIGH && digitalRead(bt2)==LOW && digitalRead(bt3)==LOW && v1<=204){
    v1=v1+51;
    while(digitalRead(std)==1){}
  }
  if(digitalRead(bt0)==HIGH && digitalRead(bt1)==LOW && digitalRead(bt2)==LOW && digitalRead(bt3)==LOW && v1>=51){
    v1=v1-51;
    while(digitalRead(std)==1){}
  }
  }

/*Controla motores em PWM*/
analogWrite(vc_mtr_df,v1);
analogWrite(vc_mtr_ef,v1);
analogWrite(vc_mtr_dt,v1);
analogWrite(vc_mtr_et,v1);
}


void Carro_recua(){

if(digitalRead(ss_ob_rc)==LOW)num_dtmf = 5;
  
if(cfg0_rc == 0){
  v1=0;
  cfg0_av=0;
  cfg0_e=0;
  cfg0_d=0;
  cfg0_f=0;
  cfg0_rc++;
}

digitalWrite(st_mtr_df,LOW);
digitalWrite(st_mtr_ef,LOW);
digitalWrite(st_mtr_dt,LOW);
digitalWrite(st_mtr_et,LOW);

if(digitalRead(std)==1){
  if(digitalRead(bt0)==HIGH && digitalRead(bt1)==LOW && digitalRead(bt2)==LOW && digitalRead(bt3)==LOW && v1<=204){
    v1=v1+51;
    while(digitalRead(std)==1){}
  }
  if(digitalRead(bt0)==HIGH && digitalRead(bt1)==HIGH && digitalRead(bt2)==LOW && digitalRead(bt3)==LOW && v1>=51){
    v1=v1-51;
    while(digitalRead(std)==1){}
  }
  }

analogWrite(vc_mtr_df,v1);
analogWrite(vc_mtr_ef,v1);
analogWrite(vc_mtr_dt,v1);
analogWrite(vc_mtr_et,v1);
}


void Carro_g_esquerda(){

if(cfg0_e == 0){
  
  cfg0_av=0;
  cfg0_rc=0;
  cfg0_d=0;
  cfg0_f=0;
  cfg0_e++;
}

digitalWrite(st_mtr_df,HIGH);
digitalWrite(st_mtr_ef,LOW);
digitalWrite(st_mtr_dt,HIGH);
digitalWrite(st_mtr_et,LOW);


analogWrite(vc_mtr_df,0);
analogWrite(vc_mtr_ef,255);
analogWrite(vc_mtr_dt,0);
analogWrite(vc_mtr_et,255);
}


void Carro_g_direita(){
  
if(cfg0_d == 0){
  
  cfg0_av=0;
  cfg0_rc=0;
  cfg0_e=0;
  cfg0_f=0;
  cfg0_d++;
}

digitalWrite(st_mtr_df,LOW);
digitalWrite(st_mtr_ef,HIGH);
digitalWrite(st_mtr_dt,LOW);
digitalWrite(st_mtr_et,HIGH);


analogWrite(vc_mtr_df,255);
analogWrite(vc_mtr_ef,0);
analogWrite(vc_mtr_dt,255);
analogWrite(vc_mtr_et,0);

}


void Carro_frena(){

if(cfg0_f == 0){
  cfg0_av=0;
  cfg0_rc=0;
  cfg0_e=0;
  cfg0_d=0;
  cfg0_f++;
}
/*FENAGEM: JOGA NIVEL AUTO PARA OS DOIS POLOS*/ 
digitalWrite(st_mtr_df,HIGH);
digitalWrite(st_mtr_ef,HIGH);
digitalWrite(st_mtr_dt,HIGH);
digitalWrite(st_mtr_et,HIGH);

analogWrite(vc_mtr_df,255);
analogWrite(vc_mtr_ef,255);
analogWrite(vc_mtr_dt,255);
analogWrite(vc_mtr_et,255);
}

 

 

 

 

 

 

HARDWARE

 

 

 

 

 

Arduíno Mega 2560 - R3

 

 

 

 

 

 

 

 

Sensor

 

 

 

 

 

 

 

 

Módulo DTMF

 

 

 

 

 

 

 

 

Ponte H

 

  • Wix Facebook page
  • Wix Google+ page

© 2015 by Eng. Controle e Automação/Computação-4S.Metrocamp.

Proudly created with Wix.com

bottom of page