Society of Robots - Robot Forum
Software => Software => Topic started by: Kelpy on November 01, 2010, 08:25:25 AM
-
I had never even seen C until about 2 months ago, but I am trying to learn. I have to say, I'm finding it quite difficult and alien.
I have put some LED's on my bot, which I am trying to get to "strobe" similar to the front of Kit in Knight Rider.
This piece of code does work effectively, but it seems to me that there must be a better way of doing it. (Similar to the GOSUB routine in Basic?)
The bits I'm on about refer to the led's.
if(lightLeft > lightRight && (lightLeft - lightRight) > threshold)
{
// go left
act_setSpeed(&left_wheel,DRIVE_SPEED_MIN);
act_setSpeed(&right_wheel,DRIVE_SPEED_MAX);
led_put_char(1);
LED_on(&led1);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led1);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led1);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led1);
delay_cycles(US_TO_CYCLES(50000));
}
else if(lightRight > lightLeft && (lightRight - lightLeft) > threshold)
{
// go right
act_setSpeed(&left_wheel,DRIVE_SPEED_MAX);
act_setSpeed(&right_wheel,DRIVE_SPEED_MIN);
led_put_char(3);
LED_on(&led1);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led1);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led1);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led1);
delay_cycles(US_TO_CYCLES(50000));
}
else
{
// Go forwards
act_setSpeed(&left_wheel,DRIVE_SPEED_MAX);
act_setSpeed(&right_wheel,DRIVE_SPEED_MAX);
led_put_char(2);
LED_on(&led1);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led1);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_on(&led1);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led4);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led3);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led2);
delay_cycles(US_TO_CYCLES(50000));
LED_off(&led1);
delay_cycles(US_TO_CYCLES(50000));
}
Any advice would be most welcome.
-
Looks like you're using WebbotLib.
My advice would to read up in the manual about the scheduler. This will let you have a piece of code that is called every fraction of a second. You can then make it move the LED bar left or right.
-
Thanks for that, Webbot. Is there anything you haven't thought of, in your library?
I can't say I understand it or know how to implement it, but I'll try and study it. ???