From f730a17a982926d6a62f4cdac948168f96be9b42 Mon Sep 17 00:00:00 2001 From: willem Date: Fri, 13 Aug 2021 16:40:18 +0200 Subject: [PATCH] lcd working --- reflow_plate_fw/platformio.ini | 9 +- reflow_plate_fw/src/board.h | 13 +- reflow_plate_fw/src/lcd.cpp | 432 ++------------------------------- reflow_plate_fw/src/lcd.h | 1 + reflow_plate_fw/src/main.cpp | 12 +- 5 files changed, 51 insertions(+), 416 deletions(-) diff --git a/reflow_plate_fw/platformio.ini b/reflow_plate_fw/platformio.ini index 7f268b6..0784a53 100644 --- a/reflow_plate_fw/platformio.ini +++ b/reflow_plate_fw/platformio.ini @@ -12,8 +12,11 @@ platform = ststm32 board = blackpill_f411ce framework = arduino -upload_protocol = dfu +upload_protocol = stlink +debug_tool = stlink lib_deps = - adafruit/MAX6675 library@^1.1.0 - adafruit/Adafruit SSD1306@^2.4.6 + yuriisalimov/MAX6675_Thermocouple@^2.0.2 + bodmer/TFT_eSPI@^2.3.70 lib_ldf_mode = deep+ +build_flags = + diff --git a/reflow_plate_fw/src/board.h b/reflow_plate_fw/src/board.h index 504ca6f..e9dce91 100644 --- a/reflow_plate_fw/src/board.h +++ b/reflow_plate_fw/src/board.h @@ -1,12 +1,15 @@ #pragma once -#define LCD_SDA PB3 -#define LCD_SCL PB6 +#define LCD_MOSI PA7 +#define LCD_SCLK PA5 +#define LCD_RES PA12 +#define LCD_DC PB1 +#define LCD_CS PB0 -#define THERM_CS PA4 -#define THERM_DO PA7 -#define THERM_CL PA6 +#define THERM_CS PB4 +#define THERM_SO PB5 +#define THERM_CL PB6 #define BUt_LEFT PB15 #define BUt_RIGHT PA10 diff --git a/reflow_plate_fw/src/lcd.cpp b/reflow_plate_fw/src/lcd.cpp index 851a576..eac1f81 100644 --- a/reflow_plate_fw/src/lcd.cpp +++ b/reflow_plate_fw/src/lcd.cpp @@ -1,421 +1,41 @@ #include "lcd.h" -/************************************************************************** - This is an example for our Monochrome OLEDs based on SSD1306 drivers - Pick one up today in the adafruit shop! - ------> http://www.adafruit.com/category/63_98 +// void initLCD(void) +// { - This example is for a 128x64 pixel display using I2C to communicate - 3 pins are required to interface (two I2C and one reset). +// } - Adafruit invests time and resources providing this open - source code, please support Adafruit and open-source - hardware by purchasing products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries, - with contributions from the open source community. - BSD license, check license.txt for more information - All text above, and the splash screen below must be - included in any redistribution. - **************************************************************************/ - -#include -#include -#include -#include - -#define SCREEN_WIDTH 128 // OLED display width, in pixels -#define SCREEN_HEIGHT 64 // OLED display height, in pixels - -// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) -// The pins for I2C are defined by the Wire-library. -// On an arduino UNO: A4(SDA), A5(SCL) -// On an arduino MEGA 2560: 20(SDA), 21(SCL) -// On an arduino LEONARDO: 2(SDA), 3(SCL), ... -#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin) -#define SCREEN_ADDRESS 0x78 ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32 -Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); - -#define NUMFLAKES 10 // Number of snowflakes in the animation example - -#define LOGO_HEIGHT 16 -#define LOGO_WIDTH 16 -static const unsigned char PROGMEM logo_bmp[] = -{ 0b00000000, 0b11000000, - 0b00000001, 0b11000000, - 0b00000001, 0b11000000, - 0b00000011, 0b11100000, - 0b11110011, 0b11100000, - 0b11111110, 0b11111000, - 0b01111110, 0b11111111, - 0b00110011, 0b10011111, - 0b00011111, 0b11111100, - 0b00001101, 0b01110000, - 0b00011011, 0b10100000, - 0b00111111, 0b11100000, - 0b00111111, 0b11110000, - 0b01111100, 0b11110000, - 0b01110000, 0b01110000, - 0b00000000, 0b00110000 }; +// void handleLCD(void) +// { +// } -void testdrawline() { - int16_t i; +unsigned int rainbow(byte value); - display.clearDisplay(); // Clear display buffer +#include // Include the graphics library - for(i=0; i=0; i-=4) { - display.drawLine(0, display.height()-1, display.width()-1, i, SSD1306_WHITE); - display.display(); - delay(1); - } - delay(250); - - display.clearDisplay(); - - for(i=display.width()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, i, 0, SSD1306_WHITE); - display.display(); - delay(1); - } - for(i=display.height()-1; i>=0; i-=4) { - display.drawLine(display.width()-1, display.height()-1, 0, i, SSD1306_WHITE); - display.display(); - delay(1); - } - delay(250); - - display.clearDisplay(); - - for(i=0; i0; i-=3) { - // The INVERSE color is used so circles alternate white/black - display.fillCircle(display.width() / 2, display.height() / 2, i, SSD1306_INVERSE); - display.display(); // Update screen with each newly-drawn circle - delay(1); - } - - delay(2000); -} - -void testdrawroundrect(void) { - display.clearDisplay(); - - for(int16_t i=0; i0; i-=5) { - // The INVERSE color is used so triangles alternate white/black - display.fillTriangle( - display.width()/2 , display.height()/2-i, - display.width()/2-i, display.height()/2+i, - display.width()/2+i, display.height()/2+i, SSD1306_INVERSE); - display.display(); - delay(1); - } - - delay(2000); -} - -void testdrawchar(void) { - display.clearDisplay(); - - display.setTextSize(1); // Normal 1:1 pixel scale - display.setTextColor(SSD1306_WHITE); // Draw white text - display.setCursor(0, 0); // Start at top-left corner - display.cp437(true); // Use full 256 char 'Code Page 437' font - - // Not all the characters will fit on the display. This is normal. - // Library will draw what it can and the rest will be clipped. - for(int16_t i=0; i<256; i++) { - if(i == '\n') display.write(' '); - else display.write(i); - } - - display.display(); - delay(2000); -} - -void testdrawstyles(void) { - display.clearDisplay(); - - display.setTextSize(1); // Normal 1:1 pixel scale - display.setTextColor(SSD1306_WHITE); // Draw white text - display.setCursor(0,0); // Start at top-left corner - display.println(F("Hello, world!")); - - display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw 'inverse' text - display.println(3.141592); - - display.setTextSize(2); // Draw 2X-scale text - display.setTextColor(SSD1306_WHITE); - display.print(F("0x")); display.println(0xDEADBEEF, HEX); - - display.display(); - delay(2000); -} - -void testscrolltext(void) { - display.clearDisplay(); - - display.setTextSize(2); // Draw 2X-scale text - display.setTextColor(SSD1306_WHITE); - display.setCursor(10, 0); - display.println(F("scroll")); - display.display(); // Show initial text - delay(100); - - // Scroll in various directions, pausing in-between: - display.startscrollright(0x00, 0x0F); - delay(2000); - display.stopscroll(); - delay(1000); - display.startscrollleft(0x00, 0x0F); - delay(2000); - display.stopscroll(); - delay(1000); - display.startscrolldiagright(0x00, 0x07); - delay(2000); - display.startscrolldiagleft(0x00, 0x07); - delay(2000); - display.stopscroll(); - delay(1000); -} - -void testdrawbitmap(void) { - display.clearDisplay(); - - display.drawBitmap( - (display.width() - LOGO_WIDTH ) / 2, - (display.height() - LOGO_HEIGHT) / 2, - logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1); - display.display(); - delay(1000); -} - -#define XPOS 0 // Indexes into the 'icons' array in function below -#define YPOS 1 -#define DELTAY 2 - -void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) { - int8_t f, icons[NUMFLAKES][3]; - - // Initialize 'snowflake' positions - for(f=0; f< NUMFLAKES; f++) { - icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width()); - icons[f][YPOS] = -LOGO_HEIGHT; - icons[f][DELTAY] = random(1, 6); - Serial.print(F("x: ")); - Serial.print(icons[f][XPOS], DEC); - Serial.print(F(" y: ")); - Serial.print(icons[f][YPOS], DEC); - Serial.print(F(" dy: ")); - Serial.println(icons[f][DELTAY], DEC); - } - - for(;;) { // Loop forever... - display.clearDisplay(); // Clear the display buffer - - // Draw each snowflake: - for(f=0; f< NUMFLAKES; f++) { - display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, SSD1306_WHITE); - } - - display.display(); // Show the display buffer on the screen - delay(200); // Pause for 1/10 second - - // Then update coordinates of each flake... - for(f=0; f< NUMFLAKES; f++) { - icons[f][YPOS] += icons[f][DELTAY]; - // If snowflake is off the bottom of the screen... - if (icons[f][YPOS] >= display.height()) { - // Reinitialize to a random position, just off the top - icons[f][XPOS] = random(1 - LOGO_WIDTH, display.width()); - icons[f][YPOS] = -LOGO_HEIGHT; - icons[f][DELTAY] = random(1, 6); - } - } - } -} - - -void initLCD() { - Serial.begin(9600); - - // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally - if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { - Serial.println(F("SSD1306 allocation failed")); - for(;;); // Don't proceed, loop forever - } - - // Show initial display buffer contents on the screen -- - // the library initializes this with an Adafruit splash screen. - display.display(); - delay(2000); // Pause for 2 seconds - - // Clear the buffer - display.clearDisplay(); - - // Draw a single pixel in white - display.drawPixel(10, 10, SSD1306_WHITE); - - // Show the display buffer on the screen. You MUST call display() after - // drawing commands to make them visible on screen! - display.display(); - delay(2000); - // display.display() is NOT necessary after every single drawing command, - // unless that's what you want...rather, you can batch up a bunch of - // drawing operations and then update the screen all at once by calling - // display.display(). These examples demonstrate both approaches... - - testdrawline(); // Draw many lines - - testdrawrect(); // Draw rectangles (outlines) - - testfillrect(); // Draw rectangles (filled) - - testdrawcircle(); // Draw circles (outlines) - - testfillcircle(); // Draw circles (filled) - - testdrawroundrect(); // Draw rounded rectangles (outlines) - - testfillroundrect(); // Draw rounded rectangles (filled) - - testdrawtriangle(); // Draw triangles (outlines) - - testfilltriangle(); // Draw triangles (filled) - - testdrawchar(); // Draw characters of the default font - - testdrawstyles(); // Draw 'stylized' characters - - testscrolltext(); // Draw scrolling text - - testdrawbitmap(); // Draw a small bitmap image - - // Invert and restore display, pausing in-between - display.invertDisplay(true); - delay(1000); - display.invertDisplay(false); - delay(1000); - - testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); // Animate bitmaps -} - -void handleLCD() { +// ------------------------------------------------------------------------- +// Main loop +// ------------------------------------------------------------------------- +void handleLCD() +{ + //tft.setTextColor(TFT_WHITE); + //tft.setTextPadding(60); + tft.drawString("hello World!", 10, 10); } \ No newline at end of file diff --git a/reflow_plate_fw/src/lcd.h b/reflow_plate_fw/src/lcd.h index a20d910..c571ae2 100644 --- a/reflow_plate_fw/src/lcd.h +++ b/reflow_plate_fw/src/lcd.h @@ -2,5 +2,6 @@ #include "board.h" + void initLCD(void); void handleLCD(void); diff --git a/reflow_plate_fw/src/main.cpp b/reflow_plate_fw/src/main.cpp index c5a006b..6e55938 100644 --- a/reflow_plate_fw/src/main.cpp +++ b/reflow_plate_fw/src/main.cpp @@ -6,19 +6,27 @@ #include "button.h" #include "heater.h" -void setup() { +void setup() +{ // put your setup code here, to run once: initLCD(); initThermo(); initButton(); initHeater(); + pinMode(LED_BUILTIN, OUTPUT); } -void loop() { +void loop() +{ // put your main code here, to run repeatedly: handleLCD(); handleThermo(); handleButton(); handleHeater(); + + digitalWrite(LED_BUILTIN, 1); + delay(500); + digitalWrite(LED_BUILTIN, 0); + delay(500); } \ No newline at end of file