Ejemplo n.º 1
0
void doSensHome(){
	switch(position){
		case POS_START:
			printf("I'm about to start for the first time, I can start !!\n\r");
			position = POS_HOME;
			sleep(2);
			pwmOn();
			turnSX();
			printf("I look for the line on the central line sensor\n\r");
			break;
		case POS_LINE:
			printf("I arrive on the starting point\n\r");
			position = POS_HOME;
			pwmOff();
			sleep(2);
			pwmOn();
			turnSX();
			break;
		case POS_HOME:
			break; // I still turn to look for the line
		default:
			printf("unforeseen\n\r");
			position=POS_BAD;
			break; // unforeseen
	}
}
Ejemplo n.º 2
0
void ruotaDX() {
    printf("DX\n\r");
    pwmOff();
    pwmOn();
    system("echo  1450000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle");
    system("echo  1450000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle");
}
Ejemplo n.º 3
0
void indietro() {
    printf("INDIETRO\n\r");
    pwmOff();
    pwmOn();
    system("echo  15500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle");
    system("echo  1450000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle");
}
Ejemplo n.º 4
0
void forward() {
    printf("AVANTI\n\r");
    pwmOff();
    //rampa
    pwmOn();
    system("echo  1450000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle");
    system("echo  1550000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle");
    usleep(D_MARCIA);
    system("echo  1300000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle");
    system("echo  1700000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle");
    usleep(D_MARCIA);
    system("echo  1100000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle");
    system("echo  1900000 > /sys/class/pwm/pwmchip0/pwm1/duty_cycle");
    usleep(D_MARCIA);

}
Ejemplo n.º 5
0
// -------------------------------------------------------------------------------------
int main(void)
{
	setup();

	//WDTCR &= 0b11011000;	// set for 16ms timeout
	//WDTCR |= (1<<WDE);		// enable watchdog timer

	pwmOn();

	while(1)
	{
		//wdt_reset();
		processComparator();
	}

	return 0;
}
Ejemplo n.º 6
0
// -------------------------------------------------------------------------------------
// Process the data from the ADC
static void processComparator(void)
{
	// check comparator - we'll do simple skip-mode type PWM.
	// If the voltage is higher, skip a cycle.  If the voltage is lower,
	// don't skip a cycle.  We'll skip by turning the PWM output
	// on and off (by setting OC1B to either 0 or the PWM value)

	if ((ACSR & (1<<ACO)) == 0)
	{
		// comparater output is 0 - positive input is greater than negative input
		// AIN < REF
		// Enable PWM output because voltage is too low
		pwmOff();
	}
	else
	{
		// comparator output is 1 - positive input is less than negative input
		// AIN > REF
		// Disable PWM output because voltage is too high
		pwmOn();
	}
}
Ejemplo n.º 7
0
//
// main
//
int main( void )
{
   // Endless loop
   //
        while ( 1 )
        {
      // Switch states
      //

      switch ( newState )
      {
         case StateInit:

            // Init system
            //
            init();
           
            newState = StateIdle;

            break;


         case StateIdle:

            if ( programmingActive )
            {
               if ( (ticks - levelRampTime) >= LEVEL_RAMP_TIME )
               {
                  levelRampTime = ticks;

                  percent += levelSteps;

                  if ( 100 < percent )
                  {
                     levelSteps  = -1;
                     percent     = 99;
                  }
               
                  if ( 1 > percent )
                  {
                     levelSteps  = 1;
                     percent     = 2;
                  }

                  pwm( percent );
               }
            }

            else if ( (strobeTimerActive) && (ticks >= strobeTimer)  )
            {
               strobeTimer = ticks + STROBE_TIME;

               if ( strobeFlag )
               {
                  strobeFlag = 0;

                  pwm( percent );
               }
               else
               {
                  strobeFlag = 1;

                  pwm( 0 );
               }
            }

            go2sleep( SLEEP_MODE_IDLE );
            break;


         case StatePowerDownDetected:

            if ( powerUpDebouncing )
            {
               // Discard state change.
               //
               newState = StatePowerUpDebouncing;
            }
            else
            {
               if ( 1 == programmingActive )
               {
                  eeprom_write_byte( (uint8_t *) (EEPROM_PWM_VALUES + currentPWMMode), percent );

                  pwmValues[currentPWMMode]  = percent;
                  programmingActive          = 0;
               }

               powerDownDebouncing  = 1;
               debounceTimer        = ticks + DEBOUNCE_TIME;
               newState             = StatePowerDownDebouncing;

               pwmOff();
            }

            break;


         case StatePowerDownDebouncing:

            if ( ticks >= debounceTimer )
            {
               powerDownDebouncing  = 0;

               if ( !(PINB & (1 << PB0)) )
               {
                  newState = StatePowerDown;
               }
               else
               {
                  newState = StateIdle;
               }
            }
            else
            {
               go2sleep( SLEEP_MODE_PWR_DOWN );
            }

            break;


         case StatePowerDown:

            if ( 0 == powerDownTimerRunning )
            {
               powerDownTimerRunning   = 1;
               powerDownTimer          = ticks;
            }

            go2sleep( SLEEP_MODE_PWR_DOWN );

            break;


         case StatePowerUpDetected:

            if ( powerDownDebouncing )
            {
               // Discard state change.
               //
               newState = StatePowerDownDebouncing;
            }
            else
            {
               powerUpDebouncing    = 1;
               debounceTimer        = ticks + DEBOUNCE_TIME;
               newState             = StatePowerUpDebouncing;
            }

            break;


         case StatePowerUpDebouncing:

            if ( ticks >= debounceTimer )
            {
               powerUpDebouncing = 0;

               if ( (PINB & (1 << PB0)) )
               {
                  newState = StatePowerUp;
               }

               else
               {
                  newState = StateIdle;
               }
            }

            else
            {
               go2sleep( SLEEP_MODE_IDLE );
            }

            break;


         case StatePowerUp:

            pwmOn();

            if ( programmingActive )
            {
               // Do nothing!
            }

            else
            {
               if ( (ticks - powerDownTimer) <= MAX_PROG_SWITCH_TIME )
               {
                  fastClicks++;

                  if ( CLICKS_TO_PROG_MODE <= fastClicks )
                  {
                     fastClicks              = 0;
                     powerDownTimerRunning   = 0;
                     powerDownTimer          = 0;

                     percent                 = 1;
                     levelSteps              = 1;
                     levelRampTime           = ticks;
                     programmingActive       = 1;


                     pwm( percent );
                  }

                  newState = StateIdle;
               }

               else if ( (ticks - powerDownTimer) <= MAX_MODE_SWITCH_TIME )
               {
                  clicks++;

                  if ( CLICKS_TO_SWITCH_MODE <= clicks )
                  {
                     clicks                  = 0;
                     powerDownTimerRunning   = 0;
                     powerDownTimer          = 0;

                     currentPWMMode++;

                     if ( NUM_PWM_VALUES <= currentPWMMode )
                     {
                        currentPWMMode = 0;
                     }

                     percent = pwmValues[ currentPWMMode ];

                     strobeTimerActive = percent & 0x80;

                     if ( strobeTimerActive )
                     {
                        strobeTimer = ticks + STROBE_TIME;
                     }

                     percent &= 0x7F;

                     pwm( percent );
                  }

                  newState = StateIdle;
               }

               else
               {
                  clicks                  = 0;
                  fastClicks              = 0;
                  powerDownTimerRunning   = 0;
                  powerDownTimer          = 0;
                  newState                = StateIdle;
               }
            }

            break;

         default:
            break;
      }

        }
}