Ejemplo n.º 1
0
int test03(void)
{
    int n;
    
    Init();

        StatusLED(XGN);

        FrontLED(ON);

        BackLED(ON, ON);

        MotorDir(BREAK, FREE);

        MotorSpeed(150,80);

        while(1)
        {
         BackLED(OFF, OFF);
         
         StatusLED(XGN);
         for (n=1; n<100; n++) Sleep(255);
         
         StatusLED(XRD);
         for (n=1; n<100; n++) Sleep(255);
        }
    return 0;
}
Ejemplo n.º 2
0
void Lichtorgel(void){
	MotorDir(FWD,BWD);
	MotorSpeed(255,255);
	for(int q = 0; q < 15; q++){
		StatusLED(GREEN);
		msleep(50);
		BackLED(ON,OFF);
		msleep(50);
		StatusLED(RED);
		msleep(50);
		BackLED(OFF,ON);
		msleep(50);
		StatusLED(YELLOW);
		msleep(50);
		FrontLED(ON);
		msleep(50);
		FrontLED(OFF);
	}
	
	MotorDir(BREAK,BREAK);
	MotorSpeed(0,0);
	
	while(1){
		StatusLED(GREEN);
		msleep(50);
		BackLED(ON,OFF);
		msleep(50);
		StatusLED(RED);
		msleep(50);
		BackLED(OFF,ON);
		msleep(50);
		StatusLED(YELLOW);
		msleep(50);
		FrontLED(ON);
		msleep(50);
		FrontLED(OFF);
	}
}
Ejemplo n.º 3
0
int test05(void)
{
    int n, s, light;
    
    char key;
    
    Init();

    StatusLED(XGN);
    
    FrontLED(ON);
    BackLED(ON, ON);
                                                                       
    //SerWrite("Begin...", 8);
    //SerWrite("Waiting for command... ", 23);

    SerRead(key, 1, 0);
    
    if (key == 'g')
    {
        SerWrite("Good Morning... Starting...", 27);
    }
    else
    {
        SerWrite("So... just start... ", 20);
    }
    
    while(1)
    {
        for (s=80; s<300; s+=10)
        {    
            SerWrite("Looping... ", 11);
            
            MotorDir(FWD, RWD);
            MotorSpeed(150,s);
        
            SerWrite("Sleep Now! ", 11);
            for (n=1; n< 100; n++)  Sleep(255);
        
            if (s > 200)
            {
                SerWrite("S>200 ", 6);
            
                s=80;
            }
                
        }
    }
    return 0;
}
Ejemplo n.º 4
0
/* LED Test */
void ledtest(void)
{
    StatusLED(RED);
    delayms(300);

    StatusLED(GREEN);
    delayms(100);

    StatusLED(YELLOW);
    delayms(50);

    StatusLED(OFF);
    delayms(1000);

    FrontLED(ON);
    delayms(200);

    BackLED(ON, ON);
    delayms(500);

    FrontLED(OFF);
    BackLED(OFF, OFF);
    delayms(500);
}
Ejemplo n.º 5
0
int main(void) {
    Init();
    syd_message("Line Counter");


    FrontLED(ON);

    while (1) {
        check_buttons();
        calibrate();
        count();
    }
    
    return 0;
}
Ejemplo n.º 6
0
int test01(void)
{
    Init();

    StatusLED(XGN);
    
    FrontLED(ON);
    BackLED(ON, ON);

    MotorDir(BREAK, FREE);
    MotorSpeed(150,80);

    while(1);
    return 0;
}
Ejemplo n.º 7
0
int test02(void)
{
    Init();

    StatusLED(XGN);

    FrontLED(ON);
    BackLED(ON, ON);

    MotorDir(FWD, RWD);
    MotorSpeed(150,80);

    while(1);
    return 0;
}
Ejemplo n.º 8
0
int test04(void)
{
    int n;
    
    Init();

        StatusLED(XRD);

        FrontLED(ON);

        BackLED(ON, ON);

        MotorDir(FREE, FREE);
        MotorSpeed(150, 150);
        
        for (n=1; n<200; n++) Sleep(255);
        
        StatusLED(XGN);
        FrontLED(OFF);
        BackLED(OFF, OFF);
        for (n=1; n<50; n++) Sleep(255);

        while(1)
        {
         StatusLED(XGN);
         BackLED(OFF, OFF);
         FrontLED(ON);
         MotorDir(FWD, FWD);
         for (n=1; n<500; n++) Sleep(255);
         
         StatusLED(XRD);
         BackLED(OFF, OFF);
         FrontLED(OFF);
         MotorDir(BREAK, BREAK);
         for (n=1; n<100; n++) Sleep(255);
         
         StatusLED(XGN);
         BackLED(ON, ON);
         FrontLED(OFF);
         MotorDir(RWD, RWD);
         for (n=1; n<500; n++) Sleep(255);
         
         StatusLED(XRD);
         BackLED(OFF, OFF);
         FrontLED(OFF);
         MotorDir(BREAK, BREAK);
         for (n=1; n<100; n++) Sleep(255);
        }
        
    return 0;
}
Ejemplo n.º 9
0
void bcr_initBarcodeReader(void) {
	EncoderInit();
	MotorDir(FWD,FWD);
	FrontLED(ON);
	
	lineCounter = 0;
	rawCounter = 0;
	latestLineData = 0;
	
	unsigned int tmp[2];
	util_getStableLineData(tmp);
	tolFactor = getToleranceValue(tmp[LEFT] + tmp[RIGHT]);
	
	int i;
	util_pauseInterrupts();
	for(i = 0; i < (M_RAW_DATAPOINTS * M_WINDOW_SIZE); i++) {
		measureDataPoint();
		Msleep(5);
	}
	
	ts_init();
	ts_addFunction(&measureDataPoint, M_SAMPLING_FREQ);
	sei();
}
Ejemplo n.º 10
0
/* Init function Processor will be initalized to work correctly */
void Init (void)
{
	//-------- seriell interface programmed in boot routine and already running -------
	//  prepare 36kHz for IR - Communication
	TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
	OCR2  = 0x6E; // 36kHz @8MHz
	TIMSK |= (1 << OCIE2); // 36kHz counter for sleep
	
	// prepare RS232 
	UCSRA = 0x00;
	UCSRB = 0x00;	
	UCSRC = 0x86; // No Parity | 1 Stop Bit | 8 Data Bit
	UBRRL = 0xCF; // 2400bps @ 8.00MHz
	
	// I/O Ports
	DDRB = IRTX | LEFT_DIR | PWM | GREEN_LED; 
	DDRD = RIGHT_DIR | FRONT_LED | ODOMETRIE_LED | RED_LED;
	
	// for PWM (8-Bit PWM) on OC1A & OC1B
	TCCR1A = (1 << WGM10) | (1 << COM1A1) | (1 << COM1B1);
	// tmr1 running on MCU clock/8 
	TCCR1B = (1 << CS11);
	
	// A/D Conversion
	ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1); // clk/64 
	ODOMETRIE_LED_OFF;

	FrontLED(OFF);
	BackLED(ON,ON);
	BackLED(OFF,OFF);
	StatusLED(GREEN);
	
	MotorDir(FWD,FWD);
	MotorSpeed(0,0);
	sei();
}
Ejemplo n.º 11
0
void StereoSound(uint16_t *noten1, uint16_t *noten2)
{
	uint16_t index1=0,index2=0;
	uint16_t timer1,timer2;
	uint16_t phase1,phase2,angle1,angle2;
	uint8_t dir1=FWD,dir2=FWD;
	uint8_t speed1,speed2;
	
	FrontLED(OFF);
	BackLED(OFF,OFF);
	StatusLED(OFF);
	
	angle1=(uint32_t)noten1[index1++]*65536/FS;
	timer1=noten1[index1++]*(FS/1000);
	if(angle1==0)speed1=0;
	else speed1=255;

	angle2=(uint32_t)noten2[index2++]*65536/FS;
	timer2=noten2[index2++]*(FS/1000);
	if(angle2==0)speed2=0;
	else speed2=255;
	MotorSpeed(speed1,speed2);
	
	cli(); // stop all interrupts
	while(timer1!=0)
	{
		timer1--;
		timer2--;

		if(timer1==0) 
		{
			angle1=(uint32_t)noten1[index1++]*65536/FS;
			timer1=noten1[index1++]*(FS/1000);
			if(angle1==0)speed1=0;
			else speed1=255;
					
			MotorSpeed(speed1,speed2);
		}
		
		if(timer2==0) 
		{
			angle2=(uint32_t)noten2[index2++]*65536/FS;
			timer2=noten2[index2++]*(FS/1000);
			if(angle2==0)speed2=0;
			else speed2=255;			
							
			MotorSpeed(speed1,speed2);
		}
		phase1+=angle1; 
		
		if(phase1&0x8000) dir1=FWD;
		else dir1=RWD;
		
		phase2+=angle2; 
		
		if(phase2&0x8000) dir2=FWD;
		else dir2=RWD;
		MotorDir(dir1,dir2);
		
		// sync with Timer2 ( 31250Hz )
		while(!(TIFR&(1<<TOV2)));
		TIFR|=TIFR&(1<<TOV2);
	}
	MotorSpeed(0,0); 
	sei(); // enable all interrupts
}
Ejemplo n.º 12
0
void main(void) {
    Init();
    
    FrontLED(ON);
    int i=0;
    int linienEnde = 0;
    int fast = 200;
    
    unsigned int stData = 0, schwarz = 0;
    //Weißwert festlegen
    unsigned int data[2];
    LineData(data);
    stData = data[LEFT] + data[RIGHT] + 50;
    
    StatusLED(GREEN);
    msleep(3000);
    StatusLED(YELLOW);
    
    //Schwarzwert setzen
    LineData(data);
    schwarz = data[LEFT] + data[RIGHT];
    
    msleep(1000);
    StatusLED(GREEN);
    
    
    MotorSpeed(fast,fast);
    StatusLED(YELLOW);
    
    while(1){
		
		
		LineData(data);
		
		if(data[LEFT] > data[RIGHT]){
			MotorDir(FWD,FREE);
			BackLED(ON,OFF);
			
		}else if(data[RIGHT] > data[LEFT]){
			MotorDir(FREE,FWD);
			BackLED(OFF,ON); ;
		}
		
		if(data[LEFT]+data[RIGHT]>stData){
			StatusLED(RED);
			i++;
		}else{
			i=0;
			StatusLED(YELLOW);
		}
		
		if(i>100){
			linienEnde = 1;
		}
		
		while(linienEnde){
			MotorDir(FWD,RWD);
			LineData(data);
			
			if(data[LEFT]+data[RIGHT] < schwarz+100){
				MotorDir(BREAK,BREAK);
				msleep(50);
				
				while(linienEnde){
					MotorSpeed(80,80);
					MotorDir(RWD,FWD);
					LineData(data);
					
					if(data[LEFT] + data[RIGHT] < schwarz+100){
							linienEnde = 0;
					}
				}
				MotorSpeed(fast,fast);
			}
		}
		
		Kollision();
	}
}
Ejemplo n.º 13
0
/*!
  \brief
  Initialisiert die Hardware: Ports, A/D Wandler, Serielle Schnittstelle, PWM\n
  Die Init Funktion muss von jeden Programm beim Start aufgerufen werden 

  \see
  Die Funktionen Sleep() und Msleep() in time.c werden mit dem hier\n
  eingestellten 36 kHz-Takt betrieben.\n

  \par  Funktionsweise der Zeitfunktionen:
  Msleep() ruft Sleep() auf. In Sleep() wird die globale Variable count36kHz\n
  zur Zeitverzoegerung benutzt. Diese Variable wird jedesmal im Interrupt\n
  SIG_OVERFLOW2 um 1 hochgezaehlt.\n
  Der Interrupt selber wird durch den hier eingestellten Timer ausgeloesst.\n
  Somit ist dieser Timer fuer die Zeitverzoegerung zustaendig.

  \see
  Die globale Variable autoencode fuer die automatische Bearbeitung der\n
  Odometrie-ADC-Wandler wird hier auf FALSE gesetzt.

  \par  Hinweis zur 36 kHz-Frequenz vom Timer 2
  Genau diese Frequenz wird von dem Empfaengerbaustein benoetigt und kann\n
  deshalb nicht geaendert werden.\n
  In der urspruenglichen, vom Hersteller ausgelieferten LIB, war diese\n
  Frequenz allerdings auf 72 kHz eingestellt. Durch eine geschickte\n
  Umkonfigurierung durch waste konnte diese aber halbiert werden.\n
  Sinnvoll ist dies, da der durch diesen Timer2 auch ausgeloesste Timer-\n
  Interrupt dann nur noch die Haelfte an Rechenzeit in Anspruch nimmt.

  \par  Beispiel:
  (Nur zur Demonstration der Parameter/Returnwerte)
  \code
  // Die Init()-Funktion MUSS IMMER zu Anfang aufgerufen werden.
  int main (void)
  {
    int wert;

    Init ();

    while (1)
    (
        // Dein Programm
    }
    return 0;
  }
  \endcode
*****************************************************************************/
void Init (
  void)
{
  /*
    Timer2, zum Betrieb mit der seriellen Schnittstelle, fuer die
    IR-Kommunikation auf 36 kHz eingestellt.
  */
#if defined(__AVR_ATmega168__)
  // fast PWM, set OC2A on compare match, clear OC2A at bottom, clk/1
  TCCR2A = _BV(WGM20) | _BV(WGM21) | _BV(COM2A0) | _BV(COM2A1);
  TCCR2B = _BV(CS20);
  // interrupt on timer overflow
  TIMSK2 |= _BV(TOIE2); 
#else
  // fast PWM, set OC2A on compare match, clear OC2A at bottom, clk/1
  TCCR2 = _BV(WGM20) | _BV(WGM21) | _BV(COM20) | _BV(COM21) | _BV(CS20);
  // interrupt on timer overflow
  TIMSK |= _BV(TOIE2); 
#endif
  // 36kHz carrier/timer
  OCR2  = 0x91;

  /*
    Die serielle Schnittstelle wurde waerend der Boot-Phase schon
    programmiert und gestartet. Hier werden die Parameter auf 2400 1N8 gesetzt.
  */
#if defined(__AVR_ATmega168__)
   UBRR0L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1);
   UBRR0H = (F_CPU/(BAUD_RATE*16L)-1) >> 8;
   UCSR0B = (1<<RXEN0) | (1<<TXEN0);
   UCSR0C = (1<<UCSZ00) | (1<<UCSZ01);
