#use "expservo.icb"
int results[7];
void
main ()
{
int i;
int pos = 0;
while (1)
{
start_press ();
init_expbd_servos (1);
sonar_init ();
for (i = 0; i < 7; i++)
{
servo1 = i * 666;
sleep (0.3);
results[i] = filtered_sonar (8) / 100;
printf ("doing %d, got %d\n", i, results[i]);
sleep (0.3);
}
printf ("%d %d %d %d %d %d %d\n", results[0], results[1], results[2], results[3], results[4], results[5], results[6]);
init_expbd_servos (0);
}
while (0)
{
int result;
pos = pos + 20;
servo0 = pos;
servo1 = pos;
printf ("%d %d\n", servo0, servo1);
//result= sonar_sample();
//if (result != -1)
// printf("%d\n", result);
//else
// printf("@@@@@@@\n");
//tone((float)(result/8),0.2);
//sleep(0.5);
}
}
int
filtered_sonar (int samples)
{
int i;
int sum;
int temp, readings;
sum = 0;
readings = 0;
for (i = 0; i < samples; i++)
{
temp = sonar_sample ();
if (temp > 0)
{
sum = sum + temp / samples;
readings++;
}
sleep (0.1);
}
if (readings == 0)
return -1;
return sum * samples / readings;
}
void
sonar_init ()
{
bit_set (0x1026, 0x80); /* set Digital Input #9 as output */
bit_clear (0x1021, 1); /* at TCTL2, */
bit_set (0x1021, 2); /* set TIC3 for falling edge */
}
int
sonar_sample ()
{
int start_time;
int dist;
poke (0x1023, 1); /* clear tic3 flag */
start_time = peekword (0x100e); /* capture start time */
bit_set (0x1000, 0x80); /* send init pulse */
bit_clear (0x1000, 0x80);
while (peek (0x1000) & 0x1)
{ /* wait until receive echo */
hog_processor ();
if ((peekword (0x100e) - start_time) < 0)
{
/* if too much time has elapsed, abort */
return -1;
}
defer (); /* let others run while waiting */
}
msleep (10L); /* give unit time to reset */
dist = peekword (0x1014) - start_time;
// if (dist < 0)
// dist = 32767;
return dist; /* tic3 has time of echo */
}