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

main.cpp

Committer:
BugraTufan
Date:
2019-05-28
Revision:
4:51bfa333200c
Parent:
3:4a3e169866a2

File content as of revision 4:51bfa333200c:

#include "RA8875.h"
#include <string>
#include <stdlib.h>
#include <time.h>
#include "BNO055.h"


#define MOSI    PC_12
#define MISO    PC_11
#define SCLK    PC_10
#define CS      PA_15
#define RST     PD_0

DigitalIn   INT(PD_1);
BNO055 imu(PB_7,PB_6);
DigitalOut G0(PG_0);
DigitalOut bno_enable(PB_5);

Adafruit_RA8875 lcd = Adafruit_RA8875(MOSI, MISO, SCLK, CS, RST);
uint16_t tx, ty;
char * toString(uint16_t number);
Serial pc(USBTX, USBRX); // tx, rxSerial pc(USBTX, USBRX); // tx, rx
void menu();
void menu1();
void menu2();
bool buttonState(uint16_t xMin, uint16_t yMin, uint16_t xMax, uint16_t yMax);
bool notificationState = true;
bool refresh = false;
uint16_t menuVal = 0;



class button{
 public:
    uint16_t x;
    uint16_t y;
    uint16_t w;
    uint16_t h;
    uint16_t textY;
    bool state;
    const char* buttonName;
    bool debounceState;
    
    void update(){
        state = buttonState(x, y, x+w, y+h);
    }
    void create(){
        /*char char_array[buttonName.length()];
        for (int i = 0; i < sizeof(char_array); i++) { 
            char_array[i] = buttonName[i]; 
        } */
        lcd.textEnlarge(1);
        if(debounceState == 0){
            lcd.boxDraw(x,y,w,h,1,GREY,BLUE);
            lcd.textWritePro(x+2,textY,WHITE,BLUE, buttonName );
        }
        if(debounceState == 1){
            lcd.boxDraw(x,y,w,h,1,GREY,GREEN);
            lcd.textWritePro(x+2,textY,WHITE,GREEN, buttonName );
        }
        
    }

};

button menu1_Button;
button menu2_Button;
button relay1_Button;
button relay2_Button;
button relay3_Button;
button relay4_Button;
button relay5_Button;
button relay6_Button;
button relay7_Button;
button relay8_Button;
button relay9_Button;
button settings_Button;


void setup()
{
    bno_enable = 1;
    pc.baud(9600);
    pc.printf("RA8875 start\n");
    imu.reset();
    if (!imu.check()){
        while (true){
            G0 = !G0;
            wait(0.1);
        }
    }
    imu.setmode(OPERATION_MODE_NDOF);
    imu.get_calib();
}

