示例#1
0
/** Power on and prepare for general usage.
 * This will activate the device and take it out of sleep mode (which must be done
 * after start-up). This function also sets both the accelerometer and the gyroscope
 * to their most sensitive settings, namely +/- 2g and +/- 250 degrees/sec, and sets
 * the clock source to use the X Gyro for reference, which is slightly better than
 * the default internal clock source.
 */
void MPU6050_Initialize() 
{
  
    MPU6050_SetSleepModeStatus(DISABLE);
    //MPU6050_WriteBit(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_DEVICE_RESET_BIT, DISABLE);
    delay(100);
    MPU6050_SetClockSource(MPU6050_CLOCK_PLL_XGYRO);
    delay(100);
    MPU6050_Config(0x01);
    delay(100);
    //MPU6050_WriteBits(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_SMPLRT_DIV, 7, 8, 0x00);
    //delay(100);
    MPU6050_SetFullScaleGyroRange(MPU6050_GYRO_FS_2000);
    delay(100);
    MPU6050_SetFullScaleAccelRange(MPU6050_ACCEL_FS_16);
    delay(100); 
    MPU6050_WriteBit(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_INT_PIN_CFG, 4, ENABLE);
    //delay(100); 
    MPU6050_WriteBit(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_INT_ENABLE, 0, ENABLE);
    //delay(100);  
    //MPU6050_WriteBits(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_SIGNAL_PATH_RESET, 2, 3, 0x07);
    //delay(100);

    //MPU6050_enablemagnetometer();
    //delay(100);

   
 // MPU6050_WriteByte(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_PWR_MGMT_1, 1<<7);//reset the whole module first
/*    MPU6050_WriteBit(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_DEVICE_RESET_BIT, DISABLE);
    delay(50);  //wait for 50ms for the gyro to stable

    MPU6050_WriteByte(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_PWR_MGMT_1, MPU6050_CLOCK_PLL_ZGYRO);//PLL with Z axis gyroscope reference
    MPU6050_WriteByte(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_CONFIG, 0x00);  //DLPF_CFG = 0: Fs=8khz; bandwidth=256hz
    
    MPU6050_WriteByte(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_SMPLRT_DIV, 0x00);  //1000Hz sample rate ~ 2ms
 
    MPU6050_WriteByte(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_GYRO_CONFIG, MPU6050_GYRO_FS_2000); //Gyro full scale setting
 
    MPU6050_WriteByte(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_ACCEL_CONFIG, MPU6050_ACCEL_FS_16); //Accel full scale setting
 
    MPU6050_WriteByte(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_INT_PIN_CFG, 1<<4); //interrupt status bits are cleared on any read operation
 
    MPU6050_WriteByte(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_INT_ENABLE, 1<<0);  //interupt occurs when data is ready. The interupt routine is in the receiver.c file.
 
    MPU6050_WriteByte(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_SIGNAL_PATH_RESET, 0x07);//reset gyro and accel sensor
    
*/    
}
示例#2
0
  void MPU6050_enablemagnetometer()  
{
    //MPU6050_WriteBits(MPU6050_DEFAULT_ADDRESS,0x24, 7,8, 0x40);
    //delay(100);
    MPU6050_WriteBits(MPU6050_DEFAULT_ADDRESS,0x37, 7,8, 0x32);
    delay(100);
    MPU6050_WriteBit(MPU6050_DEFAULT_ADDRESS, 0x6A, 5,DISABLE);
    delay(100);
    MPU6050_WriteBits(AK8975_I2C_ADDR,AK8975_CNTL, 3,4, 0x0F);
    delay(100);
    MPU6050_WriteBits(AK8975_I2C_ADDR,AK8975_CNTL, 3,4, 0x0F);
    delay(100);
    

    MPU6050_WriteBits(AK8975_I2C_ADDR,AK8975_CNTL, 3,4, 0x0F);
    delay(100);
    MPU6050_WriteBits(AK8975_I2C_ADDR,AK8975_CNTL, 3,4, 0x00);
    delay(100);
    MPU6050_WriteBits(AK8975_I2C_ADDR,AK8975_CNTL, 3,4, 0x01);
    delay(100);

}
示例#3
0
/** Set sleep mode status.
 * @param enabled New sleep mode enabled status
 * @see MPU6050_GetSleepModeStatus()
 * @see MPU6050_RA_PWR_MGMT_1
 * @see MPU6050_PWR1_SLEEP_BIT
 */
