new version (saved about 50 lines in .hex file :))
//Written for atmega328-PU (16MHz external crystal)
//Compiled with arduino 1.0 (www.arduino.cc)
#include <Servo.h>
#define BAUD 9600 //UART baud rate
#define ECHOPINL 9 //Echo pin l = left
#define ECHOPINR 11 //Echo pin r = right
#define MINPULSE 600 //Minimum servo pulse
#define MAXPULSE 2400 //Maximum servo pulse
#define TRIGPINL 10 //Trig pin l
#define TRIGPINR 12 //Trig pin r
Servo servol; //Creating servo object servol
Servo servor; //Creating servo object servor
int holdtime = 15;
bool hold = false;
int vall, valr;
int perl, perr;
int prevperl = 0, prevperr = 0;
int sonic(int sensore, int sensort, int mincm, int maxcm)
{
int per;
long duration;
digitalWrite(sensort, LOW);
delay(2);
digitalWrite(sensort, HIGH);
delay(5);
digitalWrite(sensort, LOW);
duration = pulseIn(sensore, HIGH);
per = ms_cm(duration);
per = map(per, mincm, maxcm, 0, 100);
return(per);
}
long ms_cm(long ms)
{
return ms / 29 / 2;
}
void debugg()
{
Serial.print(vall);
Serial.print(" ");
Serial.print(valr);
Serial.println();
}
void setup()
{
Serial.begin(BAUD);
pinMode(ECHOPINL, INPUT);
pinMode(ECHOPINR, INPUT);
pinMode(TRIGPINL, OUTPUT);
pinMode(TRIGPINR, OUTPUT);
}
void loop()
{
perl = sonic(ECHOPINL, TRIGPINL, 20, 6);
perr = sonic(ECHOPINR, TRIGPINR, 6, 20);
if( (perl - prevperl) >= 5 )
{
perl = prevperl;
hold=false;
}
if( (perr - prevperr) >= 5 )
{
perr = prevperr;
hold=false;
}
vall = map(vall, 0, 100, 90, 180);
valr = map(valr, 0, 180, 180, 90);
servol.write(vall * ((float)perl / 100) );
servor.write(valr * ((float)perl / 100) );
if(hold==true) delay(holdtime);
hold=true;
debugg();
}
- Is it better to use pointers or global variables?
- Is my
servol.write(vall * ((float)perl / 100) );
valid?
3. Are there any other major issues with my sketch?
Thanks all for help..