#else
  UBRRH = (((F_CPU/BAUD_RATE)/16)-1)>>8; 	// set baud rate
  UBRRL = (((F_CPU/BAUD_RATE)/16)-1);
  UCSRB = (1<<RXEN)|(1<<TXEN);  // enable Rx & Tx
  UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);  // config USART; 8N1
#endif

  /*
    Datenrichtung der I/O-Ports festlegen. Dies ist durch die Beschaltung der
    Asuro-Hardware nicht aenderbar.
    Port B: Seriell Senden; Richtungsvorgabe Motor links; Takt fuer die
            Geschwindigkeit beider Motoren; Grueneanteil-Status-LED
    Port D: Richtungsvorgabe Motor rechts; Vordere LED;
            Odometrie-LED (Radsensor); Rotanteil-Status-LED
  */
  DDRB = IRTX | RIGHT_DIR | PWM | GREEN_LED;
  DDRD = LEFT_DIR | FRONT_LED | ODOMETRIE_LED | RED_LED;

  /*
    PWM-Kanaele OC1A und OC1B auf 8-Bit einstellen.
    Sie werden fuer die Geschwindigkeitsvorgaben der Motoren benutzt.
  */
  TCCR1A = _BV(WGM10) | _BV(COM1A1) | _BV(COM1B1);
  TCCR1B = _BV(CS11);                 // tmr1-Timer mit MCU-Takt/8 betreiben.

  /*
    Einstellungen des A/D-Wandlers auf MCU-Takt/64
  */
  ADCSRA = _BV(ADEN) | _BV(ADPS2) | _BV(ADPS1);

  /*
    Sonstige Vorbereitungen.
    - Alle LED's ausschalten
    - Motoren stoppen und schon mal auf Vorwaerts einstellen.
    - Globale Variable autoencoder ausschalten.
  */
  ODOMETRIE_LED_OFF;
  FrontLED (OFF);
  BackLED (ON, ON);
  BackLED (OFF, OFF);
  StatusLED (GREEN);

  MotorDir (FWD, FWD);
  MotorSpeed (0, 0);

  autoencode = FALSE;

  Ovr2IntFunc = 0;
  AdcIntFunc = 0;
  /*
    Funktion zum ALLGEMEINEN ZULASSEN von Interrupts.
  */
  sei ();
}
Ejemplo n.º 14
0
void checkData() {
	//-----------------------------------------------vorwärts
	if(ReadData[0] == 'W')
	{
		DirLeft = FWD;
		DirRight = FWD;
		//BackLED(ON,ON);
		//FrontLED(OFF);
		//usart_putc(ReadData[0]);
	}
	//----------------------------------------------rückwärts
	else if (ReadData[0] == 'S')
	{
		DirLeft = RWD;
		DirRight = RWD;
		//BackLED(ON, ON);
		//FrontLED(ON);
		//usart_putc(ReadData[0]);
	}
	//-----------------------------------------------links
	else if (ReadData[0] == 'A')
	{
		DirLeft = RWD;
		DirRight = FWD;
		//BackLED(ON,OFF);
		//FrontLED(OFF);
		/*usart_putc('L');
		usart_puti((int) SollSpeedLeft, 3);*/
		//usart_putc(ReadData[0]);
	}
	//-----------------------------------------------rechts
	else if (ReadData[0] == 'D')
	{
		DirLeft = FWD;
		DirRight = RWD;
		//BackLED(OFF, ON);
		//FrontLED(OFF);
		/*usart_putc('R');
		usart_puti((int) SollSpeedRight, 3);*/
		//usart_putc(ReadData[0]);
	}
	//-----------------------------------------------Speed
	else if (ReadData[0] == 'G')
	{
		SollSpeedLeft  = (char) atol(ReadData +1);
		int i=1;
		while (ReadData[i] != 'Z')
		{
			i++;
		}
		
		SollSpeedRight = (char) atol(ReadData +i+1);
		IstSpeedLeft = SollSpeedLeft; 
		IstSpeedRight = SollSpeedRight; 
		
		/*usart_putc(ReadData[0]);
		usart_putc('L');
		usart_puti((int) SollSpeedLeft, 3);
		usart_putc('R');
		usart_puti((int) SollSpeedRight, 3);
		usart_puts("\r\n");*/

	}
	//-------------------------------------------------Regler
	else if (ReadData[0] == 'R')
	{
		KP = (char) atol(ReadData +1);
		int i=1;
		while (ReadData[i] != 'Z')
		{
			i++;
		}
		KI = (char) atol(ReadData +i+1);
		while (ReadData[i] != 'Y')
		{
			i++;
		}
		KD = (char) atol(ReadData +i+1);

		
		/*usart_putc(ReadData[0]);
		usart_putc('P');
		usart_puti((int) rpm_p, 3);
		usart_putc('I');
		usart_puti((int) rpm_i, 3);
		usart_putc('D');
		usart_puti((int) rpm_d, 3);
		usart_puts("\r\n");*/

	}
	//------------------------------------------------keine Zeichen empfangen
	else if (ReadData[0] == 'X')
	{
		DirLeft = FREE;
		DirRight = FREE;
		FrontLED(OFF);
		BackLED(OFF, OFF);
		//StatusLED(YELLOW);
	}
	//-----------------------------------------------Handshake
	else if (ReadData[0] == 'h')
	{
		usart_puts("Handshake \r\n");
		usart_puts("\r\n");
	}
}