void MPU6050_SetSleepModeStatus(FunctionalState NewState)
{
    MPU6050_WriteBit(MPU6050_DEFAULT_ADDRESS, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_SLEEP_BIT, NewState);
}
示例#4
0
void Clock( void * pvParameters)
{

	long int z=0;
	WM_HWIN hWinplan=0,hWinBase;
	GUI_PID_STATE stat;
	hWinclock = Createclock();
	FRESULT f=0;
	FIL fsrc;
	FATFS fs;
	int tre=0;
	u16 data[6];
	u8 dzien=1;
	if(Menu_Handle!=NULL)vTaskDelete(Menu_Handle);
	Menu_Handle=NULL;

	while(1)
	{
		if(GUI_PID_IsPressed() && hWinplan==0)
		{
//			if(sec2>400)
//			{
////				hWinplan=Createplan();
//				xTaskCreate(Menu,(char const*)"Menu",512,NULL,6,&Menu_Handle);

//			}
		}
		else
		{
			sec2=0;
		}
		if(wake)
		{
			  while(1){CPU_OFF;}
		}
		else
		{
			  CPU_ON;
		}

		if(vol_up)
		{
//			WM_HWIN hFrame = FRAMEWIN_CreateEx(0, 0, 320, 240, WM_HBKWIN, WM_CF_HIDE, 0, 0, "Notepad", 0);
//			GUI_MEMDEV_ShiftInWindow(hWinclock,500,GUI_MEMDEV_EDGE_LEFT);
//			WM_MOTION_SetMovement(hWinclock,GUI_COORD_X,240,240);
//			hWinViewport = WM_CreateWindow(0, 0, 320, 240 ,WM_HBKWIN, _cbDummy, 0);
//			hWinplan=Createplan();
//			hWinplan=CreateAlarm();
		}
		else if(vol_down)
		{
			USART_puts("TTM:RST-SYSTEMRESET");
			MPU6050_WriteBit(MPU6050_RA_INT_PIN_CFG , 7, 1);
			hWinplan=Createplan();
		}

		char number[3];
		  taskENTER_CRITICAL();
		  AB0805_getDateTime24(0, &month, &day, &hours, &minutes, &seconds);
		  weekday=AB0805_getDayOfWeek();
		  taskEXIT_CRITICAL();
//		  hours = seconds;
		WM_HWIN sec = WM_GetDialogItem(hWinclock, ID_TEXT_5);
		sprintf(number,"%0.2d",seconds);
		TEXT_SetText(sec,number);
		TEXT_SetTextColor(sec,col_gui);
		WM_HWIN date = WM_GetDialogItem(hWinclock, ID_TEXT_4);
		sprintf(number,"%0.2d",day );
		strcat(number,".");
		TEXT_SetText(date,number);
		WM_HWIN mont = WM_GetDialogItem(hWinclock, ID_TEXT_7);
		sprintf(number,"%0.2d", month);
		TEXT_SetTextColor(mont,col_gui);
		TEXT_SetText(mont,number);
		TEXT_SetTextColor(date,col_gui);
		WM_HWIN weekd = WM_GetDialogItem(hWinclock, ID_TEXT_3);
		TEXT_SetTextColor(weekd,col_gui);
		switch(weekday)
		{
			case 1:
			{
				TEXT_SetText(weekd,"Monday");
				break;
			}
			case 2:
			{
				TEXT_SetText(weekd,"Tuesday");
				break;
			}
			case 3:
			{
				TEXT_SetText(weekd,"Wednesday");
				break;
			}
			case 4:
			{
				TEXT_SetText(weekd,"Thursday");
				break;
			}
			case 5:
			{
				TEXT_SetText(weekd,"Friday");
				break;
			}
			case 6:
			{
				TEXT_SetText(weekd,"Saturday");
				break;
			}
			case 7:
			{
				TEXT_SetText(weekd,"Sunday");
				break;
			}
		}

		WM_HWIN minute = WM_GetDialogItem(hWinclock, ID_TEXT_1);
		sprintf(number,"%0.2d",minutes);
		TEXT_SetText(minute,number);
		TEXT_SetTextColor(minute,col_gui);
		WM_HWIN hour = WM_GetDialogItem(hWinclock, ID_TEXT_0);
		sprintf(number,"%0.2d",hours);
		TEXT_SetText(hour,number);
		TEXT_SetTextColor(hour,col_gui);
		WM_HWIN dwu = WM_GetDialogItem(hWinclock, ID_TEXT_2);
		if(seconds%2==0)TEXT_SetText(dwu,"");
		else TEXT_SetText(dwu,":");
		TEXT_SetTextColor(dwu,col_gui);
		WM_HWIN till = WM_GetDialogItem(hWinclock, ID_TEXT_6);
		TEXT_SetTextColor(till,col_gui);

		char lekcja='-';

		if((hours<8)||(hours==8 && minutes<=15))
		{
			TEXT_SetText(till,"8:15");
			lekcja='1';
		}
		else if((hours==8 && minutes>15) || (hours==9 && minutes==0))
		{
			TEXT_SetText(till,"9:00");
			lekcja='2';
		}
		else if(hours==9 && minutes<=10)
		{
			TEXT_SetText(till,"9:10");
			lekcja='2';
		}
		else if(hours==9 && minutes<=55)
		{
			TEXT_SetText(till,"9:55");
			lekcja='3';
		}
		else if((hours==10 && minutes<=5)||(hours==9 && minutes>55))
		{
			TEXT_SetText(till,"10:05");
			lekcja='3';
		}
		else if(hours==10 && minutes<=50)
		{
			TEXT_SetText(till,"10:50");
			lekcja='4';
		}
		else if((hours==11 && minutes<=10) || (hours==10 && minutes>50))
		{
			TEXT_SetText(till,"11:10");
			lekcja='4';
		}
		else if(hours==11 && minutes<=50)
		{
			TEXT_SetText(till,"11:55");
			lekcja='5';
		}
		else if((hours==12 && minutes<=5) || (hours==11 && minutes>50))
		{
			TEXT_SetText(till,"12:05");
			lekcja='5';
		}
		else if(hours==12 && minutes<=50)
		{
			TEXT_SetText(till,"12:50");
			lekcja='6';
		}
		else if((hours==12 && minutes>50)||(hours==13 && minutes==0))
		{
			TEXT_SetText(till,"13:00");
			lekcja='6';
		}
		else if(hours==13 && minutes<=45)
		{
			TEXT_SetText(till,"13:45");
			lekcja='7';
		}
		else if(hours==13 && minutes<=55)
		{
			TEXT_SetText(till,"13:55");
			lekcja='7';
		}
		else if((hours==13 && minutes>55) || (hours==14 && minutes<=40))
		{
			TEXT_SetText(till,"14:40");
			lekcja='8';
		}
		else if(hours==14 && minutes<=50)
		{
			TEXT_SetText(till,"14:50");
			lekcja='8';
		}
		else if((hours==14 && minutes>50)||(hours==15 && minutes<=35))
		{
			TEXT_SetText(till,"15:35");
			lekcja='9';
		}
		else
		{
			TEXT_SetText(till,"--:--");
		}

		if(jed && lekcja!='-')
		{

			taskENTER_CRITICAL();
			switch(weekday)
			{
				case 1:
				{
					f_open(&fsrc,"0:plan/pon.txt",FA_OPEN_EXISTING|FA_READ);
					break;
				}
				case 2:
				{
					f_open(&fsrc,"0:plan/wt.txt",FA_OPEN_EXISTING|FA_READ);
					break;
				}
				case 3:
				{
					f_open(&fsrc,"0:plan/sr.txt",FA_OPEN_EXISTING|FA_READ);
					break;
				}
				case 4:
				{
					f_open(&fsrc,"0:plan/czw.txt",FA_OPEN_EXISTING|FA_READ);
					break;
				}
				case 5:
				{
					f_open(&fsrc,"0:plan/pt.txt",FA_OPEN_EXISTING|FA_READ);
					break;
				}
				case 6:
				{
					f_open(&fsrc,"0:plan/so.txt",FA_OPEN_EXISTING|FA_READ);
					break;
				}
				case 7:
				{
					f_open(&fsrc,"0:plan/nie.txt",FA_OPEN_EXISTING|FA_READ);
					break;
				}
			}
			char aucc[f_size(&fsrc)];
			f_read(&fsrc,aucc,f_size(&fsrc),&kk);
//			GUI_DispDecAt(sizeof(&fsrc),220,220,5);

			int i=0;
			while(aucc[i]!=lekcja || aucc[i+1]!='.')
			{
				i++;
				if(i>=f_size(&fsrc))break;
			}
			WM_HWIN lesson = WM_GetDialogItem(hWinclock, ID_TEXT_8);
			TEXT_SetTextColor(lesson,col_gui);
			u8 lk=0;
			char less[20];
			while(aucc[i]!='\n')
			{
				less[lk++]=aucc[i++];
			}
			TEXT_SetText(lesson,less);
			jed=0;
			taskEXIT_CRITICAL();
		}

		WM_HWIN bat = WM_GetDialogItem(hWinclock, ID_TEXT_5);
		TEXT_SetTextColor(bat,col_gui);
		vTaskDelay(50);
	}
}