Test for graphic and bargraph for ST7735 160x80 tft display

Dependencies:   mbed Adafruit_ST7735 Adafruit_GFX

Fork of ST7735_TFT_graphicstest_Bargraphtest by Joël Imbaud

http://mbed.org/media/uploads/jimbaud/screen1.jpg

Files at this revision

API Documentation at this revision

Comitter:
jimbaud
Date:
Wed May 06 13:14:26 2020 +0000
Parent:
1:8742c832cb43
Commit message:
Test for graphic and bargraph for ST7735 160x80 tft display

Changed in this revision

Adafruit_ST7735.lib 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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- a/Adafruit_ST7735.lib	Thu Jul 30 22:58:37 2015 +0000
+++ b/Adafruit_ST7735.lib	Wed May 06 13:14:26 2020 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/users/justinkim/code/Adafruit_ST7735/#7d45da201480
+https://os.mbed.com/users/jimbaud/code/Adafruit_ST7735/#4f0de03255b6
--- a/main.cpp	Thu Jul 30 22:58:37 2015 +0000
+++ b/main.cpp	Wed May 06 13:14:26 2020 +0000
@@ -1,8 +1,39 @@
 #include "mbed.h"
 #include "Adafruit_ST7735.h"
 
+
+AnalogIn analogIn(A3); // Potentiometer plugged as a voltage divider on the input A3
+
+/***************************************************
+Simple Bar Graph for the 160x80 color SPI display
+Code adapted from here: http://henrysbench.capnfatz.com/henrys-bench/arduino-adafruit-gfx-library-user-guide/arduino-adafruit-gfx-bar-graph/
+
+Connexions
+
+ * Pins
+ * LED 3.3V
+ * SCL D13
+ * SDA D11(MOSI)
+ * DC D8
+ * RES D9
+ * CS D10
+ * GND GND
+ * VCC 3.3V
+
+ ****************************************************/
+
+#define BACKCOLOR 0x0000
+#define BARCOLOR 0x0620
+#define SCALECOLOR 0xFFFF
+
+int LastPercent, LastPercent2 = 0;
+
 Adafruit_ST7735 tft(D11, D12, D13, D10, D8, D9); // MOSI, MISO, SCLK, SSEL, TFT_DC, TFT_RST
 
+void drawScale(void);
+void drawBar (int nPer);
+void drawBar2 (int nPer2);
+
 void testlines(uint16_t color);
 void testfastlines(uint16_t color1, uint16_t color2);
 void testdrawrects(uint16_t color);
@@ -15,211 +46,300 @@
 void testdrawtext(char *text, uint16_t color);
 void tftPrintTest(void);
 
+
+
+// tft.setRotation(tft.getRotation()+1);
+
 int main(void)
 {
-  // Use this initializer if you're using a 1.8" TFT
-  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
+
+    tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
+    tft.fillScreen(BACKCOLOR);
+
+    tft.fillScreen(ST7735_BLACK);
+    testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE);
+    wait_ms(1000);
+
+    // tft print function!
+    tftPrintTest();
+    wait_ms(1000);
+
+    tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN);
+    wait_ms(500);
+
+    testlines(ST7735_YELLOW);
+    wait_ms(500);
 
-  tft.fillScreen(ST7735_BLACK);
-  testdrawtext("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur adipiscing ante sed nibh tincidunt feugiat. Maecenas enim massa, fringilla sed malesuada et, malesuada sit amet turpis. Sed porttitor neque ut ante pretium vitae malesuada nunc bibendum. Nullam aliquet ultrices massa eu hendrerit. Ut sed nisi lorem. In vestibulum purus a tortor imperdiet posuere. ", ST7735_WHITE);
-  wait_ms(1000);
+    testfastlines(ST7735_RED, ST7735_BLUE);
+    wait_ms(500);
+
+    testdrawrects(ST7735_GREEN);
+    wait_ms(500);
+
+    testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
+    wait_ms(500);
+
+    tft.fillScreen(ST7735_BLACK);
+    testfillcircles(10, ST7735_BLUE);
+    testdrawcircles(10, ST7735_WHITE);
+    wait_ms(500);
+
+    testroundrects();
+    wait_ms(500);
+
+    testtriangles();
+    wait_ms(500);
 
