hi
i am using dtmf decoder to control the quad copter... so i have fixed 1 button(in mobile) to increase the speed of all four motors simltenously.. it was working fine earlier.. but now i am getting some problem... that is, while increasing the speed of motors it is increasing for a while and after takeoff the speed reduces by itself...and on serial monitor i am getting the expected value but motor is not responding.
#include <Servo.h>
Servo m1,m2,m3,m4;
int led = 12;
int led1 = 7;
int s1,s2,s3,s4=0;
int val,val1,val2,val3,val4;
void setup()
{
pinMode(2,INPUT);
pinMode(4,INPUT);
pinMode(6,INPUT);
pinMode(8,INPUT);
pinMode(10,INPUT);
pinMode(led,OUTPUT);
pinMode(led1,OUTPUT);
m1.attach(3);
m2.attach(5);
m3.attach(9);
m4.attach(11);
attachInterrupt(0,dtmf,RISING);
Serial.begin(9600);
}
void loop()
{
digitalWrite(led1, HIGH);
delay(100);
digitalWrite(led1, LOW);
delay(10000);
digitalWrite(led, HIGH);
delay(75);
digitalWrite(led, LOW);
delay(40000);
if(val!=0)
{
Serial.println(val);
val = 0;
}
}
void dtmf()
{
for(int i=1;i<5;i++)
{
if(digitalRead(i+i+2)==1)
{
val =digitalRead(4)+2digitalRead(6)+4digitalRead(8)+8*digitalRead(10);
switch (val)
{
case 1:
s1=583;
s2=583;
s3=583;
s4=583;
val1 = map(s1, 0, 1023, 0, 179);
val2 = map(s2, 0, 1023, 0, 179);
val3 = map(s3, 0, 1023, 0, 179);
val4 = map(s4, 0, 1023, 0, 179);
m1.write(val2);
m2.write(val4);
m3.write(val1);
m4.write(val3);
break;
case 5:
for(i=0;i<20;i++)
{
s1=s1+1;
s2=s2+1;
s3=s3+1;
s4=s4+1;
val1 = map(s1, 0, 1023, 0, 179);
val2 = map(s2, 0, 1023, 0, 179);
val3 = map(s3, 0, 1023, 0, 179);
val4 = map(s4, 0, 1023, 0, 179);
m1.write(val2);
m2.write(val4);
m3.write(val1);
m4.write(val3);
}
break;
case 8:
for(i=0;i<10;i++)
{
s1=s1-1;
s2=s2-1;
s3=s3-1;
s4=s4-1;
val1 = map(s1, 0, 1023, 0, 179);
val2 = map(s2, 0, 1023, 0, 179);
val3 = map(s3, 0, 1023, 0, 179);
val4 = map(s4, 0, 1023, 0, 179);
m1.write(val2);
m2.write(val4);
m3.write(val1);
m4.write(val3);
}
break;
case 4:
for(i=1;i<5;i++)
{
s2=s2+1;
s1=s1;
s3=s3;
s4=s4;
val1 = map(s1, 0, 1023, 0, 179);
val2 = map(s2, 0, 1023, 0, 179);
val3 = map(s3, 0, 1023, 0, 179);
val4 = map(s4, 0, 1023, 0, 179);
m1.write(val2);
m2.write(val4);
m3.write(val1);
m4.write(val3);
}
break;
case 6:
for(i=1;i<5;i++)
{
s1=s1+1;
s2=s2;
s3=s3;
s4=s4;
val1 = map(s1, 0, 1023, 0, 179);
val2 = map(s2, 0, 1023, 0, 179);
val3 = map(s3, 0, 1023, 0, 179);
val4 = map(s4, 0, 1023, 0, 179);
m1.write(val2);
m2.write(val4);
m3.write(val1);
m4.write(val3);
}
break;
case 7:
for(i=1;i<5;i++)
{
s4=s4+1;
s1=s1;
s2=s2;
s3=s3;
val1 = map(s1, 0, 1023, 0, 179);
val2 = map(s2, 0, 1023, 0, 179);
val3 = map(s3, 0, 1023, 0, 179);
val4 = map(s4, 0, 1023, 0, 179);
m1.write(val2);
m2.write(val4);
m3.write(val1);
m4.write(val3);
}
break;
case 9:
for(i=1;i<5;i++)
{
s3=s3+1;
s1=s1;
s2=s2;
s4=s4;
val1 = map(s1, 0, 1023, 0, 179);
val2 = map(s2, 0, 1023, 0, 179);
val3 = map(s3, 0, 1023, 0, 179);
val4 = map(s4, 0, 1023, 0, 179);
m1.write(val2);
m2.write(val4);
m3.write(val1);
m4.write(val3);
}
break;
default:
for(s1=0;s1<110;s1++)
{
val1 = map(s1, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
m1.write(val1);
m2.write(val1);
m3.write(val1);
m4.write(val1);// sets the servo position according to the scaled value
}
break;
}
}
}
}