Hi, I've writen down a code for a sumo bot, and I'm having problems with an interrupt that I use to activate when my ultrasonic sensor see something closer than 100cm, the problem is that the interrupts is working as soon as I start the arduino, and then it stops, could someone see my code and tell me my mistake?
#include <Servo.h>
Servo Derecho;
Servo Izquierdo;
#define NivelSDD 580
#define NivelSDI 750
#define NivelSAD 500
#define NivelSAI 830
#define trig 5
#define echo 7
#define Vdd 8
#define enemigo 2
#define DD A2
#define DI A0
#define AD A3
#define AI A1
int Negro;
int Verde;
int Amarillo;
int Blanco;
int enLaMira;
int estado;
void setup()
{
Serial.begin(9600);
Derecho.attach(11);
Izquierdo.attach(9);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(Vdd,OUTPUT);
attachInterrupt(0, objetivo, CHANGE);
pinMode(4,OUTPUT);
}
void loop()
{
digitalWrite(Vdd, HIGH);
Negro = analogRead(DD);
Verde = analogRead(DI);
Blanco = analogRead(AI);
Amarillo = analogRead(AD);
//Serial.println(Negro,DEC);
if ((Negro > NivelSDD)&&(Verde>NivelSDI)&&(Amarillo>NivelSAD)&&(Blanco>NivelSAI)){
Derecho.write(180);
Izquierdo.write(0);
}
else if (Negro <= NivelSDD) {
Derecho.write(90);
Izquierdo.write(90);
delay(50);
Derecho.write(0);
Izquierdo.write(180);
delay(800);
Derecho.write(180);
Izquierdo.write(180);
delay(1000);
Derecho.write(180);
Izquierdo.write(0);
}
else if (Verde <= NivelSDI){
Derecho.write(90);
Izquierdo.write(90);
delay(50);
Derecho.write(0);
Izquierdo.write(180);
delay(800);
Derecho.write(0);
Izquierdo.write(0);
delay(1000);
Derecho.write(180);
Izquierdo.write(0);
}
else if (Amarillo <= NivelSAD){
Derecho.write(180);
Izquierdo.write(0);
}
else if (Blanco <= NivelSAI){
Derecho.write(180);
Izquierdo.write(0);
}
}
void objetivo() {
digitalWrite(Vdd,HIGH);
int duration, distance;
digitalWrite(trig, HIGH);
delayMicroseconds(1000);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
distance = (duration/2) / 29.1;
if (distance < 100)
{
digitalWrite(4,!estado);
Serial.print("se disparo la interrupcion");
Derecho.write(180);
Izquierdo.write(0);
}
}