/** 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 */ }
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); }
/** 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); }
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); } }