Exemplo n.º 1
0
void I2C_EE_Upload(void)
{
	int percentage;
	uint8_t byte;
	unsigned int LEDbackup;
	int i;
	
	LEDbackup=LEDbyte;
	clear();
	write('S');
	write('e');
	write('n');
	write('d');
	write('i');
	write('n');
	write('g');
	
	for (i=CONFIGLENGTH;i<EEPROM_BYTES;i++)
	{
		if((i%100)==0){
		setCursor(0,1);
		percentage = (100*i)/(EEPROM_BYTES-CONFIGLENGTH);
			writenumber(percentage);
//		write('0'+(i/(EEPROM_BYTES-CONFIGLENGTH)*100)/100);
//		write('0'+((i/(EEPROM_BYTES-CONFIGLENGTH)*100)/10)%10);
//		write('0'+(i/(EEPROM_BYTES-CONFIGLENGTH)*100)%10);
		write('%');
		write(' ');
		write(' ');}
		LEDbyte = LEDGripple[(i/80)%10];
		setLEDS();
		I2C_EE_BufferRead(&byte, i, 1);
		UART_send_byte(byte);
	}
		clear();

	delay_ms(2000);
	clear();
	standby();

	LEDbyte=LEDbackup;
	setLEDS();
}
Exemplo n.º 2
0
void I2C_EE_Erase(void)
{
	int percentage;
	unsigned int LEDbackup;
	int i;
	
	clear();
	write('E');
	write('R');
	write('A');
	write('S');
	write('I');
	write('N');
	write('G');
	
	for (i=CONFIGLENGTH;i<EEPROM_BYTES;i++)
	{
I2C_EE_BufferWrite(blank, i,  1);

//		I2C_EE_ByteWrite(blank, i);	
		
		if((i%100)==0){
		setCursor(0,1);
		percentage = (100*i)/(EEPROM_BYTES-CONFIGLENGTH);
		writenumber(percentage);
		write('%');
		write(' ');
		write(' ');}
		LEDbyte = LEDRripple[(i/80)%10];
		setLEDS();
	}
		clear();
	complete();
	delay_ms(2000);
	clear();
	standby();

	LEDbyte=LEDbackup;
	setLEDS();

}
Exemplo n.º 3
0
int keyb_handle(){
	short inp = inb(0x60);
	char keys[2];
	switch( inp )
	{
		case 0x0e : 	
				keys[0] = 8;
				keys[1] = 0;	
				handleinput(keys);
		
	}
	if (inp-16 < 43) {
		static const char keybmap[44]={'q','w','e','r','t','y','u','i','o','p',0,0,1,0,'a','s','d','f','g','h','j','k','l',0,0,0,0,0,'z','x','c','v','b','n','m',0,0,0,0,0,0,' '};
		keys[1] = 0;
		keys[0] = keybmap[inp-16];
		handleinput(keys);	
	}
	if (inp-16 > 43 && inp-16 < 100) {
		writenumber(inp);
	}
	return 1;
}
Exemplo n.º 4
0
void COXml::serial(double &b)
{
	writenumber( b, "%f", 128 );
}
Exemplo n.º 5
0
void COXml::serial(float &b)
{
	writenumber( (double)b, "%f", 128 );
}
Exemplo n.º 6
0
void COXml::serial(sint64 &b)
{
	writenumber( b, "%"NL_I64"d", 20 );
}
Exemplo n.º 7
0
void COXml::serial(sint32 &b)
{
	writenumber( b, "%d", 11 );
}
Exemplo n.º 8
0
void COXml::serial(uint32 &b)
{
	writenumber( b, "%u", 10 );
}
Exemplo n.º 9
0
void COXml::serial(sint16 &b)
{
	writenumber( b, "%hd", 6 );
}
Exemplo n.º 10
0
void COXml::serial(uint16 &b)
{
	writenumber( b, "%hu", 5 );
}
Exemplo n.º 11
0
void COXml::serial(sint8 &b)
{
	writenumber( (sint16)b, "%hd", 4 );
}
Exemplo n.º 12
0
void COXml::serial(uint8 &b)
{
	// Write the number
	writenumber( (uint16)b,"%hu", 3 );
}
Exemplo n.º 13
0
//Main function (execution starts here after startup file)
int main(void)
{
	int i;
	int e;
	uint16_t temperature;

	init_GPIO_pins();
	
	//Short delay during which we can communicate with MCU via debugger even if later user code causes error such as sleep state with no wakeup event that prevents debugger interface working
	//THIS MUST COME BEFORE ALL USER CODE TO ENSURE CHIPS CAN BE REPROGRAMMED EVEN IF THEY GET STUCK IN A SLEEP STATE LATER
	for (i = 0; i < 1000000; i++)
	{
		LED_on();
	}
	
	GPIO_Init_Mode(GPIOA,GPIO_Pin_0,GPIO_Mode_IN_FLOATING); //User button.
	GPIO_Init_Mode(GPIOC,GPIO_Pin_11,GPIO_Mode_IN_FLOATING); //Accelerometer interrupt.
	delay_init();
	LED_off();
	LCDINIT();
	home();
	clear();
	display(); //Surely some of these can be commented out.
	noCursor();
	noBlink();

	standby();

	UART_init();
	humidity_init();
	ADC_init();
	I2C_EEPROM();
	I2C_ACCEL_INIT();
	I2C_EE_LoadConfig();
	logging_timer_init();
	
//	I2C_EE_BufferWrite(Test_Buffer, EEPROM_WriteAddress1, 100);
//I2C_EE_BufferRead(buffer, 0, 100);

	/*while(1){
		if(LEDbyte==512){LEDbyte=1;}
		else {LEDbyte=LEDbyte<<1;}
		setLEDS();
		
	setCursor(0,1);
	temperature=getTemperature();
	writenumber( temperature/100);
	write('.');
	writenumber((temperature/10)%10);
		write(' ');

		write(0xDF);
	write('C');
	setCursor(0,0);
	writenumber(readhumidity(24)); //Needs real temperature
	write(' ');
	write('%');
	write('R');
	write('H');
		delay_ms(50);
		
		check_and_process_received_command();
		
	}*/
	//currentstate=UPLOADING;

	while(1)
	{
		switch (currentstate){
			
		case WAITING:
			if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)) //Polling is probably ok here, since the loop will be very very fast.
			{
				currentstate=LOGGING;
				clear();
				write('S');
				write('t');
				write('a');
				write('r');
				write('t');
				write('i');
				write('n');
				write('g');
				delay_ms(2000);
				clear();
				I2C_EE_StartLog();
				TIM4->CNT=0;
			}
			break;

		case LOGGING:
			if (GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)){currentstate=WAITING;I2C_EE_FinishLog();break;} //Polling is probably ok here, since the loop will be very very fast.
			LEDbyte|= 1<<8;
			setLEDS();
			if (TIM_GetFlagStatus(TIM3, TIM_FLAG_Update) != RESET)
			{
				TIM_ClearFlag(TIM3, TIM_IT_Update);
				temperature = getTemperature();
				LogBuffer[0]=(temperature>>8)&0xFF;
				LogBuffer[1]=temperature&0xFF;
				LogBuffer[2]=readhumidity(LogBuffer[0]);
				I2C_ACCEL_READ();
				I2C_EE_Log(LogBuffer);
				setCursor(0,1);
				writenumber(temperature/100);
				write('.');
				writenumber(temperature%100);
				write(' ');
				write(0xDF);
				write('C');
				write(' ');
				setCursor(0,0);
				writenumber(25); //Needs real temperature
				write(' ');
				write('%');
				write('R');
				write('H');
				write(' ');
				LEDbyte&= ~(1<<8);
				setLEDS();
			}
			break;
		
		case UPLOADING:
			currentstate=WAITING;
			I2C_EE_Upload();
			break;
		
		case ERASING:
			currentstate=WAITING;
			I2C_EE_Erase();
			break;
		
		case STREAMING:
			if (TIM_GetFlagStatus(TIM3, TIM_FLAG_Update) != RESET)
			{
				TIM_ClearFlag(TIM3, TIM_IT_Update);
				temperature = getTemperature();
				LogBuffer[0]=(temperature>>8)&0xFF;
				LogBuffer[1]=temperature&0xFF;
				LogBuffer[2]=readhumidity(LogBuffer[0]);
				I2C_ACCEL_READ();
//				I2C_EE_Log(LogBuffer);
				for (e=0;i<ENTRYBYTES;i++)
				{
					UART_send_byte(LogBuffer[e]);
				}
				setCursor(0,1);
				writenumber(temperature/100);
				write('.');
				writenumber(temperature%100);
				write(' ');
				write(0xDF);
				write('C');
				write(' ');
				setCursor(0,0);
				writenumber(25); //Needs real temperature
				write(' ');
				write('%');
				write('R');
				write('H');
				write(' ');
				LEDbyte&= ~(1<<8);
				setLEDS();
			}
		break;
		}