void test_Oled(void) { int i; ExpanderSetbit(7,0); HAL_Delay(100); ExpanderSetbit(7,1); HAL_Delay(100); ssd1306Init(0); ssd1306ClearScreen(); ssd1306Refresh(); ssd1306DrawBmp(Pacabot_bmp, 1, 10, 128, 40); ssd1306Refresh(); HAL_Delay(3500); ssd1306ClearScreen(); ssd1306Refresh(); // miniature bitmap display ssd1306DrawCircle(40, 30, 20); // ssd1306DrawCircle(50, 20, 10); ssd1306FillCircle(100, 40, 15); ssd1306DrawRect(110, 3, 15, 6); ssd1306FillRect(1, 60, 10, 20); ssd1306DrawLine(5, 45, 70, 60); ssd1306Refresh(); HAL_Delay(5500); ssd1306ClearScreen(); for (i = 0; i <= 100; i+=2) { ssd1306ProgressBar(10, 20, i); // HAL_Delay(1); ssd1306Refresh(); } ssd1306ShiftFrameBuffer(8); ssd1306DrawString(13, 1, "Oled 128x64", &Font_8x8); // 3x6 is UPPER CASE only ssd1306Refresh(); HAL_Delay(1500); ssd1306DrawString(1, 25, "Driver for STM32f4xx", &Font_5x8); // 3x6 is UPPER CASE only ssd1306Refresh(); HAL_Delay(500); ssd1306DrawString(1, 35, "2 Wire SPI mode", &Font_5x8); // 3x6 is UPPER CASE only ssd1306Refresh(); HAL_Delay(1500); ssd1306DrawString(10, 55, "BY PLF, PACABOT TEAM", &Font_3x6); // 3x6 is UPPER CASE only ssd1306Refresh(); HAL_Delay(5000); ssd1306ClearScreen(); ssd1306Refresh(); }
int test_oled1(void) { int i; ssd1306Init(0); ssd1306Refresh(); ssd1306ClearScreen(); ssd1306DrawBmp(Pacabot_bmp, 1, 1, 128, 40); ssd1306Refresh(); HAL_Delay(3500); ssd1306ClearScreen(); ssd1306Refresh(); // miniature bitmap display ssd1306DrawCircle(40, 30, 20); // ssd1306DrawCircle(50, 20, 10); ssd1306FillCircle(100, 40, 15); ssd1306DrawRect(110, 3, 15, 6); ssd1306FillRect(1, 60, 10, 20); ssd1306DrawLine(5, 45, 70, 60); ssd1306Refresh(); HAL_Delay(5500); ssd1306ClearScreen(); for (i = 0; i <= 100; i++) { ssd1306ProgressBar(10, 20, i); HAL_Delay(1); ssd1306Refresh(); } ssd1306ShiftFrameBuffer(8); ssd1306DrawString(13, 1, "Oled 128x64", &Font_8x8); // 3x6 is UPPER CASE only ssd1306Refresh(); HAL_Delay(1500); ssd1306DrawString(1, 25, "Driver for STM32f10x", &Font_5x8); // 3x6 is UPPER CASE only ssd1306Refresh(); HAL_Delay(500); ssd1306DrawString(1, 35, "4 Wire SPI mode", &Font_5x8); // 3x6 is UPPER CASE only ssd1306Refresh(); HAL_Delay(1500); ssd1306DrawString(10, 55, "BY PLF ALL RIGHTS RESERVED", &Font_3x6); // 3x6 is UPPER CASE only ssd1306Refresh(); HAL_Delay(5000); ssd1306ClearScreen(); ssd1306Refresh(); return 0; }
void startDisplay(void) { ssd1306Init(SSD1306_SWITCHCAPVCC); ssd1306TurnOn(); display.state = DISPLAY_ON; ssd1306DrawString(40, 20, "OpenQS", Font_System7x8); chThdSleepMilliseconds(100); // Fails serDbg("startDisplay Complete\r\n"); while (true) { serDbg("Display OFF\r\n"); ssd1306TurnOff(); display.state = DISPLAY_OFF; while (!BUTTON_SEL) /* Wait until the select button is pressed */ { palTogglePad(GPIOC, GPIOC_LED4); /* Display heartbeat */ chThdSleepMilliseconds(250); } serDbg("Display ON\r\n"); ssd1306ClearScreen(); ssd1306TurnOn(); display.state = DISPLAY_ON; openMenu(&mainMenu); } }
void setOutputMode(void) { drawTitle("Output Mode"); if (settings.data.functions == SETTINGS_OUTPUT_NORMAL) { ssd1306DrawString(25, 0, "Analog", Font_System5x8); settings.data.functions = SETTINGS_OUTPUT_ANALOG; } else { ssd1306DrawString(25, 0, "Normal", Font_System5x8); settings.data.functions = SETTINGS_OUTPUT_NORMAL; } writeSettings(&settings); chThdSleepMilliseconds(2000); }
void setCutMode(void) { drawTitle("Output Mode"); if (settings.data.functions == SETTINGS_CUT_FIXED) { ssd1306DrawString(25, 0, "Fixed", Font_System5x8); settings.data.functions = SETTINGS_CUT_FIXED; } else { ssd1306DrawString(25, 0, "Adaptive", Font_System5x8); settings.data.functions = SETTINGS_CUT_ADAPTIVE; } writeSettings(&settings); chThdSleepMilliseconds(2000); }
void showDiag(void) { char str[10] = ""; while (!BUTTON_SEL) { drawTitle("Diagnostics"); ssd1306DrawString(0, 30, "Shifter:", Font_System5x8); itoa(sensors.strain_gauge, str); ssd1306DrawString(45, 30, str, Font_System5x8); ssd1306DrawString(0, 40, "TC Switch:", Font_System5x8); itoa(sensors.tc_switch, str); ssd1306DrawString(55, 40, str, Font_System5x8); chThdSleepMilliseconds(100); } }
//Draws the actual menu void drawMenu(menuStruct_t *menuToShow, short selectedIndex) { uint8_t i, y; ssd1306ClearScreen(); ssd1306DrawString(0, 0, menuToShow->menuName, Font_System5x8); for(i=0;i < ((menuToShow->numberItems+1) > 6 ? 6 : (menuToShow->numberItems+1)) ;i++) { y = (i*7)+1; if (i > 5 + (selectedIndex > 5 ? selectedIndex - 5 : 0)) { break; } else if (selectedIndex < 6) { if (selectedIndex == i) ssd1306DrawChar(0, y, '>', Font_System5x8); if (selectedIndex > menuToShow->numberItems) { ssd1306DrawString(7, y, "Go Back", Font_System5x8); } else { ssd1306DrawString(7, y, menuToShow->items[i].itemName, Font_System5x8); } } else { if (selectedIndex == i+(selectedIndex-5)) ssd1306DrawChar(0, y, '>', Font_System5x8); if (selectedIndex > menuToShow->numberItems) { ssd1306DrawString(7, y, "Go Back", Font_System5x8); } else { ssd1306DrawString(7, y, menuToShow->items[i+(selectedIndex-5)].itemName, Font_System5x8); } } } return; }
void setShifter(void) { drawTitle("Shifter Sensor Setup"); uint8_t i; uint16_t peak; ssd1306DrawString(0, 25, "Shift a gear", Font_System5x8); ssd1306DrawString(10, 10, "to detect direction", Font_System5x8); chThdSleepMilliseconds(2000); peak = 0; for (i=0; i<40; i++) { if (sensors.strain_gauge >= peak) peak = sensors.strain_gauge; chThdSleepMilliseconds(100); } ssd1306ClearScreen(); /* Peak >= 1.65v */ if (peak >= 0x8000) { ssd1306DrawString(0, 10, "Normal direction", Font_System5x8); settings.data.sensor_direction = SETTINGS_SENSOR_NORMAL; } else { ssd1306DrawString(0, 5, "Reverse direction", Font_System5x8); settings.data.sensor_direction = SETTINGS_SENSOR_REVERSE; } settings.data.sensor_threshold = peak; writeSettings(&settings); chThdSleepMilliseconds(2000); while (!BUTTON_SEL) chThdSleepMilliseconds(100); }
void printGraphMotor (float acceleration, float maxSpeed, float deceleration) { char str[10]; ssd1306ClearScreen(); char point1[2]={(char)((0-maxSpeed)/(0-acceleration)),64-(char)maxSpeed}; char point2[2]={(char)(128-(0-maxSpeed)/(0-deceleration)),64-(char)(maxSpeed)}; ssd1306DrawLine(0,64,point1[0],point1[1]); ssd1306DrawLine(point1[0],point1[1],point2[0],point2[1]); ssd1306DrawLine(point2[0],point1[1],128,64); sprintf(str,"%.2fM.S^2",acceleration); ssd1306DrawString((0+point1[0])/2+2,(64+point1[1])/2+2,str,&Font_3x6); sprintf(str,"%.2fM.S",maxSpeed); ssd1306DrawString((point1[0]+point2[0])/2,(point1[1]+point2[1])/2,str,&Font_3x6); sprintf(str,"%.2fM.S^2",deceleration); ssd1306DrawString((point2[0]+128)/2-27,(point2[1]+64)/2,str,&Font_3x6); ssd1306Refresh(); }
void showInfo(void) { drawTitle("Version"); ssd1306DrawString(0, 10, version, Font_System5x8); ssd1306DrawString(0, 20, "Cut mode:", Font_System5x8); if (settings.data.functions == SETTINGS_CUT_ANALOG) { ssd1306DrawString(25, 20, "Analog", Font_System5x8); } else if (settings.data.functions == SETTINGS_CUT_NORMAL) { ssd1306DrawString(25, 20, "Normal", Font_System5x8); } else { ssd1306DrawString(25, 20, disabled, Font_System5x8); } while (!BUTTON_SEL) chThdSleepMilliseconds(100); }
void displayMenu(const menuItem menu,int line) { //char str[5]; ssd1306ClearScreen(); ssd1306DrawString(0,0,menu.name,&Font_5x8); ssd1306DrawLine(0,8,128,8); for (int i=0;i<MAX_LINE_SCREEN;i++) { if(menu.line[i].name!=null) ssd1306DrawString(0,MARGIN*i+MARGIN+1,menu.line[line+i].name,&Font_5x8); switch (menu.line[line+i].type) { case 'b': if(*((bool*)menu.line[i+line].param)==true) ssd1306DrawString(90,MARGIN*i+MARGIN+1,"yes",&Font_5x8); else ssd1306DrawString(90,MARGIN*i+MARGIN+1,"no",&Font_5x8); break; case 'i': ssd1306PrintInt(90,MARGIN*i+MARGIN+1," ",*((unsigned int*)menu.line[i+line].param),&Font_3x6); break; case 'l': ssd1306PrintInt(90,MARGIN*i+MARGIN+1," ",*((unsigned long*)menu.line[i+line].param),&Font_3x6); break; case 'f': ssd1306DrawString(110,i*MARGIN+MARGIN+1,"->",&Font_3x6); break; case 'm': ssd1306DrawString(115,i*MARGIN+MARGIN+1,">",&Font_3x6); break; // case 'a': // sprintf(str,"%f.2",*(float*)menu.line[i+line].param); // ssd1306DrawString(110,i*MARGIN+MARGIN+1,str,&Font_3x6); } } uint8_t nmbr_item = 0; while(menu.line[nmbr_item].name != null) { nmbr_item++; } if (nmbr_item>MAX_LINE_SCREEN) { //int heightOneItem=54/nmbr_item; ssd1306DrawRect(123,(54*line)/nmbr_item+MARGIN,3,(54*MAX_LINE_SCREEN)/nmbr_item); } ssd1306Refresh(); }
int modifyLongParam( char *param_name,long *param) { int step=1; char str[40]; long param_copy = *param; char collone=0; ssd1306ClearScreen(); // Write the parameter name ssd1306DrawString(0, 0,param_name, &Font_5x8); ssd1306DrawLine(0, 9, 128, 9); sprintf(str, "%10i", (int)param_copy); ssd1306DrawString(0, 28, str, &Font_8x8); ssd1306DrawString(0, 50, "PRESS 'RIGHT' TO VALIDATE", &Font_3x6); ssd1306DrawString(0, 57, " 'LEFT' TO RETURN.", &Font_3x6); ssd1306DrawString((10-collone)*8,20,"^",&Font_8x8); ssd1306DrawString((10-collone)*8,36,"v",&Font_8x8); ssd1306Refresh(); while (1) { // Exit Button int joystick=expanderJoyFiltered(); switch (joystick) { case JOY_LEFT : if (collone==10) return SUCCESS; else { collone++; ssd1306ClearRect(0,20,128,8); ssd1306ClearRect(0,36,128,8); ssd1306DrawString((9-collone)*9,20,"^",&Font_8x8); ssd1306DrawString((9-collone)*9,36,"v",&Font_8x8); ssd1306Refresh(); } break; case JOY_UP: //param_copy +=1; param_copy += (step*pow(10,collone)); ssd1306ClearRect(0, 28, 164, 8); sprintf(str, "%10i", (int)param_copy); ssd1306DrawString(0, 28, str, &Font_8x8); ssd1306Refresh(); break; case JOY_DOWN : param_copy -= (step*pow(10,collone)); //param_copy -= 1; ssd1306ClearRect(0, 28, 164, 8); sprintf(str, "%10i", (int)param_copy); ssd1306DrawString(0, 28, str, &Font_8x8); ssd1306Refresh(); break; case JOY_RIGHT : if(collone==0) { *param = param_copy; ssd1306Refresh(); return SUCCESS; } else { collone--; ssd1306ClearRect(0,20,128,8); ssd1306ClearRect(0,36,128,8); ssd1306DrawString((9-collone)*9,20,"^",&Font_8x8); ssd1306DrawString((9-collone)*9,36,"v",&Font_8x8); ssd1306Refresh(); } break; default: break; } } return SUCCESS; }
int modifyBoolParam( char *param_name, unsigned char *param) { char str[4]; bool param_copy = (bool)*param; ssd1306ClearScreen(); // Write the parameter name ssd1306DrawString(0, 0,param_name, &Font_5x8); ssd1306DrawLine(0, 9, 128, 9); if (param_copy == true) { sprintf(str, "YES"); } else { sprintf(str, "NO"); } ssd1306DrawString(0, 28, str, &Font_8x8); ssd1306DrawString(0, 50, "PRESS 'RIGHT' TO VALIDATE", &Font_3x6); ssd1306DrawString(0, 57, " 'LEFT' TO RETURN.", &Font_3x6); ssd1306Refresh(); while (1) { int joystick=expanderJoyFiltered(); switch (joystick) { case JOY_LEFT : return SUCCESS; break; case JOY_DOWN: case JOY_UP : if (param_copy == true) { param_copy = false; sprintf(str, "NO"); } else { param_copy = true; sprintf(str, "YES"); } ssd1306ClearRect(0, 28, 164, 8); ssd1306DrawString(0, 28, str, &Font_8x8); ssd1306Refresh(); break; case JOY_RIGHT: *param = param_copy; ssd1306ClearScreen(); ssd1306Refresh(); return SUCCESS; break; } } return SUCCESS; }
void drawTitle(char * str) { const uint8_t len = Font_System7x8.u8Width*strlen(str); ssd1306DrawString(64-(len/2), 0, str, Font_System7x8); }