hello,
i recently put together some code to control a toy helicopter using a ping sensor and some flex sensors attacked to gloves.
i did get the code to compile and for technically it does work but the latency makes the helicopter almost impossible to actually control. i will post my code below and hope someone might have some suggestions perhaps on how to lower the latency or at least smooth out my code, thanks in advance.
#include <SPI.h>
#include <NewPing.h>
#define TRIGGER_PIN 2
#define ECHO_PIN 4
#define MAX_DISTANCE 30
int slave = 10;
int flexpin=A0;
int flexpin1=A1;
int flexpin2=A2;
int flexpin3=A3;
int flex[20];
int flex1[20];
int flex2[20];
int flex3[20];
int flexsum=0;
int flexsum1=0;
int flexsum2=0;
int flexsum3=0;
int val=0;
int val1=0;
int val2=0;
int val3=0;
int val4=0;
int cm;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup()
{
pinMode(slave,OUTPUT);
SPI.begin();
Serial.begin(9600);
}
void setpot (int reg, int level)
{
digitalWrite(slave,LOW);
SPI.transfer(reg);
SPI.transfer(level);
digitalWrite(slave,HIGH);
}void loop()
{
{
for(int x=0; x<20; x++)
{
flex[x]=analogRead(flexpin);
flex1[x]=analogRead(flexpin1);
flex2[x]=analogRead(flexpin2);
flex3[x]=analogRead(flexpin3);
flexsum=flexsum+analogRead(flexpin);
flexsum1=flexsum1+analogRead(flexpin1);
flexsum2=flexsum2+analogRead(flexpin2);
flexsum3=flexsum3+analogRead(flexpin3);delayMicroseconds(14);
}
flexsum=flexsum/20;
flexsum1=flexsum1/20;
flexsum2=flexsum2/20;
flexsum3=flexsum3/20;{
Serial.println(flexsum);
Serial.println(flexsum1);
Serial.println(flexsum2);
Serial.println(flexsum3);
delay(500);
}{
delay(40);
unsigned int uS = sonar.ping();
int cm =(uS / US_ROUNDTRIP_CM);
Serial.print("Ping: ");
Serial.print(uS / US_ROUNDTRIP_CM);
Serial.println("cm");{
int val = cm;
val=map(val,5,25,0,200);
val=constrain(val,5,200);
{
setpot(0,val);
}
}
int val1=flexsum;
if (val1 > 630)
{
int val1=map(val1,730,830,62,127);
{
setpot(1,val1);
}
}
else
{
int val2=flexsum1;
val2=map(val2,740,860,61,10);
{
setpot(1,val2);
}
}
int val3=flexsum3;
if (val3 > 570)
{
int val3=map(val3,570,770,62,127);
{
setpot(2,val3);
}
}
else
{
int val4=flexsum2;
val4=map(val4,630,820,61,10);
{
setpot(2,val4);
}
}
}
}
}long mic2sec(long microseconds)
{
return microseconds / 29 / 2;
}
this is my first attempt at writing code for arduino and am a novice in general thus any advice is greatly appreciated.