programa final versão 1.8.3
Página 1 de 1
programa final versão 1.8.3
int andarFrente = 80;
int andarEsq = 110;// esquerda e mais rapido do que o direita
int andarDir = 110;
int esq;
int dir;
int result;
float time90graus = 0.7;
float time6cm = 2.1;// 2.2 e um pouco mais do que devia
float time14cm = 4.6;// 5.2 mt
float timePiso2 = 5;
int ultrassomread;
int medida_dist = 0;
int x = 0;
void setup() {
// put your setup code here, to run once:
pinMode(A0, INPUT);//esquerda ++
pinMode(A4, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(53, OUTPUT);
pinMode(A15, INPUT);
pinMode(31, INPUT);
pinMode(8, OUTPUT);
Serial.begin(9600);
delay(5000);
}
void loop() {
//ultrassom();//ve se tem obstaculo, se tiver, desviar
//debug();//imprime os valores dos sensores de linha
// seguirLinha();
verificaDistancia();
}
void verificaDistancia() {
medida_dist = 0;
delay(2);
digitalWrite(53, HIGH);
delay(10);
digitalWrite(53, LOW);
medida_dist = pulseIn(A15, HIGH);
if (medida_dist <= 800 && medida_dist > 10) {
desviaObstaculo();
}
}
void andar_frente(int pot_d, int pot_e) {//função para andar para frente
analogWrite(2, pot_e);
analogWrite(3, pot_d);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
}
void andar_tras(int pot_d, int pot_e) {//função para andar para tras
analogWrite(2, pot_e);
analogWrite(3, pot_d);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
}
void andar_esq(int pot_d, int pot_e) {//função para andar para esquerda
analogWrite(2, pot_e);
analogWrite(3, pot_d);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
}
void andar_dir(int pot_d, int pot_e) {//função para andar para direita
analogWrite(2, pot_e);
analogWrite(3, pot_d);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
}
void parar() {//função para andar para parar
analogWrite(2, 0);
analogWrite(3, 0);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
}
void desviaObstaculo() {//função para verificar se o obstaculo esta na frente, se tiver, desviar
parar();
delay(200);
andar_dir(75, 65);//vira 45 graus
delay(500);
parar();
delay(1000);
andar_frente(60, 50);//anda o bastante pra passar da caixa
delay(7000);
parar();
delay(1000);
andar_esq(75, 65);//virar em paralelo com a caixa
delay(1225);
parar();
delay(1000);
andar_frente(60, 50);//andar ate a linha
delay(4000);
parar();
delay(1000);
andar_dir(75, 65);//virar a direita ate voltar para linha(90 graus)
delay(400);
parar();
delay(1000);
}
void debug() {//função q imprime os valores dos sensores de linha
Serial.print("Esquerda ++ = ");
Serial.print(analogRead(A0));
Serial.print(" esquerda + = ");
Serial.print(analogRead(A3));
Serial.print(" Direita ++ = ");
Serial.print(analogRead(A2));
Serial.print(" direita + = ");
Serial.print(analogRead(A4));
Serial.print(" Resultado ");
Serial.println(result);
delay(2);
digitalWrite(53, HIGH);
delay(10);
digitalWrite(53, LOW);
medida_dist = pulseIn(A15, HIGH);
Serial.print("ultrassom");
Serial.println(medida_dist);
}
void seguirLinha() {
esq = analogRead(A0) + 1.5 * analogRead(A3); //soma os valores dos sensores da esq
// esq = esq * (-1);//multiplica esse valor por -1
dir = analogRead(A2) + 1.5 * analogRead(A4); //soma os valores dos sensores da dir
result = esq * -1 + dir; //soma os valores:sensores da direita*1 e sensores da esquerda* -1
if (result <= -150) {//ve se a soma dos valores dos sensores da direita mais a soma dos valores da esquerda sao menor q -100
andar_esq(andarEsq + 10, andarEsq); //nesse caso, virar pra esquerda
}
else {
if (result >= 150) {//e se ////se a soma nao for menor q -100
andar_dir(andarDir + 10, andarDir); //nesse caso, virar direita
}
else {//se ñ tiver q virar nem pra direita nem pra esquerda
andar_frente(andarFrente + 10, andarFrente); //andar para frente
}
}
}
void sinalizar(int tempo) {
digitalWrite(8, LOW);
digitalWrite(8, HIGH);
delay(tempo);
digitalWrite(8, LOW);
}
int andarEsq = 110;// esquerda e mais rapido do que o direita
int andarDir = 110;
int esq;
int dir;
int result;
float time90graus = 0.7;
float time6cm = 2.1;// 2.2 e um pouco mais do que devia
float time14cm = 4.6;// 5.2 mt
float timePiso2 = 5;
int ultrassomread;
int medida_dist = 0;
int x = 0;
void setup() {
// put your setup code here, to run once:
pinMode(A0, INPUT);//esquerda ++
pinMode(A4, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(53, OUTPUT);
pinMode(A15, INPUT);
pinMode(31, INPUT);
pinMode(8, OUTPUT);
Serial.begin(9600);
delay(5000);
}
void loop() {
//ultrassom();//ve se tem obstaculo, se tiver, desviar
//debug();//imprime os valores dos sensores de linha
// seguirLinha();
verificaDistancia();
}
void verificaDistancia() {
medida_dist = 0;
delay(2);
digitalWrite(53, HIGH);
delay(10);
digitalWrite(53, LOW);
medida_dist = pulseIn(A15, HIGH);
if (medida_dist <= 800 && medida_dist > 10) {
desviaObstaculo();
}
}
void andar_frente(int pot_d, int pot_e) {//função para andar para frente
analogWrite(2, pot_e);
analogWrite(3, pot_d);
digitalWrite(5, HIGH);
digitalWrite(4, LOW);
digitalWrite(7, LOW);
digitalWrite(6, HIGH);
}
void andar_tras(int pot_d, int pot_e) {//função para andar para tras
analogWrite(2, pot_e);
analogWrite(3, pot_d);
digitalWrite(5, LOW);
digitalWrite(4, HIGH);
digitalWrite(7, HIGH);
digitalWrite(6, LOW);
}
void andar_esq(int pot_d, int pot_e) {//função para andar para esquerda
analogWrite(2, pot_e);
analogWrite(3, pot_d);
digitalWrite(5, HIGH);
digitalWrite(4, HIGH);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
}
void andar_dir(int pot_d, int pot_e) {//função para andar para direita
analogWrite(2, pot_e);
analogWrite(3, pot_d);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(7, HIGH);
digitalWrite(6, HIGH);
}
void parar() {//função para andar para parar
analogWrite(2, 0);
analogWrite(3, 0);
digitalWrite(5, LOW);
digitalWrite(4, LOW);
digitalWrite(7, LOW);
digitalWrite(6, LOW);
}
void desviaObstaculo() {//função para verificar se o obstaculo esta na frente, se tiver, desviar
parar();
delay(200);
andar_dir(75, 65);//vira 45 graus
delay(500);
parar();
delay(1000);
andar_frente(60, 50);//anda o bastante pra passar da caixa
delay(7000);
parar();
delay(1000);
andar_esq(75, 65);//virar em paralelo com a caixa
delay(1225);
parar();
delay(1000);
andar_frente(60, 50);//andar ate a linha
delay(4000);
parar();
delay(1000);
andar_dir(75, 65);//virar a direita ate voltar para linha(90 graus)
delay(400);
parar();
delay(1000);
}
void debug() {//função q imprime os valores dos sensores de linha
Serial.print("Esquerda ++ = ");
Serial.print(analogRead(A0));
Serial.print(" esquerda + = ");
Serial.print(analogRead(A3));
Serial.print(" Direita ++ = ");
Serial.print(analogRead(A2));
Serial.print(" direita + = ");
Serial.print(analogRead(A4));
Serial.print(" Resultado ");
Serial.println(result);
delay(2);
digitalWrite(53, HIGH);
delay(10);
digitalWrite(53, LOW);
medida_dist = pulseIn(A15, HIGH);
Serial.print("ultrassom");
Serial.println(medida_dist);
}
void seguirLinha() {
esq = analogRead(A0) + 1.5 * analogRead(A3); //soma os valores dos sensores da esq
// esq = esq * (-1);//multiplica esse valor por -1
dir = analogRead(A2) + 1.5 * analogRead(A4); //soma os valores dos sensores da dir
result = esq * -1 + dir; //soma os valores:sensores da direita*1 e sensores da esquerda* -1
if (result <= -150) {//ve se a soma dos valores dos sensores da direita mais a soma dos valores da esquerda sao menor q -100
andar_esq(andarEsq + 10, andarEsq); //nesse caso, virar pra esquerda
}
else {
if (result >= 150) {//e se ////se a soma nao for menor q -100
andar_dir(andarDir + 10, andarDir); //nesse caso, virar direita
}
else {//se ñ tiver q virar nem pra direita nem pra esquerda
andar_frente(andarFrente + 10, andarFrente); //andar para frente
}
}
}
void sinalizar(int tempo) {
digitalWrite(8, LOW);
digitalWrite(8, HIGH);
delay(tempo);
digitalWrite(8, LOW);
}
Tópicos semelhantes
» Programa inicial giroscopio
» Programa Final ( quase )
» Programa Quase Feito
» Programa Final ( quase ) de novo
» Programa Testar Sesor linha
» Programa Final ( quase )
» Programa Quase Feito
» Programa Final ( quase ) de novo
» Programa Testar Sesor linha
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|