From d081ca4eee1cc05d92e73bb73f203aa6227d3dca Mon Sep 17 00:00:00 2001 From: Melissa LeBlanc-Williams Date: Fri, 23 Oct 2020 14:26:22 -0600 Subject: [PATCH] Adding grayscale example and images --- .../EInkGray29BmpButtonDemo.ino | 99 ++++++++++++++++++ images/29gray4.bmp | Bin 0 -> 113718 bytes images/adabot_head.bmp | Bin 0 -> 113720 bytes images/blinka-213.bmp | Bin 0 -> 91800 bytes images/panda_head.bmp | Bin 0 -> 113720 bytes 5 files changed, 99 insertions(+) create mode 100644 examples/EInkGray29BmpButtonDemo/EInkGray29BmpButtonDemo.ino create mode 100644 images/29gray4.bmp create mode 100644 images/adabot_head.bmp create mode 100644 images/blinka-213.bmp create mode 100644 images/panda_head.bmp diff --git a/examples/EInkGray29BmpButtonDemo/EInkGray29BmpButtonDemo.ino b/examples/EInkGray29BmpButtonDemo/EInkGray29BmpButtonDemo.ino new file mode 100644 index 0000000..7d84ae9 --- /dev/null +++ b/examples/EInkGray29BmpButtonDemo/EInkGray29BmpButtonDemo.ino @@ -0,0 +1,99 @@ +#include // Core graphics library +#include "Adafruit_ThinkInk.h" +#include // SD card & FAT filesystem library +#include // Image-reading functions + + +#define SD_CS 5 +#define SRAM_CS -1 +#define EPD_CS 9 +#define EPD_DC 10 +#define EPD_RESET -1 // can set to -1 and share with microcontroller Reset! +#define EPD_BUSY -1 // can set to -1 to not use a pin (will wait a fixed delay) + +ThinkInk_290_Grayscale4_T5 display(EPD_DC, EPD_RESET, EPD_CS, SRAM_CS, EPD_BUSY); + +SdFat SD; // SD card filesystem +Adafruit_ImageReader_EPD reader(SD); // Image-reader object, pass in SD filesys + + +#define FILENAME1 "/adabot_head.bmp" +#define FILENAME2 "/panda_head.bmp" +#define FILENAME3 "/29gray4.bmp" + +#define BUTTON1 11 +#define BUTTON2 12 +#define BUTTON3 13 + + +void setup(void) { + Serial.begin(9600); + //while(!Serial); // Wait for Serial Monitor before continuing + + display.begin(); + display.clearBuffer(); + /* + Serial.print("Initializing filesystem..."); + display.setTextSize(3); + display.setCursor(10,10); + display.setTextColor(EPD_BLACK); + display.print("SD Card..."); + */ + display.display(); + + // SD card is pretty straightforward, a single call... + if(!SD.begin(SD_CS, SD_SCK_MHZ(10))) { // Breakouts require 10 MHz limit due to longer wires + Serial.println(F("SD begin() failed")); + display.println("failed!"); + display.display(); + for(;;); // Fatal error, do not continue + } + Serial.println("OK!"); + /* + display.println("OK!"); + display.display(); + + display.setCursor(10,100); + display.setTextSize(1); + display.println("Press buttons to display images!"); + display.display(); +*/ + pinMode(BUTTON1, INPUT_PULLUP); + pinMode(BUTTON2, INPUT_PULLUP); + pinMode(BUTTON3, INPUT_PULLUP); + delay(10); +} + +void loop() { + char selected_file[80] = {0}; + ImageReturnCode stat; // Status from image-reading functions + + + if (!digitalRead(BUTTON1)) { + strcpy(selected_file, FILENAME1); + Serial.println("Button 1 pressed"); + } + if (!digitalRead(BUTTON2)) { + strcpy(selected_file, FILENAME2); + Serial.println("Button 2 pressed"); + } + if (!digitalRead(BUTTON3)) { + strcpy(selected_file, FILENAME3); + Serial.println("Button 3 pressed"); + } + + + if (selected_file[0] != 0) { + display.clearBuffer(); + display.display(); + delay(500); + Serial.print("Loading "); + Serial.print(selected_file); + Serial.println(" to canvas..."); + display.clearBuffer(); + stat = reader.drawBMP(selected_file, display, 0, 0); + reader.printStatus(stat); // How'd we do? + display.display(); + } + +} diff --git a/images/29gray4.bmp b/images/29gray4.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2bac0161d96a2d7233cd45450145de5d4ad3ca5d GIT binary patch literal 113718 zcmeI4!I4x~5Cnx6GC>w#fbOyh8KxVCNlTyuk({PtqIj=^*l$LLbp#lPX*_MUz^CFB zI+_^$T@rYSfY04axO}q&-a^3V?kyPo5DC0Qz~}BIT)tTXZz14w_ZEzPhy-3D;B)s9 zF5fJHw-E5TdkaQCL;^1n@VR>lmv5H9TL}2vy#=EmB7v6(_}smO%Qs8lEd+e--h$B& zk-$p?eC~e6HO%A*tNkqWz`q$55z`)K@`Tl5@6F(_h#2EAlP9bedv6AZMZ_3~nLJ^& z*n2ZLEF#7@%;X8H#on92VG%J#F!|!^Yy$8Vdv6BOd1;I>0>arxXS*-(6?<<6(Rpc% zF#>{@eK-O5ioG|3=)5$>7y;q%tFs<_#on7ibY2=`jDX-_A5H+iV(-l$IxmeeMnE|H z>Z}J}vG-;WotMTKBOrL#hZBIW*n2aG&P!vA5fBc)I_tq#?7bO8=cO^m2nZhb;RN6- z_TCJl^U@e&1cbw{&U)|_dv6BOd1;I>0)mHqI05*Iy*GpCyfnrb0pakgvmSiK-kU*m zUK(SJfZ$;tP5{1Q@68}OFO4xqKsfyBtOsAQ_ht~Cm&O<)Ab8k^6M(PSdozg6OJj@? z5DvdO>%mv-y%|L3r7^|`2p;y~1mG+7-VCDi(imd|gu}1Sdhiu{ZwAqMX^b%ff`@%L z0r-l&H-qTBG{zVK;qa@o9(={#n?ZD58e@!r;9(z50KQ`H%^*52jWI?*IQ;6Y2Vb%G zW)Pj1#uy_Yc-V&%fUnqlGl`VI@D+P+2GMzGj4=X&hkZB!_=>$ZgXp|8#ux$N@T;>Pe8t|IL3CakV~l{{ zVINKazGCmqAUZFNF-AZ*{OYU+U$OUQ5S^FC7$YEf*oPB|A% literal 0 HcmV?d00001 diff --git a/images/adabot_head.bmp b/images/adabot_head.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5211754c2b51a52415cf9ac1be2ff09ffe823044 GIT binary patch literal 113720 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 yP9TLrIZ*l6In) zH{2H^u2$eIt0aAjM_1o;v48OvdD@}Z7qwcv2+E(JK(yStL);Ej?&1;n1Su*UBK|J! zim)gw4XW@&&chXO4MSkj9=6;yn@wZn;rdv5%)A)5f>h*<`ddmswo@Ql?$j8naO5j+ z`njE4On7=VnGlJSi!3|Hm^mQWR{^946=UZ41?_1h6yqwe9R|V# z5bUc!v|QzZ@hOvKg2XHFzH(XSmHWyZ)=h#GGtPlZ;7`i|$aV_wHdVmemjUI-Pl{F5 z^m99XDuk!Ewh2phCZKFAlh#O|LjGcJiQ^NTk_;Pg4