Fork of https://os.mbed.com/users/sebastiken/code/Adafruit_RA8875/ ; Adapted for use with K64F and in the process of adding more functions.

Dependencies:   mbed BNO055

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "RA8875.h"
00002 #include <string>
00003 #include <stdlib.h>
00004 #include <time.h>
00005 #include "BNO055.h"
00006 
00007 
00008 #define MOSI    PC_12
00009 #define MISO    PC_11
00010 #define SCLK    PC_10
00011 #define CS      PA_15
00012 #define RST     PD_0
00013 
00014 DigitalIn   INT(PD_1);
00015 BNO055 imu(PB_7,PB_6);
00016 DigitalOut G0(PG_0);
00017 DigitalOut bno_enable(PB_5);
00018 
00019 Adafruit_RA8875 lcd = Adafruit_RA8875(MOSI, MISO, SCLK, CS, RST);
00020 uint16_t tx, ty;
00021 char * toString(uint16_t number);
00022 Serial pc(USBTX, USBRX); // tx, rxSerial pc(USBTX, USBRX); // tx, rx
00023 void menu();
00024 void menu1();
00025 void menu2();
00026 bool buttonState(uint16_t xMin, uint16_t yMin, uint16_t xMax, uint16_t yMax);
00027 bool notificationState = true;
00028 bool refresh = false;
00029 uint16_t menuVal = 0;
00030 
00031 
00032 
00033 class button{
00034  public:
00035     uint16_t x;
00036     uint16_t y;
00037     uint16_t w;
00038     uint16_t h;
00039     uint16_t textY;
00040     bool state;
00041     const char* buttonName;
00042     bool debounceState;
00043     
00044     void update(){
00045         state = buttonState(x, y, x+w, y+h);
00046     }
00047     void create(){
00048         /*char char_array[buttonName.length()];
00049         for (int i = 0; i < sizeof(char_array); i++) { 
00050             char_array[i] = buttonName[i]; 
00051         } */
00052         lcd.textEnlarge(1);
00053         if(debounceState == 0){
00054             lcd.boxDraw(x,y,w,h,1,GREY,BLUE);
00055             lcd.textWritePro(x+2,textY,WHITE,BLUE, buttonName );
00056         }
00057         if(debounceState == 1){
00058             lcd.boxDraw(x,y,w,h,1,GREY,GREEN);
00059             lcd.textWritePro(x+2,textY,WHITE,GREEN, buttonName );
00060         }
00061         
00062     }
00063 
00064 };
00065 
00066 button menu1_Button;
00067 button menu2_Button;
00068 button relay1_Button;
00069 button relay2_Button;
00070 button relay3_Button;
00071 button relay4_Button;
00072 button relay5_Button;
00073 button relay6_Button;
00074 button relay7_Button;
00075 button relay8_Button;
00076 button relay9_Button;
00077 button settings_Button;
00078 
00079 
00080 void setup()
00081 {
00082     bno_enable = 1;
00083     pc.baud(9600);
00084     pc.printf("RA8875 start\n");
00085     imu.reset();
00086     if (!imu.check()){
00087         while (true){
00088             G0 = !G0;
00089             wait(0.1);
00090         }
00091     }
00092     imu.setmode(OPERATION_MODE_NDOF);
00093     imu.get_calib();
00094 }
00095 
00096 int main()
00097 {
00098     lcd.begin(RA8875_800x480);
00099     lcd.displayOn(true);
00100     lcd.GPIOX(true);      // Enable lcd - display enable tied to GPIOX
00101     lcd.PWM1config(true, RA8875_PWM_CLK_DIV1024); // PWM output for backlight
00102     lcd.PWM1out(255);
00103     lcd.fillScreen(BLACK);
00104     lcd.touchEnable(true);
00105 
00106 
00107     
00108     lcd.graphicsMode();
00109     lcd.drawPixel(50,200,WHITE);
00110     menu();
00111     menu1();
00112 
00113     float xScale = 1024.0F/lcd.width();
00114     float yScale = 1024.0F/lcd.height();
00115     bool INT = 1;
00116 
00117     while(1) {
00118         if (INT == !1);
00119         {
00120             if (lcd.touched()) {
00121                 lcd.touchRead(&tx, &ty);
00122                 //lcd.fillCircle((uint16_t)(tx/xScale), (uint16_t)(ty/yScale), 1, WHITE);
00123                 lcd.textEnlarge(1.2);
00124                 uint16_t tmp;
00125                 tmp = (uint16_t)(tx/xScale);
00126                 
00127                 imu.get_angles();
00128                 pc.printf("%0z %5.1d %5.1d %5.1d\r\n",imu.calib,imu.euler.roll,imu.euler.pitch,imu.euler.yaw);
00129                 tmp = (uint16_t)(abs(imu.euler.pitch));
00130                 wait(0.1);
00131                 char arr[7];
00132                 arr[0] = tmp/100; 
00133                 tmp = tmp - arr[0]*100;
00134                 arr[1] = tmp/10; 
00135                 tmp = tmp - arr[1]*10;
00136                 arr[2] = tmp+48;
00137                 arr[1]+=48;
00138                 arr[0]+=48;
00139                 lcd.textWritePro(10, 450, GREEN, 0, arr);
00140                 tmp = (uint16_t)(ty/yScale);
00141                 arr[3] = ',';
00142                 arr[4] = tmp/100; 
00143                 tmp = tmp - arr[4]*100;
00144                 arr[5] = tmp/10; 
00145                 tmp = tmp - arr[5]*10;
00146                 arr[6] = tmp+48;
00147                 arr[5]+=48;
00148                 arr[4]+=48;
00149                 lcd.textWritePro(10, 450, GREEN, 0, arr);
00150                 menu1_Button.update();
00151                 menu2_Button.update();
00152                 relay1_Button.update();
00153                 relay2_Button.update();
00154                 relay3_Button.update();
00155                 relay4_Button.update();
00156                 relay5_Button.update();
00157                 relay6_Button.update();
00158                 relay7_Button.update();
00159                 relay8_Button.update();
00160                 relay9_Button.update();
00161                 if(menu1_Button.state == 1){
00162                     menuVal = 1;
00163                     //menu();
00164                     menu1();
00165                     lcd.touchRead(&tx, &ty);
00166                     wait(0.5);
00167                 }
00168                 if(menu2_Button.state == 1){
00169                     menuVal = 2;
00170                     //menu();
00171                     menu2();
00172                     lcd.touchRead(&tx, &ty);
00173                     wait(0.5);
00174                 }
00175                 if(relay1_Button.state == 1){
00176                     relay1_Button.debounceState = !relay1_Button.debounceState;
00177                     menu2();
00178                     lcd.touchRead(&tx, &ty);
00179                     wait(0.5);
00180                 }
00181                 if(relay2_Button.state == 1){
00182                     relay2_Button.debounceState = !relay2_Button.debounceState;
00183                     menu2();
00184                     lcd.touchRead(&tx, &ty);
00185                     wait(0.5);
00186                 }
00187                 if(relay3_Button.state == 1){
00188                     relay3_Button.debounceState = !relay3_Button.debounceState;
00189                     menu2();
00190                     lcd.touchRead(&tx, &ty);
00191                     wait(0.5);
00192                 }
00193                 if(relay4_Button.state == 1){
00194                     relay4_Button.debounceState = !relay4_Button.debounceState;
00195                     menu2();
00196                     lcd.touchRead(&tx, &ty);
00197                     wait(0.5);
00198                 }
00199                 if(relay5_Button.state == 1){
00200                     relay5_Button.debounceState = !relay5_Button.debounceState;
00201                     menu2();
00202                     lcd.touchRead(&tx, &ty);
00203                     wait(0.5);
00204                 }
00205                 if(relay6_Button.state == 1){
00206                     relay6_Button.debounceState = !relay6_Button.debounceState;
00207                     menu2();
00208                     lcd.touchRead(&tx, &ty);
00209                     wait(0.5);
00210                 }
00211                 if(relay7_Button.state == 1){
00212                     relay7_Button.debounceState = !relay7_Button.debounceState;
00213                     menu2();
00214                     lcd.touchRead(&tx, &ty);
00215                     wait(0.5);
00216                 }
00217                 if(relay8_Button.state == 1){
00218                     relay8_Button.debounceState = !relay8_Button.debounceState;
00219                     menu2();
00220                     lcd.touchRead(&tx, &ty);
00221                     wait(0.5);
00222                 }
00223                 if(relay9_Button.state == 1){
00224                     relay9_Button.debounceState = !relay9_Button.debounceState;
00225                     menu2();
00226                     lcd.touchRead(&tx, &ty);
00227                     wait(0.5);
00228                 }
00229                 
00230             }
00231         }
00232     }
00233 }
00234 void menu(){
00235     lcd.rectHelper(0,0,800,480,BLACK,1);
00236     lcd.textEnlarge(1);
00237     lcd.textWritePro(10,5,WHITE,0,"NAVARC Solarange");
00238     lcd.boxDraw(0,45,800,0,4,GREY,BLUE);
00239     lcd.boxDraw(250,100,30,30,1,GREY,BLUE);
00240     if(notificationState){
00241         lcd.rectHelper(60,100,350,300,GREY,1);
00242         lcd.boxDraw(250,100,30,30,1,GREY,BLUE);
00243     }
00244     
00245     menu1_Button.x = 50;
00246     menu1_Button.y = 350;
00247     menu1_Button.w = 300;
00248     menu1_Button.h = 100;
00249     menu1_Button.textY = 380;
00250     menu1_Button.buttonName = "      Menu 1";
00251     menu1_Button.create();
00252     
00253     menu2_Button.x = 450;
00254     menu2_Button.y = 350;
00255     menu2_Button.w = 300;
00256     menu2_Button.h = 100;
00257     menu2_Button.textY = 380;
00258     menu2_Button.buttonName = "      Menu 2";
00259     menu2_Button.create();
00260 }
00261 
00262 void menu1(){
00263     lcd.rectHelper(20,70,750,330,BLACK,1);
00264     lcd.boxDraw(390,70,400,250,1,WHITE,WHITE);
00265     lcd.textEnlarge(1);
00266     lcd.textWritePro(395,80,BLUE,WHITE,"Panel Grubu 1: 75kW");
00267     lcd.textWritePro(395,110,BLUE,WHITE,"Panel Grubu 2: 75kW");
00268     lcd.textWritePro(395,140,BLUE,WHITE,"Panel Grubu 3: 75kW");
00269     lcd.textWritePro(395,170,BLUE,WHITE,"Batarya      : %?");
00270     lcd.textWritePro(395,200,BLUE,WHITE,"Menzil       : KM");
00271     lcd.textWritePro(395,230,BLUE,WHITE,"Meyil Acisi  : 22 derece");
00272     lcd.textWritePro(395,260,BLUE,WHITE,"Trim Acisi   : 11 derece");
00273     lcd.textWritePro(395,290,BLUE,WHITE,"Donus Acisi  : 125 derece");
00274     
00275     lcd.boxDraw(50,70,300,250,0,WHITE,BLUE);
00276     lcd.drawCircle(50+150,70+125,100,WHITE);
00277     lcd.drawCircle(50+150,70+125,99,WHITE);
00278     lcd.drawCircle(50+150,70+125,98,WHITE);
00279     lcd.drawCircle(50+150,70+125,97,WHITE);
00280     lcd.drawCircle(50+150,70+125,96,WHITE);
00281     lcd.textEnlarge(1);
00282     lcd.textWritePro(67,285,WHITE,BLUE,"HIZ");
00283     lcd.textEnlarge(4);
00284     lcd.textWritePro(120+34,25+120,WHITE,BLUE, "220");
00285     lcd.textEnlarge(2);
00286     lcd.textWritePro(120+35,120+40+40,WHITE,BLUE, "Knot");
00287     //string s = to_string(rand() % 10 + 1;)
00288 }
00289 void menu2(){
00290     lcd.rectHelper(50,70,800,330,BLACK,1);
00291     //lcd.rectHelper(30,70,770,330,WHITE,1);
00292     relay1_Button.x = 20;
00293     relay1_Button.y = 85;
00294     relay1_Button.w = 140;
00295     relay1_Button.h = 90;
00296     relay1_Button.textY = 85+30;
00297     relay1_Button.buttonName = " Relay 1";
00298     relay1_Button.create();
00299     
00300     relay2_Button.x = 20;
00301     relay2_Button.y = 205;
00302     relay2_Button.w = 140;
00303     relay2_Button.h = 90;
00304     relay2_Button.textY = 205+30;
00305     relay2_Button.buttonName = " Relay 2";
00306     relay2_Button.create();
00307     
00308     relay3_Button.x = 175;
00309     relay3_Button.y = 85;
00310     relay3_Button.w = 140;
00311     relay3_Button.h = 90;
00312     relay3_Button.textY = 85+30;
00313     relay3_Button.buttonName = " Relay 3";
00314     relay3_Button.create();
00315     
00316     relay4_Button.x = 175;
00317     relay4_Button.y = 205;
00318     relay4_Button.w = 140;
00319     relay4_Button.h = 90;
00320     relay4_Button.textY = 205+30;
00321     relay4_Button.buttonName = " Relay 4";
00322     relay4_Button.create();
00323     
00324     relay5_Button.x = 330;
00325     relay5_Button.y = 85;
00326     relay5_Button.w = 140;
00327     relay5_Button.h = 90;
00328     relay5_Button.textY = 85+30;
00329     relay5_Button.buttonName = " Relay 5";
00330     relay5_Button.create();
00331     
00332     relay6_Button.x = 330;
00333     relay6_Button.y = 205;
00334     relay6_Button.w = 140;
00335     relay6_Button.h = 90;
00336     relay6_Button.textY = 205+30;
00337     relay6_Button.buttonName = " Relay 6";
00338     relay6_Button.create();
00339     
00340     relay7_Button.x = 485;
00341     relay7_Button.y = 85;
00342     relay7_Button.w = 140;
00343     relay7_Button.h = 90;
00344     relay7_Button.textY = 85+30;
00345     relay7_Button.buttonName = " Relay 7";
00346     relay7_Button.create();
00347     
00348     relay8_Button.x = 485;
00349     relay8_Button.y = 205;
00350     relay8_Button.w = 140;
00351     relay8_Button.h = 90;
00352     relay8_Button.textY = 205+30;
00353     relay8_Button.buttonName = " Relay 8";
00354     relay8_Button.create();
00355     
00356     relay9_Button.x = 640;
00357     relay9_Button.y = 85;
00358     relay9_Button.w = 140;
00359     relay9_Button.h = 90;
00360     relay9_Button.textY = 85+30;
00361     relay9_Button.buttonName = " Relay 9";
00362     relay9_Button.create();
00363     
00364     settings_Button.x = 640;
00365     settings_Button.y = 205;
00366     settings_Button.w = 140;
00367     settings_Button.h = 90;
00368     settings_Button.textY = 205+30;
00369     settings_Button.buttonName = " Ayarlar";
00370     settings_Button.create();
00371     
00372 }
00373 
00374 bool buttonState(uint16_t xMin, uint16_t yMin, uint16_t xMax, uint16_t yMax){
00375 
00376     float xScale = 1024.0F/lcd.width();
00377     float yScale = 1024.0F/lcd.height();
00378     if((uint16_t)(tx/xScale)>xMin && (uint16_t)(tx/xScale)<xMax){
00379         if((uint16_t)(ty/yScale)>yMin && (uint16_t)(ty/yScale)<yMax){
00380             return true;
00381         }
00382     }
00383     return false;
00384     
00385 }
00386 
00387 
00388 
00389