Exemplo n.º 1
0
	/*! Zeigt den internen Status der Sensoren mit den LEDs an */
	void show_sensors(void){
		uint8 led=0x00;
		led_t * status = (led_t *)&led;
		#ifdef TEST_AVAILABLE_ANALOG
			(*status).rechts	= (sensDistR >> 9) & 0x01;
			(*status).links		= (sensDistL >> 9) & 0x01;
			(*status).rot		= (sensLineL >> 9) & 0x01;
			(*status).orange	= (sensLineR >> 9) & 0x01;
			(*status).gelb		= (sensLDRL >> 9) & 0x01;
			(*status).gruen		= (sensLDRR >> 9) & 0x01;
			(*status).tuerkis	= (sensBorderL >> 9) & 0x01;
			(*status).weiss		= (sensBorderR >> 9) & 0x01;
		#endif
		#ifdef TEST_AVAILABLE_DIGITAL
			(*status).rechts	= sensEncR  & 0x01;
			(*status).links		= sensEncL  & 0x01;
			(*status).rot		= sensTrans & 0x01;
			(*status).orange	= sensError & 0x01;
			(*status).gelb		= sensDoor  & 0x01;
			(*status).gruen		= (sensMouseDX >>1)  & 0x01;
			(*status).tuerkis	= (sensMouseDY >>1) & 0x01;
			(*status).weiss		= RC5_Code & 0x01;
		#endif
				
		LED_set(led);
	}
Exemplo n.º 2
0
/*! 
 * Schaltet einzelne LEDs aus
 * andere werden nicht beeinflusst
 * @param LED Bitmaske der anzuschaltenden LEDs
 */
void LED_off(uint8 LED){
	led &= ~LED;
	LED_set(led);
}
Exemplo n.º 3
0
/*! 
 * Schaltet einzelne LEDs an
 * andere werden nicht beeinflusst
 * @param LED Bitmaske der anzuschaltenden LEDs
 */
