competiçao ajudinha(com verde)
Página 1 de 1
competiçao ajudinha(com verde)
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);
pinMode(A10, INPUT);
pinMode(A11, INPUT);
pinMode(A12, INPUT);
pinMode(A13, INPUT);
Serial.begin(9600);
delay(5000);
}
void loop() {
//ultrassom();//ve se tem obstaculo, se tiver, desviar
//debug();//imprime os valores dos sensores de linha
verde();
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 <= 820 && medida_dist > 10) {
desviaObstaculo();
}
else {
}
}
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(1000);
andar_dir(85, 75);//vira 45 graus
delay(715);
parar();
delay(1000);
andar_frente(70, 55); //anda o bastante pra passar da caixa
delay(7005);
parar();
delay(1000);
andar_esq(85, 75);//virar em paralelo com a caixa
delay(2170);
parar();
delay(1000);
andar_frente(70, 60);//andar ate a linha
delay(3090);
parar();
delay(1000);
andar_dir(85, 75);//virar a direita ate voltar para linha(90 graus)
delay(1400);
parar();
delay(1000);
}
void debug() {//função q imprime os valores dos sensores de linha
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
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);
delay(200);
}
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 (analogRead(A3) > 300 && analogRead(A0) > 300) {
andar_tras(75, 65);
if (analogRead(A0) < 70) {
andar_esq(andarEsq, andarEsq);
delay(500);
}
if (analogRead(A3) < 16) {
andar_esq(andarDir, andarDir);
delay(500);
}
}
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);
}
void verde() {
if (analogRead(A3) > 300 && analogRead(A0) > 300) {
andar_tras(75, 65);
if (analogRead(A0) < 70) {
esq = 0;
delay(500);
}
if (analogRead(A3) < 16) {
dir = 0;
delay(500);
}
}
}
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);
pinMode(A10, INPUT);
pinMode(A11, INPUT);
pinMode(A12, INPUT);
pinMode(A13, INPUT);
Serial.begin(9600);
delay(5000);
}
void loop() {
//ultrassom();//ve se tem obstaculo, se tiver, desviar
//debug();//imprime os valores dos sensores de linha
verde();
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 <= 820 && medida_dist > 10) {
desviaObstaculo();
}
else {
}
}
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(1000);
andar_dir(85, 75);//vira 45 graus
delay(715);
parar();
delay(1000);
andar_frente(70, 55); //anda o bastante pra passar da caixa
delay(7005);
parar();
delay(1000);
andar_esq(85, 75);//virar em paralelo com a caixa
delay(2170);
parar();
delay(1000);
andar_frente(70, 60);//andar ate a linha
delay(3090);
parar();
delay(1000);
andar_dir(85, 75);//virar a direita ate voltar para linha(90 graus)
delay(1400);
parar();
delay(1000);
}
void debug() {//função q imprime os valores dos sensores de linha
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
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);
delay(200);
}
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 (analogRead(A3) > 300 && analogRead(A0) > 300) {
andar_tras(75, 65);
if (analogRead(A0) < 70) {
andar_esq(andarEsq, andarEsq);
delay(500);
}
if (analogRead(A3) < 16) {
andar_esq(andarDir, andarDir);
delay(500);
}
}
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);
}
void verde() {
if (analogRead(A3) > 300 && analogRead(A0) > 300) {
andar_tras(75, 65);
if (analogRead(A0) < 70) {
esq = 0;
delay(500);
}
if (analogRead(A3) < 16) {
dir = 0;
delay(500);
}
}
}
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|