
Algoritmos e Programação de Computadores II
Faculdades Integradas Metropolitanas - Metrocamp

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