-  // tft print function!
-  tftPrintTest();
-  wait_ms(1000);
-  
-  tft.drawPixel(tft.width()/2, tft.height()/2, ST7735_GREEN);
-  wait_ms(500);
-  
-  testlines(ST7735_YELLOW);
-  wait_ms(500);
-  
-  testfastlines(ST7735_RED, ST7735_BLUE);
-  wait_ms(500);
-  
-  testdrawrects(ST7735_GREEN);
-  wait_ms(500);
-  
-  testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
-  wait_ms(500);
-  
-  tft.fillScreen(ST7735_BLACK);
-  testfillcircles(10, ST7735_BLUE);
-  testdrawcircles(10, ST7735_WHITE);
-  wait_ms(500);
-  
-  testroundrects();
-  wait_ms(500);
-  
-  testtriangles();
-  wait_ms(500);
-  
-  mediabuttons();
-  wait_ms(500);
-  
-  while(1)
-  {
-      tft.invertDisplay(true);
-      wait_ms(500);
-      tft.invertDisplay(false);
-      wait_ms(500);
-  }
+    mediabuttons();
+    wait_ms(500);
+
+    tft.invertDisplay(true);
+    wait_ms(500);
+    tft.invertDisplay(false);
+    wait_ms(500);
+
+// Bargraph section
+    tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
+    tft.fillScreen(BACKCOLOR);
+
+    drawScale();
+
+    int newPercent;
+    tft.setTextSize(1);
+    tft.setCursor(24, 0);
+    tft.setTextColor(ST7735_WHITE);
+    tft.setTextWrap(true);
+    tft.printf("Test Bargraph");
+    tft.setCursor(24, 47);
+    tft.printf("100");
+    tft.setCursor(24, 71);
+    tft.printf("75");
+    tft.setCursor(24, 96);
+    tft.printf("50");
+    tft.setCursor(24, 121);
+    tft.printf("25");
+    tft.setCursor(24, 146);
+    tft.printf("0");
+    while(1) {
+
+        newPercent = analogIn.read()*100;
+
+        if (newPercent != LastPercent) {
+            drawBar(newPercent);
+            drawBar2(newPercent - 2);
+            wait_ms(100);
+        }
+
+    }
 }
 
