Hola a todos. Estoy haciendo un proyecto en el cual mediante un sensor IR muevo un coche tele-dirigido.
El problema está cuando quiero que mediante unos sensores Sharp de proximidad esquive objetos, pero no lo hace. Creo que esto es debido a que en defino el motor como si fuera un PIN y también como un motor. Separando el código funcionan las dos cosas pero al juntarlo da ese fallo.
Gracias de antemano.
A continuación os pongo el código.
#include <Servo.h>
#include <Arduino.h>
#include <NECIRrcv.h>
#define IRPIN A5 //Pin analog 5 sensor IR
#define senr A1
#define senl A0
Servo servoD;
Servo servoI;
NECIRrcv ir(IRPIN) ;
unsigned long ircode ;
int valizq= 0;
int valder= 0;
int motl= 7;
int motr= 8;
void setup()
{
pinMode(motl, OUTPUT);
pinMode(motr, OUTPUT);
servoD.attach(7);
servoI.attach( 8);
ir.begin() ;
}
void adelante ()
{
digitalWrite(motl,HIGH);
delayMicroseconds(1000);
digitalWrite(motl,LOW);
digitalWrite(motr,HIGH);
delayMicroseconds(2000);
digitalWrite(motr,LOW);
delayMicroseconds(20000);
}
void atras ()
{
digitalWrite(motr,HIGH);
delayMicroseconds(1000);
digitalWrite(motr,LOW);
digitalWrite(motl,HIGH);
delayMicroseconds(2000);
digitalWrite(motl,LOW);
delayMicroseconds(20000);
}
void derecha ()
{
digitalWrite(motl,HIGH);
delayMicroseconds(2000);
digitalWrite(motl,LOW);
digitalWrite(motr,HIGH);
delayMicroseconds(2000);
digitalWrite(motr,LOW);
delayMicroseconds(20000);
}
void izquierda ()
{
digitalWrite(motr,HIGH);
delayMicroseconds(2000);
digitalWrite(motr,LOW);
digitalWrite(motl,HIGH);
delayMicroseconds(2000);
digitalWrite(motl,LOW);
delayMicroseconds(20000);
}
void loop()
{
while (ir.available()) {
ircode = ir.read() ;
switch(ircode){
case 4144561665: //pulsar 2 avanza
servoD.write(80);
servoI.write(100);
break;
case 4010868225: //pulsar 8 retrocede
servoD.write(100);
servoI.write(80);
break;
case 4077714945: //pulsar 5 para parar
servoD.write(90);
servoI.write(90);
break;
case 4278255105: //pulsar 6 gira derecha
servoD.write(90);
servoI.write(100);
break;
case 3810328065: //pulsar 4 gira izquierda
servoD.write(80);
servoI.write(90);
break;
case 4177985025: //pulsar 3 gira derecha mientras avanza
servoD.write(85);
servoI.write(100);
break;
case 4161273345: //pulsar 1 gira izquierda mientras avanza
servoD.write(80);
servoI.write(95);
break;
case 4027579905: //pulsar 7 gira izquierda mientras retrocede
servoD.write(100);
servoI.write(85);
break;
case 4044291585: //pulsar 9 gira derecha mientras retrocede
servoD.write(95);
servoI.write(80);
break;
case 4244831745: //pulsar
valizq=analogRead (senl);
valder=analogRead (senr);
if(valder>400&&valizq>400)
{
atras();
}
else
{
if(valder>400)
{
izquierda();
}
else
{
if(valizq>400)
{
derecha();
}
else
{
adelante(); } }}
break;
}}
}