Ejemplo n.º 1
0
void PrintString (void) {
	/* Printing takes a long time. Don't do it while buzzing because it will introduce long pauses. */ 
	OS_Wait(S_BUZZ_OUTPUT); 
	sys_print_lcd((char *)OS_GetParam()); 
	OS_Signal(S_BUZZ_OUTPUT); 	
	OS_Signal(S_LCD); 
}
Ejemplo n.º 2
0
//------------------------------------------------------------------------
// getchar for apps
//------------------------------------------------------------------------
char sh_getchar()
{
	FIFO f = OS_GetParam();
	int val;
	while(!OS_Read(f, &val)) 
		OS_Yield();
	return (char)val;
}
Ejemplo n.º 3
0
void WriteA (void) {
	FIFO f = (FIFO)OS_GetParam();

	OS_Write(f,(int)'J'); 
	OS_Yield(); 
	OS_Write(f,(int)'o'); 
	OS_Yield(); 
	OS_Write(f,(int)'e'); 
	OS_Signal(S_LOGO); 
}
Ejemplo n.º 4
0
void Write1 (void) {
	FIFO f = (FIFO)OS_GetParam(); 
	
	OS_Wait(S_LOGO); 
	OS_Write(f,(int)'l'); 
	OS_Yield();
	OS_Write(f,(int)'O'); 
	OS_Yield();
	OS_Write(f,(int)'S'); 
	OS_Signal(S_LOGO);
}
Ejemplo n.º 5
0
/* 
Device: 
	Scheduling period = 1/frequency of sound. 
	Parameter (l) = number of oscillations to produce. 
*/ 
void Buzz(void) { 
	int i,l; 
	
	l = OS_GetParam(); 
	
	/* 
		Release the cpu each time the speaker bit is 
		altered, to allow the device process period to determine the frequency. 
	*/ 
	for(i = 0; i < l; i++) {	
		Ports[M6811_PORTA] SET_BIT(BIT3); 
		OS_Yield(); 
		Ports[M6811_PORTA] CLR_BIT(BIT3); 
		OS_Yield(); 
	}
	OS_Signal(S_BUZZ); 
}
Ejemplo n.º 6
0
void PrintFIFO (void) {
	FIFO f = (FIFO)OS_GetParam(); 
	char *s = "               "; 
	int i; 
	int fi; 
	
	i = 0; 
	while(i < 6) {
		if(OS_Read(f,&fi)) {
			s[i++] = (char)fi; 
		} 
		else {
			OS_Yield(); 
		}
	}
	OS_Wait(S_LCD); 
	OS_Create(PrintString, (int)s, PERIODIC, 50); 
}
Ejemplo n.º 7
0
void ReadLightSensors(void) {
	FIFO f = (FIFO)OS_GetParam(); 
	int l, r;
	
	while (1) {
		l = 0; 
		r = 0; 
		OS_Wait(S_PORTE); 
		/* Activate A/D Converter...makes pins on Port E analog. */ 
		Ports[M6811_OPTION] SET_BIT(BIT7); 
		/* Delay at least 100 microseconds */ 
		OS_Yield(); 
		
		/* Start converting the right photocell */ 
		Ports[M6811_ADCTL] = 0; 
		/* Wait for conversion to complete. */ 
		while (!(Ports[M6811_ADCTL] & BIT7)) {
			OS_Yield(); 
		}
		r = Ports[M6811_ADR1]; 
		
		/* Start converting the left photocell */ 
		Ports[M6811_ADCTL] = 1; 
		/* Wait for conversion to complete. */ 
		while (!(Ports[M6811_ADCTL] & BIT7)) {
			OS_Yield(); 
		}
		l = Ports[M6811_ADR1];	
		OS_Signal(S_PORTE); 
		
		if (l > 100) {
			OS_Wait(S_BUZZ_FIFO);
			OS_Write(f,'l'); 
		}
		
		if (r > 100) {
			OS_Wait(S_BUZZ_FIFO);
			OS_Write(f,'r'); 
		}
		
		
		OS_Yield();
	}
}
Ejemplo n.º 8
0
void ReadMicrophone(void) {
	FIFO f = (FIFO)OS_GetParam(); 
	int s;
	
	while (1) {
		s = 0; 
		
		OS_Wait(S_PORTE); 
		/* Activate A/D Converter...makes pins on Port E analog. */ 
		Ports[M6811_OPTION] SET_BIT(BIT7); 
		/* Delay at least 100 microseconds */ 
		OS_Yield(); 
		/* Don't listen while buzzing. */ 
		OS_Wait(S_BUZZ_OUTPUT);
		/* Start converting the microphone. */ 
		Ports[M6811_ADCTL] = 2; 
		OS_Signal(S_BUZZ_OUTPUT);
		/* Wait for conversion to complete. */ 
		while (!(Ports[M6811_ADCTL] & BIT7)) {
			OS_Yield(); 
		}
		s = Ports[M6811_ADR1]; 
		OS_Signal(S_PORTE); 
		
		/* Rectify the sound sample around 128. */ 
		if (s >= 128) { s -= 128; }
		else          { s = 128 - s; }
		
		if (s > 35) {
			OS_Wait(S_BUZZ_FIFO);
			OS_Write(f,'s'); 
		}
		
		
		OS_Yield();
	}
}
Ejemplo n.º 9
0
/* Device: > 500ms */ 
void FIFOBuzz(void) {
	FIFO f;
	int fi; 
	unsigned int i; 

	f = (FIFO)OS_GetParam(); 
	
	while (1) {
		if(OS_Read(f,&fi)) {
			/* Fifo for charactar output */
			OS_Wait(S_BUZZ_OUTPUT); 
			switch((char)fi) {
				case 'a': dot(); dash(); break; 
				case 'b': dash(); dot(); dot(); dot(); break; 
				case 'c': dash(); dot(); dash(); dot(); break; 
				case 'd': dash(); dot(); dot(); break;
				case 'e': dot(); break; 
				case 'f': dot(); dot(); dash(); dot(); break; 
				case 'g': dash(); dash(); dot(); break; 
				case 'h': dot(); dot(); dot(); dot(); break; 
				case 'i': dot(); dot(); break; 
				case 'j': dot(); dash(); dash(); dash(); break; 
				case 'k': dash(); dot(); dash(); break; 
				case 'l': dot(); dash(); dot(); dot(); break; 
				case 'm': dash(); dash(); break; 
				case 'n': dash(); dot(); break; 
				case 'o': dash(); dash(); dash(); break; 
				case 'p': dot(); dash(); dash(); dot(); break; 
				case 'q': dash(); dash(); dot(); dash(); break; 
				case 'r': dot(); dash(); dot(); break; 
				case 's': dot(); dot(); dot(); break; 
				case 't': dash(); break; 
				case 'u': dot(); dot(); dash(); break; 
				case 'v': dot(); dot(); dot(); dash(); break; 
				case 'w': dot(); dash(); dash(); break; 
				case 'x': dash(); dot(); dot(); dash(); break; 
				case 'y': dash(); dot(); dash(); dash(); break; 
				case 'z': dash(); dash(); dot(); dot(); break; 
				case '1': dot(); dash(); dash(); dash(); dash(); break; 
				case '2': dot(); dot(); dash(); dash(); dash(); break; 
				case '3': dot(); dot(); dot(); dash(); dash(); break; 
				case '4': dot(); dot(); dot(); dot(); dash(); break; 
				case '5': dot(); dot(); dot(); dot(); dot(); break; 
				case '6': dash(); dot(); dot(); dot(); dot(); break; 
				case '7': dash(); dash(); dot(); dot(); dot(); break; 
				case '8': dash(); dash(); dash(); dot(); dot(); break; 
				case '9': dash(); dash(); dash(); dash(); dot(); break; 
				case '0': dash(); dash(); dash(); dash(); dash(); break; 
				default: OS_Yield(); break; 
			}
			OS_Signal(S_BUZZ_FIFO); 
			/* Wait for the speaker to settle...prevents the microphone from hearing it. */ 
			OS_Yield();
			/* When all buzz processes have finished, signal that output is complete. */ 
			OS_Wait(S_BUZZ); 
			OS_Signal(S_BUZZ_OUTPUT); 
			OS_Signal(S_BUZZ); 
		}
		OS_Yield();
	}
}
Ejemplo n.º 10
0
void ReadBumpers(void) {
	FIFO f = (FIFO)OS_GetParam(); 
	int b;
	
	while (1) {
		b = 0; 
		OS_Wait(S_PORTE); 
		/* Activate A/D Converter...makes pins on Port E analog. */ 
		Ports[M6811_OPTION] SET_BIT(BIT7); 
		/* Delay at least 100 microseconds */ 
		OS_Yield(); 
		/* Start converting the bumpers. */ 
		Ports[M6811_ADCTL] = 3; 
		/* Wait for conversion to complete. */ 
		while (!(Ports[M6811_ADCTL] & BIT7)) {
			OS_Yield(); 
		}
		b = Ports[M6811_ADR1]; 
		OS_Signal(S_PORTE); 
	
		/* 
			Move based on the bumper values. (b)
		*/ 
		/* Turn Left */ 
		if (b > 3 && b < 7) {
			Ports[M6811_DDRD]  = 0xFF;
			Ports[M6811_PORTD] CLR_BIT(BIT5); // Reverse Right 			

			Ports[M6811_PORTA] CLR_BIT(BIT6); // Left
			Ports[M6811_PORTA] SET_BIT(BIT5); // Right
			
			//OS_Write(f,1); 
		}
		/* Turn Right */ 
		else if (b > 23 && b < 26) {
			Ports[M6811_DDRD]  = 0xFF;
			Ports[M6811_PORTD] CLR_BIT(BIT4); // Reverse Left

			Ports[M6811_PORTA] SET_BIT(BIT6); // Left
			Ports[M6811_PORTA] CLR_BIT(BIT5); // Right

			//OS_Write(f,2); 
		}
		/* Move Ahead */ 
		else if (b > 67 && b < 70) {
			Ports[M6811_DDRD]  = 0xFF;
			Ports[M6811_PORTD] = 0xFF; // Forward
			
			Ports[M6811_PORTA] SET_BIT(BIT6); // Left
			Ports[M6811_PORTA] SET_BIT(BIT5); // Right
						
			//OS_Write(f,3); 
		}
		/* Stop */ 
		else {
			Ports[M6811_PORTA] CLR_BIT(BIT6); 
			Ports[M6811_PORTA] CLR_BIT(BIT5); 
		
			//OS_Write(f,4);  
		}
		OS_Yield();
	}
}