void LED_on(uint8 LED){
	led |= LED;
	LED_set(led);
}
Exemplo n.º 4
0
Arquivo: LED.c Projeto: cmtm/microP
void LED_setAll(LED_state s) {
	LED_set(s,s,s,s);
}
Exemplo n.º 5
0
Arquivo: LED.c Projeto: cmtm/microP
void LED_set_ar(LED_state* ss) {
	LED_set(ss[0], ss[1], ss[2], ss[3]);
}
int main()
{

	volatile int temp;
	volatile int rand_no;
	int x;

	hardware_init();

	FRDM_KL26Z_LEDs_Configure();

	FRDM_KL26Z_SW2_Configure(0,FALLING_EDGE);
	FRDM_KL26Z_SW1_Configure(PULLUP,FALLING_EDGE);

	PIT_Configure_interrupt_mode(0.01);

	NVIC_ClearPendingIRQ(31);
	NVIC_EnableIRQ(31);

	LED_set(GREEN,OFF);

	while(1)
	{
		switch(currentstate)
		{
		case INIT:
			sw_count=0;
			sw2_count=0;
			PRINTF("SW1 to start");
			while(sw_count==0)
			{}
			LED_set(GREEN,OFF);
			currentstate = PLAY;
			break;
		case PLAY:
			PRINTF("when led on, press sw2");
			srand(timer_tick);
			rand_no = rand()%5000;
			temp=timer_tick;

			while((timer_tick-temp<rand_no) && (sw2_count==0) )
			{}
			if(sw2_count>0)
			{
				currentstate=INIT;
				break;
			}
			LED_set(GREEN,ON);
			temp=timer_tick;
			while(((sw2_count==0)&&timer_tick-temp<5000))
			{}
			if(timer_tick-temp>=5000)
			{
				PRINTF("too slow");
				currentstate=INIT;
			}
			else
			{
				PRINTF("reaction time: %d MSec \n" ,(timer_tick-temp));
				LED_set(GREEN,OFF);
				currentstate = INIT;
			}
			break;
		default:
			break;

		}
	}

	return 0;
}
Exemplo n.º 7
0
/*! 
 * Hauptprogramm des Bots. Diese Schleife kuemmert sich um seine Steuerung.
 */
	int main (void){

#endif

#ifdef PC

/*! 
 * Hauptprogramm des Bots. Diese Schleife kuemmert sich um seine Steuerung.
 */
 	int main (int argc, char *argv[]){

		int ch;	
		int start_server = 0;	/*!< Wird auf 1 gesetzt, falls -s angegeben wurde */
		char *hostname = NULL;	/*!< Speichert den per -t uebergebenen Hostnamen zwischen */

		// Die Kommandozeilenargumente komplett verarbeiten
		while ((ch = getopt(argc, argv, "hst:")) != -1) {
			switch (ch) {
			case 's':
				// Servermodus [-s] wird verlangt
				start_server = 1;
				break;
			case 't':
				// Hostname, auf dem ct-Sim laeuft wurde 
				// uebergeben. Der String wird in hostname
				// gesichert.
				{
					const int len = strlen(optarg);
					hostname = malloc(len + 1);
					if (NULL == hostname)
						exit(1);
					strcpy(hostname, optarg);
				}
				break;
			case 'h':
			default:
				// -h oder falscher Parameter, Usage anzeigen
				usage();
			}
		}
		argc -= optind;
		argv += optind;
		
	if (start_server != 0)    // Soll der TCP-Server gestartet werden?
    {
    	printf("ARGV[0]= %s\n",argv[1]);
       tcp_server_init();
       tcp_server_run();
    } else {
    	printf("c't-Bot\n");
        if (hostname)
            // Hostname wurde per Kommandozeile uebergeben
            tcp_hostname = hostname;
        else {
            // Der Zielhost wird per default durch das Macro IP definiert und
            // tcp_hostname mit einer Kopie des Strings initialisiert.
            tcp_hostname = malloc(strlen(IP) + 1);
            if (NULL == tcp_hostname)
                exit(1);
            strcpy(tcp_hostname, IP);
        }
    }
    
    
#endif
	#ifdef  TEST_AVAILABLE_MOTOR
		uint16 calls=0;	/*!< Im Testfall zaehle die Durchlaeufe */
	#endif

	#ifdef LOG_AVAILABLE
		printf("Logging is on (");
		#ifdef LOG_UART_AVAILABLE
				printf("UART");	
		#endif
	
		#ifdef LOG_CTSIM_AVAILABLE
				printf("CTSIM");	
		#endif
	
		#ifdef LOG_DISPLAY_AVAILABLE
				printf("DISPLAY");	
		#endif
		
		#ifdef LOG_STDOUT_AVAILABLE
				printf("STDOUT");	
		#endif
		printf(")\n");			
	#else
			printf("Logging is off!\n ");
	#endif	


	init();		

	
	#ifdef WELCOME_AVAILABLE
		display_cursor(1,1);
		display_printf("c't-Roboter");
		LED_set(0x00);
		#ifdef LOG_AVAILABLE
			LOG_DEBUG(("Hallo Welt!"));
		#endif	
	#endif
	
	#ifdef TEST_AVAILABLE_COUNTER
		display_screen=2;

	 	resets=eeprom_read_byte(&resetsEEPROM)+1;
	    eeprom_write_byte(&resetsEEPROM,resets);
	    /* Lege den Grund für jeden Reset im EEPROM ab */	
	    eeprom_write_byte(&resetInfoEEPROM+resets,reset_flag);
	#endif	
	/*! Hauptschleife des Bot */
	
	for(;;){
		#ifdef MCU
			bot_sens_isr();
		#endif
		#ifdef TEST_AVAILABLE
			show_sensors();
		#endif

		// Testprogramm, dass den Bot erst links, dann rechtsrum dreht
		#ifdef  TEST_AVAILABLE_MOTOR
			calls++;
			if (calls == 1)
				motor_set(BOT_SPEED_SLOW,-BOT_SPEED_SLOW);
			else if (calls == 501)
				motor_set(-BOT_SPEED_SLOW,BOT_SPEED_SLOW);
			else if (calls== 1001)
				motor_set(BOT_SPEED_STOP,BOT_SPEED_STOP);
			else
		#endif
		// hier drin steckt der Verhaltenscode
		#ifdef BEHAVIOUR_AVAILABLE
			if (sensors_initialized ==1 )
				bot_behave();
			else
				printf("sensors not initialized\n");
		#endif
			
		#ifdef MCU
			#ifdef BOT_2_PC_AVAILABLE
//				static int16 lastTimeCom =0;

				bot_2_pc_inform();				// Den PC ueber Sensorern und aktuatoren informieren
				bot_2_pc_listen();				// Kommandos vom PC empfangen
					
//				if (timer_get_s() != lastTimeCom) {	// sollte genau 1x pro Sekunde zutreffen
//					lastTimeCom = timer_get_s();		
					
//				}
			#endif
		#endif
		
		#ifdef LOG_AVAILABLE
			//LOG_DEBUG(("LOG TIME %d s", timer_get_s()));
		#endif	
		
		// Alles Anzeigen
		#ifdef DISPLAY_AVAILABLE
			display();
		#endif
		#ifdef PC
			wait_for_time(100000);
		#endif
		#ifdef MCU
//			delay(10);
		#endif
	}
	
	/*! Falls wir das je erreichen sollten ;-) */
	return 1;	
}