-void testlines(uint16_t color) {
-  tft.fillScreen(ST7735_BLACK);
-  for (int16_t x=0; x < tft.width(); x+=6) {
-    tft.drawLine(0, 0, x, tft.height()-1, color);
-  }
-  for (int16_t y=0; y < tft.height(); y+=6) {
-    tft.drawLine(0, 0, tft.width()-1, y, color);
-  }
 
-  tft.fillScreen(ST7735_BLACK);
-  for (int16_t x=0; x < tft.width(); x+=6) {
-    tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
-  }
-  for (int16_t y=0; y < tft.height(); y+=6) {
-    tft.drawLine(tft.width()-1, 0, 0, y, color);
-  }
-
-  tft.fillScreen(ST7735_BLACK);
-  for (int16_t x=0; x < tft.width(); x+=6) {
-    tft.drawLine(0, tft.height()-1, x, 0, color);
-  }
-  for (int16_t y=0; y < tft.height(); y+=6) {
-    tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
-  }
-
-  tft.fillScreen(ST7735_BLACK);
-  for (int16_t x=0; x < tft.width(); x+=6) {
-    tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
-  }
-  for (int16_t y=0; y < tft.height(); y+=6) {
-    tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
-  }
+void drawScale()
+{
+    tft.drawFastVLine(45, 50,100, SCALECOLOR ); // Vertical Scale Line
+    tft.drawFastHLine(37, 50, 8, SCALECOLOR); // Major Division
+    tft.drawFastHLine(40, 74, 5, SCALECOLOR); // Minor Division
+    tft.drawFastHLine(37, 99, 8, SCALECOLOR); // Major Division
+    tft.drawFastHLine(40, 124, 5, SCALECOLOR); // Minor Division
+    tft.drawFastHLine(37, 149, 8, SCALECOLOR);  // Major Division
 }
 
-void testfastlines(uint16_t color1, uint16_t color2) {
-  tft.fillScreen(ST7735_BLACK);
-  for (int16_t y=0; y < tft.height(); y+=5) {
-    tft.drawFastHLine(0, y, tft.width(), color1);
-  }
-  for (int16_t x=0; x < tft.width(); x+=5) {
-    tft.drawFastVLine(x, 0, tft.height(), color2);
-  }
+
+void drawBar (int nPer)
+{
+
+    if(nPer < LastPercent) {
+        tft.fillRect(50, 50 + (100-LastPercent), 10, LastPercent - nPer,  BACKCOLOR);
+    }
+    if(nPer>LastPercent && nPer<90) {
+        tft.fillRect(50, 50 + (100-nPer), 10, nPer - LastPercent,  BARCOLOR);
+    } else {
+        tft.fillRect(50, 50 + (100-nPer), 10, nPer - LastPercent,  ST7735_BLUE );
+    }
+    LastPercent = nPer;
+
 }
+void drawBar2 (int nPer2)
+{
 
-void testdrawrects(uint16_t color) {
-  tft.fillScreen(ST7735_BLACK);
-  for (int16_t x=0; x < tft.width(); x+=6) {
-    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
-  }
+    if(nPer2 < LastPercent2) {
+        tft.fillRect(65, 50 + (100-LastPercent2), 10, LastPercent2 - nPer2,  BACKCOLOR);
+    }
+    if(nPer2>LastPercent2 && nPer2<90) {
+        tft.fillRect(65, 50 + (100-nPer2), 10, nPer2 - LastPercent2,  BARCOLOR);
+    } else {
+        tft.fillRect(65, 50 + (100-nPer2), 10, nPer2 - LastPercent2,  ST7735_RED );
+    }
+    LastPercent2 = nPer2;
+
 }
 
-void testfillrects(uint16_t color1, uint16_t color2) {
-  tft.fillScreen(ST7735_BLACK);
-  for (int16_t x=tft.width()-1; x > 6; x-=6) {
-    tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
-    tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
-  }
-}
+void testlines(uint16_t color)
+{
+    tft.fillScreen(ST7735_BLACK);
+    for (int16_t x=0; x < tft.width(); x+=6) {
+        tft.drawLine(0, 0, x, tft.height()-1, color);
+    }
+    for (int16_t y=0; y < tft.height(); y+=6) {
+        tft.drawLine(0, 0, tft.width()-1, y, color);
+    }
 
-void testfillcircles(uint8_t radius, uint16_t color) {
-  for (int16_t x=radius; x < tft.width(); x+=radius*2) {
-    for (int16_t y=radius; y < tft.height(); y+=radius*2) {
-      tft.fillCircle(x, y, radius, color);
+    tft.fillScreen(ST7735_BLACK);
+    for (int16_t x=0; x < tft.width(); x+=6) {
+        tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
+    }
+    for (int16_t y=0; y < tft.height(); y+=6) {
+        tft.drawLine(tft.width()-1, 0, 0, y, color);
+    }
+
+    tft.fillScreen(ST7735_BLACK);
+    for (int16_t x=0; x < tft.width(); x+=6) {
+        tft.drawLine(0, tft.height()-1, x, 0, color);
     }
-  }
+    for (int16_t y=0; y < tft.height(); y+=6) {
+        tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
+    }
+
+    tft.fillScreen(ST7735_BLACK);
+    for (int16_t x=0; x < tft.width(); x+=6) {
+        tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
+    }
+    for (int16_t y=0; y < tft.height(); y+=6) {
+        tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
+    }
 }
 
-void testdrawcircles(uint8_t radius, uint16_t color) {
-  for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
-    for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
-      tft.drawCircle(x, y, radius, color);
+void testfastlines(uint16_t color1, uint16_t color2)
+{
+    tft.fillScreen(ST7735_BLACK);
+    for (int16_t y=0; y < tft.height(); y+=5) {
+        tft.drawFastHLine(0, y, tft.width(), color1);
+    }
+    for (int16_t x=0; x < tft.width(); x+=5) {
+        tft.drawFastVLine(x, 0, tft.height(), color2);
     }
-  }
+}
+
+void testdrawrects(uint16_t color)
+{
+    tft.fillScreen(ST7735_BLACK);
+    for (int16_t x=0; x < tft.width(); x+=6) {
+        tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2, x, x, color);
+    }
 }
 
-void testtriangles() {
-  tft.fillScreen(ST7735_BLACK);
-  int color = 0xF800;
-  int t;
-  int w = tft.width()/2;
-  int x = tft.height()-1;
-  int y = 0;
-  int z = tft.width();
-  for(t = 0 ; t <= 15; t+=1) {
-    tft.drawTriangle(w, y, y, x, z, x, color);
-    x-=4;
-    y+=4;
-    z-=4;
-    color+=100;
-  }
+void testfillrects(uint16_t color1, uint16_t color2)
+{
+    tft.fillScreen(ST7735_BLACK);
+    for (int16_t x=tft.width()-1; x > 6; x-=6) {
+        tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2, x, x, color1);
+        tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2, x, x, color2);
+    }
+}
+
+void testfillcircles(uint8_t radius, uint16_t color)
+{
+    for (int16_t x=radius; x < tft.width(); x+=radius*2) {
+        for (int16_t y=radius; y < tft.height(); y+=radius*2) {
+            tft.fillCircle(x, y, radius, color);
+        }
+    }
+}
+
+void testdrawcircles(uint8_t radius, uint16_t color)
+{
+    for (int16_t x=0; x < tft.width()+radius; x+=radius*2) {
+        for (int16_t y=0; y < tft.height()+radius; y+=radius*2) {
+            tft.drawCircle(x, y, radius, color);
+        }
+    }
 }
 
-void testroundrects() {
-  tft.fillScreen(ST7735_BLACK);
-  int color = 100;
-  int i;
-  int t;
-  for(t = 0 ; t <= 4; t+=1) {
-    int x = 0;
+void testtriangles()
+{
+    tft.fillScreen(ST7735_BLACK);
+    int color = 0xF800;
+    int t;
+    int w = tft.width()/2;
+    int x = tft.height()-1;
     int y = 0;
-    int w = tft.width()-2;
-    int h = tft.height()-2;
-    for(i = 0 ; i <= 16; i+=1) {
-      tft.drawRoundRect(x, y, w, h, 5, color);
-      x+=2;
-      y+=3;
-      w-=4;
-      h-=6;
-      color+=1100;
+    int z = tft.width();
+    for(t = 0 ; t <= 15; t+=1) {
+        tft.drawTriangle(w, y, y, x, z, x, color);
+        x-=4;
+        y+=4;
+        z-=4;
+        color+=100;
     }
-    color+=100;
-  }
+}
+
+void testroundrects()
+{
+    tft.fillScreen(ST7735_BLACK);
+    int color = 100;
+    int i;
+    int t;
+    for(t = 0 ; t <= 4; t+=1) {
+        int x = 0;
+        int y = 0;
+        int w = tft.width()-2;
+        int h = tft.height()-2;
+        for(i = 0 ; i <= 16; i+=1) {
+            tft.drawRoundRect(x, y, w, h, 5, color);
+            x+=2;
+            y+=3;
+            w-=4;
+            h-=6;
+            color+=1100;
+        }
+        color+=100;
+    }
 }
 
-void mediabuttons() {
-  // play
-  tft.fillScreen(ST7735_BLACK);
-  tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
-  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
-  wait_ms(500);
-  // pause
-  tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
-  tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
-  tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
-  wait_ms(500);
-  // play color
-  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
-  wait_ms(500);
-  // pause color
-  tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
-  tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
-  wait_ms(500);
-  // play color
-  tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
+void mediabuttons()
+{
+    // play
+    tft.fillScreen(ST7735_BLACK);
+    tft.fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
+    tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
+    wait_ms(500);
+    // pause
+    tft.fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
+    tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
+    tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
+    wait_ms(500);
+    // play color
+    tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
+    wait_ms(500);
+    // pause color
+    tft.fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
+    tft.fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
+    wait_ms(500);
+    // play color
+    tft.fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
 }
 
-void testdrawtext(char *text, uint16_t color) {
-  tft.setCursor(0, 0);
-  tft.setTextColor(color);
-  tft.setTextWrap(true);
-  tft.printf("%s",text);
+void testdrawtext(char *text, uint16_t color)
+{
+    tft.setCursor(0, 0);
+    tft.setTextColor(color);
+    tft.setTextWrap(true);
+    tft.printf("%s",text);
 }
 
-void tftPrintTest() {
-  tft.setTextWrap(false);
-  tft.fillScreen(ST7735_BLACK);
-  tft.setCursor(0, 30);
-  tft.setTextColor(ST7735_RED);
-  tft.setTextSize(1);
-  tft.printf("Hello World!\r\n");
-  tft.setTextColor(ST7735_YELLOW);
-  tft.setTextSize(2);
-  tft.printf("Hello World!\r\n");
-  tft.setTextColor(ST7735_GREEN);
-  tft.setTextSize(3);
-  tft.printf("Hello World!\r\n");
+void tftPrintTest()
+{
+    tft.setTextWrap(false);
+    tft.fillScreen(ST7735_BLACK);
+    tft.setCursor(0, 30);
+    tft.setTextColor(ST7735_RED);
+    tft.setTextSize(1);
+    tft.printf("Hello World!\r\n");
+    tft.setTextColor(ST7735_YELLOW);
+    tft.setTextSize(2);
+    tft.printf("Hello World!\r\n");
+    tft.setTextColor(ST7735_GREEN);
+    tft.setTextSize(3);
+    tft.printf("Hello World!\r\n");
 }
+
--- a/mbed.bld	Thu Jul 30 22:58:37 2015 +0000
+++ b/mbed.bld	Wed May 06 13:14:26 2020 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/bad568076d81
\ No newline at end of file
+https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400
\ No newline at end of file