int main()
{
    lcd.begin(RA8875_800x480);
    lcd.displayOn(true);
    lcd.GPIOX(true);      // Enable lcd - display enable tied to GPIOX
    lcd.PWM1config(true, RA8875_PWM_CLK_DIV1024); // PWM output for backlight
    lcd.PWM1out(255);
    lcd.fillScreen(BLACK);
    lcd.touchEnable(true);


    
    lcd.graphicsMode();
    lcd.drawPixel(50,200,WHITE);
    menu();
    menu1();

    float xScale = 1024.0F/lcd.width();
    float yScale = 1024.0F/lcd.height();
    bool INT = 1;

    while(1) {
        if (INT == !1);
        {
            if (lcd.touched()) {
                lcd.touchRead(&tx, &ty);
                //lcd.fillCircle((uint16_t)(tx/xScale), (uint16_t)(ty/yScale), 1, WHITE);
                lcd.textEnlarge(1.2);
                uint16_t tmp;
                tmp = (uint16_t)(tx/xScale);
                
                imu.get_angles();
                pc.printf("%0z %5.1d %5.1d %5.1d\r\n",imu.calib,imu.euler.roll,imu.euler.pitch,imu.euler.yaw);
                tmp = (uint16_t)(abs(imu.euler.pitch));
                wait(0.1);
                char arr[7];
                arr[0] = tmp/100; 
                tmp = tmp - arr[0]*100;
                arr[1] = tmp/10; 
                tmp = tmp - arr[1]*10;
                arr[2] = tmp+48;
                arr[1]+=48;
                arr[0]+=48;
                lcd.textWritePro(10, 450, GREEN, 0, arr);
                tmp = (uint16_t)(ty/yScale);
                arr[3] = ',';
                arr[4] = tmp/100; 
                tmp = tmp - arr[4]*100;
                arr[5] = tmp/10; 
                tmp = tmp - arr[5]*10;
                arr[6] = tmp+48;
                arr[5]+=48;
                arr[4]+=48;
                lcd.textWritePro(10, 450, GREEN, 0, arr);
                menu1_Button.update();
                menu2_Button.update();
                relay1_Button.update();
                relay2_Button.update();
                relay3_Button.update();
                relay4_Button.update();
                relay5_Button.update();
                relay6_Button.update();
                relay7_Button.update();
                relay8_Button.update();
                relay9_Button.update();
                if(menu1_Button.state == 1){
                    menuVal = 1;
                    //menu();
                    menu1();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(menu2_Button.state == 1){
                    menuVal = 2;
                    //menu();
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(relay1_Button.state == 1){
                    relay1_Button.debounceState = !relay1_Button.debounceState;
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(relay2_Button.state == 1){
                    relay2_Button.debounceState = !relay2_Button.debounceState;
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(relay3_Button.state == 1){
                    relay3_Button.debounceState = !relay3_Button.debounceState;
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(relay4_Button.state == 1){
                    relay4_Button.debounceState = !relay4_Button.debounceState;
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(relay5_Button.state == 1){
                    relay5_Button.debounceState = !relay5_Button.debounceState;
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(relay6_Button.state == 1){
                    relay6_Button.debounceState = !relay6_Button.debounceState;
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(relay7_Button.state == 1){
                    relay7_Button.debounceState = !relay7_Button.debounceState;
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(relay8_Button.state == 1){
                    relay8_Button.debounceState = !relay8_Button.debounceState;
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                if(relay9_Button.state == 1){
                    relay9_Button.debounceState = !relay9_Button.debounceState;
                    menu2();
                    lcd.touchRead(&tx, &ty);
                    wait(0.5);
                }
                
            }
        }
    }
}
void menu(){
    lcd.rectHelper(0,0,800,480,BLACK,1);
    lcd.textEnlarge(1);
    lcd.textWritePro(10,5,WHITE,0,"NAVARC Solarange");
    lcd.boxDraw(0,45,800,0,4,GREY,BLUE);
    lcd.boxDraw(250,100,30,30,1,GREY,BLUE);
    if(notificationState){
        lcd.rectHelper(60,100,350,300,GREY,1);
        lcd.boxDraw(250,100,30,30,1,GREY,BLUE);
    }
    
    menu1_Button.x = 50;
    menu1_Button.y = 350;
    menu1_Button.w = 300;
    menu1_Button.h = 100;
    menu1_Button.textY = 380;
    menu1_Button.buttonName = "      Menu 1";
    menu1_Button.create();
    
    menu2_Button.x = 450;
    menu2_Button.y = 350;
    menu2_Button.w = 300;
    menu2_Button.h = 100;
    menu2_Button.textY = 380;
    menu2_Button.buttonName = "      Menu 2";
    menu2_Button.create();
}

void menu1(){
    lcd.rectHelper(20,70,750,330,BLACK,1);
    lcd.boxDraw(390,70,400,250,1,WHITE,WHITE);
    lcd.textEnlarge(1);
    lcd.textWritePro(395,80,BLUE,WHITE,"Panel Grubu 1: 75kW");
    lcd.textWritePro(395,110,BLUE,WHITE,"Panel Grubu 2: 75kW");
    lcd.textWritePro(395,140,BLUE,WHITE,"Panel Grubu 3: 75kW");
    lcd.textWritePro(395,170,BLUE,WHITE,"Batarya      : %?");
    lcd.textWritePro(395,200,BLUE,WHITE,"Menzil       : KM");
    lcd.textWritePro(395,230,BLUE,WHITE,"Meyil Acisi  : 22 derece");
    lcd.textWritePro(395,260,BLUE,WHITE,"Trim Acisi   : 11 derece");
    lcd.textWritePro(395,290,BLUE,WHITE,"Donus Acisi  : 125 derece");
    
    lcd.boxDraw(50,70,300,250,0,WHITE,BLUE);
    lcd.drawCircle(50+150,70+125,100,WHITE);
    lcd.drawCircle(50+150,70+125,99,WHITE);
    lcd.drawCircle(50+150,70+125,98,WHITE);
    lcd.drawCircle(50+150,70+125,97,WHITE);
    lcd.drawCircle(50+150,70+125,96,WHITE);
    lcd.textEnlarge(1);
    lcd.textWritePro(67,285,WHITE,BLUE,"HIZ");
    lcd.textEnlarge(4);
    lcd.textWritePro(120+34,25+120,WHITE,BLUE, "220");
    lcd.textEnlarge(2);
    lcd.textWritePro(120+35,120+40+40,WHITE,BLUE, "Knot");
    //string s = to_string(rand() % 10 + 1;)
}
void menu2(){
    lcd.rectHelper(50,70,800,330,BLACK,1);
    //lcd.rectHelper(30,70,770,330,WHITE,1);
    relay1_Button.x = 20;
    relay1_Button.y = 85;
    relay1_Button.w = 140;
    relay1_Button.h = 90;
    relay1_Button.textY = 85+30;
    relay1_Button.buttonName = " Relay 1";
    relay1_Button.create();
    
    relay2_Button.x = 20;
    relay2_Button.y = 205;
    relay2_Button.w = 140;
    relay2_Button.h = 90;
    relay2_Button.textY = 205+30;
    relay2_Button.buttonName = " Relay 2";
    relay2_Button.create();
    
    relay3_Button.x = 175;
    relay3_Button.y = 85;
    relay3_Button.w = 140;
    relay3_Button.h = 90;
    relay3_Button.textY = 85+30;
    relay3_Button.buttonName = " Relay 3";
    relay3_Button.create();
    
    relay4_Button.x = 175;
    relay4_Button.y = 205;
    relay4_Button.w = 140;
    relay4_Button.h = 90;
    relay4_Button.textY = 205+30;
    relay4_Button.buttonName = " Relay 4";
    relay4_Button.create();
    
    relay5_Button.x = 330;
    relay5_Button.y = 85;
    relay5_Button.w = 140;
    relay5_Button.h = 90;
    relay5_Button.textY = 85+30;
    relay5_Button.buttonName = " Relay 5";
    relay5_Button.create();
    
    relay6_Button.x = 330;
    relay6_Button.y = 205;
    relay6_Button.w = 140;
    relay6_Button.h = 90;
    relay6_Button.textY = 205+30;
    relay6_Button.buttonName = " Relay 6";
    relay6_Button.create();
    
    relay7_Button.x = 485;
    relay7_Button.y = 85;
    relay7_Button.w = 140;
    relay7_Button.h = 90;
    relay7_Button.textY = 85+30;
    relay7_Button.buttonName = " Relay 7";
    relay7_Button.create();
    
    relay8_Button.x = 485;
    relay8_Button.y = 205;
    relay8_Button.w = 140;
    relay8_Button.h = 90;
    relay8_Button.textY = 205+30;
    relay8_Button.buttonName = " Relay 8";
    relay8_Button.create();
    
    relay9_Button.x = 640;
    relay9_Button.y = 85;
    relay9_Button.w = 140;
    relay9_Button.h = 90;
    relay9_Button.textY = 85+30;
    relay9_Button.buttonName = " Relay 9";
    relay9_Button.create();
    
    settings_Button.x = 640;
    settings_Button.y = 205;
    settings_Button.w = 140;
    settings_Button.h = 90;
    settings_Button.textY = 205+30;
    settings_Button.buttonName = " Ayarlar";
    settings_Button.create();
    
}

bool buttonState(uint16_t xMin, uint16_t yMin, uint16_t xMax, uint16_t yMax){

    float xScale = 1024.0F/lcd.width();
    float yScale = 1024.0F/lcd.height();
    if((uint16_t)(tx/xScale)>xMin && (uint16_t)(tx/xScale)<xMax){
        if((uint16_t)(ty/yScale)>yMin && (uint16_t)(ty/yScale)<yMax){
            return true;
        }
    }
    return false;
    
}