|
@@ -0,0 +1,90 @@
|
|
|
+// Use the MD_MAX72XX library to Print some text on the display
|
|
|
+//
|
|
|
+// Demonstrates the use of the library to print text.
|
|
|
+//
|
|
|
+// User can enter text on the serial monitor and this will display as a
|
|
|
+// message on the display.
|
|
|
+// Library doc https://majicdesigns.github.io/MD_MAX72XX/class_m_d___m_a_x72_x_x.html
|
|
|
+
|
|
|
+#include <MD_MAX72xx.h>
|
|
|
+#include <SPI.h>
|
|
|
+
|
|
|
+#define PRINT(s, v) { Serial.print(F(s)); Serial.print(v); }
|
|
|
+
|
|
|
+// Define the number of devices we have in the chain and the hardware interface
|
|
|
+// NOTE: These pin numbers will probably not work with your hardware and may
|
|
|
+// need to be adapted
|
|
|
+#define HARDWARE_TYPE MD_MAX72XX::DR1CR0RR0_HW
|
|
|
+#define MAX_DEVICES 8
|
|
|
+
|
|
|
+#define CLK_PIN D5 // or SCK
|
|
|
+#define DATA_PIN D7 // or MOSI
|
|
|
+#define CS_PIN D4 // or SS
|
|
|
+
|
|
|
+// 'test-frame', 32x16px
|
|
|
+const unsigned char epd_bitmap_test_frame [] PROGMEM = {
|
|
|
+ 0x00, 0x00, 0x00, 0x00,
|
|
|
+ 0x00, 0x00, 0x00, 0x00,
|
|
|
+ 0x00, 0x00, 0x00, 0x00,
|
|
|
+ 0x22, 0x00, 0x00, 0x44,
|
|
|
+ 0x44, 0x00, 0x00, 0x22,
|
|
|
+ 0x89, 0x80, 0x01, 0x91,
|
|
|
+ 0x92, 0x40, 0x02, 0x49,
|
|
|
+ 0x82, 0x40, 0x02, 0x41,
|
|
|
+ 0x81, 0x80, 0x01, 0x81,
|
|
|
+ 0x80, 0x04, 0x40, 0x01,
|
|
|
+ 0x80, 0x09, 0x20, 0x01,
|
|
|
+ 0x87, 0x89, 0x21, 0xe1,
|
|
|
+ 0x40, 0x06, 0xc0, 0x02,
|
|
|
+ 0x27, 0x80, 0x01, 0xe4,
|
|
|
+ 0x00, 0x00, 0x00, 0x00,
|
|
|
+ 0x00, 0x00, 0x00, 0x00
|
|
|
+};
|
|
|
+
|
|
|
+// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 80)
|
|
|
+const int epd_bitmap_allArray_LEN = 1;
|
|
|
+const unsigned char* epd_bitmap_allArray[1] = {
|
|
|
+ epd_bitmap_test_frame
|
|
|
+};
|
|
|
+
|
|
|
+
|
|
|
+// SPI hardware interface
|
|
|
+MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
|
|
|
+// Arbitrary pins
|
|
|
+//MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
|
|
|
+
|
|
|
+byte fByte(byte c){ char r=0; for(byte i = 0; i < 8; i++){ r <<= 1; r |= c & 1; c >>= 1; } return r;}
|
|
|
+void renderFrame(){
|
|
|
+
|
|
|
+ //Top half of the display
|
|
|
+ int fsize = sizeof(epd_bitmap_test_frame);
|
|
|
+ for (int i = 0; i < fsize/2; i+=4) {
|
|
|
+ for (int d=0; d<=3; d++){
|
|
|
+ //For each of the driver, from 0 to 3
|
|
|
+ byte rowData = pgm_read_byte(&epd_bitmap_test_frame[i + d]);
|
|
|
+ mx.setRow(d,d,7 - int(i/4),fByte(rowData));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //Bottom half of the display
|
|
|
+ for (int i = fsize/2; i < fsize; i+=4) {
|
|
|
+ for (int d=4; d<=7; d++){
|
|
|
+ //For each of the driver, from 4 to 7
|
|
|
+ byte rowData = pgm_read_byte(&epd_bitmap_test_frame[i + (d - 4)]);
|
|
|
+ mx.setRow(d,d,7 - (int(i/4) - 8),fByte(rowData));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+void setup(){
|
|
|
+ mx.begin();
|
|
|
+
|
|
|
+ Serial.begin(57600);
|
|
|
+ Serial.print("\nFrame Rendering");
|
|
|
+ renderFrame();
|
|
|
+ Serial.print("\nDone");
|
|
|
+}
|
|
|
+
|
|
|
+void loop(){
|
|
|
+
|
|
|
+}
|