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

Files at this revision

API Documentation at this revision

Comitter:
BugraTufan
Date:
Tue May 28 23:22:51 2019 +0000
Parent:
3:4a3e169866a2
Commit message:
deneme1

Changed in this revision

BNO055.lib Show annotated file Show diff for this revision Revisions of this file
RA8875.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/BNO055.lib	Tue May 28 23:22:51 2019 +0000
@@ -0,0 +1,1 @@
+https://os.mbed.com/users/StressedDave/code/BNO055/#1f722ffec323
--- a/RA8875.h	Thu Mar 14 12:00:15 2019 +0000
+++ b/RA8875.h	Tue May 28 23:22:51 2019 +0000
@@ -124,7 +124,7 @@
 
 // Colors (RGB565)
 #define	BLACK            		0x0000
-#define	BLUE             		0x001F
+#define	BLUE             		0x32f2
 #define	RED              		0xF800
 #define	GREEN            		0x07E0
 #define CYAN             		0x07FF
--- a/main.cpp	Thu Mar 14 12:00:15 2019 +0000
+++ b/main.cpp	Tue May 28 23:22:51 2019 +0000
@@ -1,21 +1,96 @@
 #include "RA8875.h"
+#include <string>
+#include <stdlib.h>
+#include <time.h>
+#include "BNO055.h"
+
 
-#define MOSI    PTD2
-#define MISO    PTD3
-#define SCLK    PTD1
-#define CS      PTD0
-#define RST     PTC4
-DigitalIn   INT(PTC12);
+#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;
 
-Serial pc(USBTX, USBRX); // tx, rxSerial pc(USBTX, USBRX); // tx, rx
+
+
+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()
@@ -28,69 +103,287 @@
     lcd.fillScreen(BLACK);
     lcd.touchEnable(true);
 
-    /* Render some text! */
-    lcd.textEnlarge(3);
-    lcd.textWritePro(10,30,WHITE,0,"Hello, Jacob! ");
-    lcd.textEnlarge(1.2);
-    lcd.textWritePro(10,150,WHITE,0, "I am finally working!");
-    lcd.textWritePro(10, 450, GREEN, 0, "Testing 1.. 2");
-    wait(2);
-    lcd.fillScreen(BLACK);
+
     
     lcd.graphicsMode();
-    lcd.rectHelper(0,0,800,480,WHITE,1);
-    lcd.rectHelper(5,5,794,474,BLACK,1);
-    
-    //lcd.boxDraw(0,0,400,400,10,GREEN,YELLOW);
-    lcd.boxDraw(10,10,459,459,10,GREY,ORANGE);
-    
-    
-//////// Drawing a line for a graph
-
-
     lcd.drawPixel(50,200,WHITE);
-    
-    
-
-    
-    
-    
-
-    /*
-    lcd.textColor(RA8875_WHITE, RA8875_RED);
-    lcd.textWrite(string);
-    lcd.textTransparent(RA8875_CYAN);
-    lcd.textWrite(string);
-    lcd.textTransparent(RA8875_GREEN);
-    lcd.textWrite(string);
-    lcd.textColor(RA8875_YELLOW, RA8875_CYAN);
-    lcd.textWrite(string);
-    //lcd.textColor(RA8875_BLACK, RA8875_MAGENTA);
-    lcd.textWrite(string);
-    */
-
-
-    //lcd.drawCircle(100, 100, 50, RA8875_RED);
-    //lcd.fillCircle(100, 100, 50, RA8875_RED);
-
-    //lcd.fillCircle(200, 200, 50, RA8875_RED);
-
+    menu();
+    menu1();
 
     float xScale = 1024.0F/lcd.width();
     float yScale = 1024.0F/lcd.height();
     bool INT = 1;
 
-    /* Wait around for touch events */
     while(1) {
         if (INT == !1);
         {
             if (lcd.touched()) {
-                //Serial.print("Touch: ");
                 lcd.touchRead(&tx, &ty);
-                //Serial.print(tx); Serial.print(", "); Serial.println(ty);
-                /* Draw a circle */
-                lcd.fillCircle((uint16_t)(tx/xScale), (uint16_t)(ty/yScale), 1, WHITE);
+                //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);
+                }
+                
             }
         }
     }
-}
\ No newline at end of file
+}
+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;
+    
+}
+
+
+
+    
\ No newline at end of file