Chen Huan
/
MotorPID
闭环步进电机
Diff: GUI.cpp
- Revision:
- 1:cbd6a3232d5b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/GUI.cpp Thu Apr 05 01:37:17 2018 +0000 @@ -0,0 +1,166 @@ +#include "GUI.h" + +int screen_buf1[140] = {}; + +int screen_buf2[140] = {}; + +int index = 0; + +void RefreshGUI(Serial *Screen, int freq, float kp, float ki, int goal, int pos) +{ + unsigned long int long_goal, long_pos; + long_goal = goal; + long_pos = pos; + SXY(Screen,8,35); + if(freq < 10) + DS16(Screen,90,20,int2string(freq)+" ",3); + else + DS16(Screen,90,20,int2string(freq)+" ",3); + DS16(Screen,90,40,float2string(kp),3); + DS16(Screen,90,60,float2string(ki),3); + DS16(Screen,90,80,int2string(goal)+" ",3); + DS16(Screen,90,100,int2string(pos)+" ",3); + + SXY(Screen,170,75); + PS(Screen,index,screen_buf1[index],0); + //screen_buf1[index] = 110-long_goal/(16383/110); + screen_buf1[index] = 110-goal/(16383/110); + PS(Screen,index,screen_buf1[index],3); + PS(Screen,index,screen_buf2[index],0); + //screen_buf1[index] = 110-long_pos/(16383/110); + screen_buf2[index] = 110-pos/(16383/110); + PS(Screen,index,screen_buf2[index],5); + index++; + if(index == 140) + index = 0; + + + SXY(Screen,0,0); + ExecuteInstruction(Screen); + //wait(0.1); +} + +void InitGUI(Serial *Screen) +{ + char c1[18]={0xB1,0xD5,0xBB,0xB7,0xB2,0xBD,0xBD,0xF8,0xB5,0xE7,0xBB,0xFA,0xCA,0xD4,0xD1,0xE9,0xCC,0xA8};//闭环步进电机试验台 + char c2[8]={0xBF,0xD8,0xD6,0xC6,0xD0,0xC5,0xCF,0xA2};//控制信息 + char c3[4]={0xC6,0xB5,0xC2,0xCA};//频率 + char c4[8]={0xB1,0xC8,0xC0,0xFD,0xCF,0xB5,0xCA,0xFD};//比例系数 + char c5[8]={0xBB,0xFD,0xB7,0xD6,0xCF,0xB5,0xCA,0xFD};//积分系数 + char c6[8]={0xC4,0xBF,0xB1,0xEA,0xCE,0xBB,0xD6,0xC3};//目标位置 + char c7[8]={0xB5,0xB1,0xC7,0xB0,0xCE,0xBB,0xD6,0xC3};//当前位置 + char c8[18] = {0xC7,0xE5,0xBB,0xAA,0xB4,0xF3,0xD1,0xA7,0xB4,0xB4,0xD0,0xC2,0xB9,0xA4,0xD7,0xF7,0xB7,0xBB};//清华大学创新工作坊 + string str= ""; + + SXY(Screen,0,0); + CLS(Screen,0); + for(int i=0;i<18;i++) str+=c1[i]; + DS16(Screen,90,4,str,12); + str= ""; + PL(Screen,0,28,319,28,15); + PL(Screen,0,29,319,29,15); + PL(Screen,159,35,159,190,15); + PL(Screen,160,35,160,190,15); + SXY(Screen,8,35); + for(int i=0;i<8;i++) str+=c2[i]; + DS16(Screen,30,0,str,2); + str= ""; + for(int i=0;i<4;i++) str+=c3[i]; + DS16(Screen,0,20,str,2); + str= ""; + for(int i=0;i<8;i++) str+=c4[i]; + DS16(Screen,0,40,str,2); + str= ""; + for(int i=0;i<8;i++) str+=c5[i]; + DS16(Screen,0,60,str,2); + str= ""; + for(int i=0;i<8;i++) str+=c6[i]; + DS16(Screen,0,80,str,2); + str= ""; + for(int i=0;i<8;i++) str+=c7[i]; + DS16(Screen,0,100,str,2); + str= ""; + + SXY(Screen,170,35); + for(int i=0;i<8;i++) str+=c6[i]; + DS16(Screen,0,0,str,2); + str= ""; + for(int i=0;i<8;i++) str+=c7[i]; + DS16(Screen,0,20,str,2); + str= ""; + PL(Screen,80,5,140,5,3); + PL(Screen,80,6,140,6,3); + PL(Screen,80,25,140,25,5); + PL(Screen,80,26,140,26,5); + SXY(Screen,0,0); + PL(Screen,0,195,319,195,15); + PL(Screen,0,196,319,196,15); + for(int i=0;i<18;i++) str+=c8[i]; + DS16(Screen,85,203,str,12); + str= ""; + DS16(Screen,50,222,"Developed by C.H. Dep of EEA",2); + SXY(Screen,0,0); + ExecuteInstruction(Screen); + wait(0.2); +} + +void DS16(Serial *Screen, int x, int y, string str, int color) +{ + string temp = "DS16("+int2string(x)+","+int2string(y)+",'"+str+"',"+int2string(color)+");"; + Screen->printf(temp.c_str()); +} + +void DS24(Serial *Screen, int x, int y, string str, int color) +{ + string temp = "DS24("+int2string(x)+","+int2string(y)+",'"+str+"',"+int2string(color)+");"; + Screen->printf(temp.c_str()); +} + +void SXY(Serial *Screen, int x, int y) +{ + string temp = "SXY("+int2string(x)+","+int2string(y)+");"; + Screen->printf(temp.c_str()); +} + +void CLS(Serial *Screen, int color) +{ + string temp = "CLS("+int2string(color)+");"; + Screen->printf(temp.c_str()); +} + +void PL(Serial *Screen, int x1, int y1, int x2, int y2, int color) +{ + string temp = "PL("+int2string(x1)+","+int2string(y1)+","+int2string(x2)+","+int2string(y2)+","+int2string(color)+");"; + Screen->printf(temp.c_str()); +} + +void PS(Serial *Screen, int x1, int y1, int color) +{ + string temp = "PS("+int2string(x1)+","+int2string(y1)+","+int2string(color)+");"; + Screen->printf(temp.c_str()); +} + +void ExecuteInstruction(Serial *Screen) +{ + Screen->printf("\r\n"); +} + +string int2string(int x) +{ + stringstream ss; + ss << x; + string str = ss.str(); + return str; +} + +string float2string(float x) +{ + int xx = x * 100; + float xxx = (float)xx / 100; + stringstream ss; + ss << xxx; + string str = ss.str() + ' '; + return str; +} + +