Browse Source

Added working display test file

Toby Chui 11 months ago
parent
commit
ba9ff4ad42
2 changed files with 143 additions and 0 deletions
  1. 7 0
      autopush.sh
  2. 136 0
      firmware/display_test/display_test.ino

+ 7 - 0
autopush.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+echo Enter commit notes:
+read commitmsg
+git pull
+git add *
+git commit -m "$commitmsg"
+git push

+ 136 - 0
firmware/display_test/display_test.ino

@@ -0,0 +1,136 @@
+// 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.
+
+#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::DR1CR1RR1_HW
+#define MAX_DEVICES 1
+
+#define CLK_PIN   D5  // or SCK
+#define DATA_PIN  D7  // or MOSI
+#define CS_PIN    D4 // or SS
+
+// 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);
+
+// Text parameters
+#define CHAR_SPACING  1 // pixels between characters
+
+// Global message buffers shared by Serial and Scrolling functions
+#define BUF_SIZE  75
+char message[BUF_SIZE] = "Fu";
+bool newMessageAvailable = true;
+
+void readSerial(void)
+{
+  static uint8_t	putIndex = 0;
+
+  while (Serial.available())
+  {
+    message[putIndex] = (char)Serial.read();
+    if ((message[putIndex] == '\n') || (putIndex >= BUF_SIZE-3))  // end of message character or full buffer
+    {
+      // put in a message separator and end the string
+      message[putIndex] = '\0';
+      // restart the index for next filling spree and flag we have a message waiting
+      putIndex = 0;
+      newMessageAvailable = true;
+    }
+    else
+      // Just save the next char in next location
+      message[putIndex++];
+  }
+}
+
+void printText(uint8_t modStart, uint8_t modEnd, char *pMsg)
+// Print the text string to the LED matrix modules specified.
+// Message area is padded with blank columns after printing.
+{
+  uint8_t   state = 0;
+  uint8_t   curLen;
+  uint16_t  showLen;
+  uint8_t   cBuf[8];
+  int16_t   col = ((modEnd + 1) * COL_SIZE) - 1;
+
+  mx.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);
+
+  do     // finite state machine to print the characters in the space available
+  {
+    switch(state)
+    {
+      case 0: // Load the next character from the font table
+        // if we reached end of message, reset the message pointer
+        if (*pMsg == '\0')
+        {
+          showLen = col - (modEnd * COL_SIZE);  // padding characters
+          state = 2;
+          break;
+        }
+
+        // retrieve the next character form the font file
+        showLen = mx.getChar(*pMsg++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf);
+        curLen = 0;
+        state++;
+        // !! deliberately fall through to next state to start displaying
+
+      case 1: // display the next part of the character
+        mx.setColumn(col--, cBuf[curLen++]);
+
+        // done with font character, now display the space between chars
+        if (curLen == showLen)
+        {
+          showLen = CHAR_SPACING;
+          state = 2;
+        }
+        break;
+
+      case 2: // initialize state for displaying empty columns
+        curLen = 0;
+        state++;
+        // fall through
+
+      case 3:	// display inter-character spacing or end of message padding (blank columns)
+        mx.setColumn(col--, 0);
+        curLen++;
+        if (curLen == showLen)
+          state = 0;
+        break;
+
+      default:
+        col = -1;   // this definitely ends the do loop
+    }
+  } while (col >= (modStart * COL_SIZE));
+
+  mx.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::ON);
+}
+
+void setup()
+{
+  mx.begin();
+
+  Serial.begin(57600);
+  Serial.print("\n[MD_MAX72XX Message Display]\nType a message for the display\nEnd message line with a newline");
+}
+
+void loop()
+{
+  readSerial();
+  if (newMessageAvailable)
+  {
+    PRINT("\nProcessing new message: ", message);
+    printText(0, MAX_DEVICES-1, message);
+    newMessageAvailable = false;
+  }
+}