send a text from your phone to Arduino Max7219with spoking or wrightingArduino Skech// // Use the Pa...
send a text from your phone to Arduino Max7219with spoking or wrightingArduino Skech// // Use the Parola library to scroll text// // Use Parola_Scrolling#include #include #include // set to 1 if we are implementing the user interface pot, switch, etc#define USE_UI_CONTROL 0#if USE_UI_CONTROL#include #endif// Turn on debug statements to the serial output#define DEBUG 0#if DEBUG#define PRINT(s, x) { Serial.print(F(s)); Serial.print(x); }#define PRINTS(x) Serial.print(F(x))#define PRINTX(x) Serial.println(x, HEX)#else#define PRINT(s, x)#define PRINTS(x)#define PRINTX(x)#endif// 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::ICSTATION_HW#define MAX_DEVICES 8#define CLK_PIN 13#define DATA_PIN 11#define CS_PIN 10// HARDWARE SPIMD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);// SOFTWARE SPI//MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);// Scrolling parameters#if USE_UI_CONTROLconst uint8_t SPEED_IN = A5;const uint8_t DIRECTION_SET = 8; // change the effectconst uint8_t INVERT_SET = 9; // change the invertconst uint8_t SPEED_DEADBAND = 5;#endif // USE_UI_CONTROLuint8_t scrollSpeed = 50; // default frame delay valuetextEffect_t scrollEffect = PA_SCROLL_LEFT;textPosition_t scrollAlign = PA_LEFT;uint16_t scrollPause = 3000; // in milliseconds// Global message buffers shared by Serial and Scrolling functions#define BUF_SIZE 500char curMessage[BUF_SIZE] = { "" };char newMessage[BUF_SIZE] = { "Hello" };bool newMessageAvailable = true;#if USE_UI_CONTROLMD_UISwitch_Digital uiDirection(DIRECTION_SET);MD_UISwitch_Digital uiInvert(INVERT_SET);void doUI(void){ // set the speed if it has changed { int16_t speed = map(analogRead(SPEED_IN), 0, 1023, 10, 150); if ((speed >= ((int16_t)P.getSpeed() + SPEED_DEADBAND)) || (speed <= ((int16_t)P.getSpeed() - SPEED_DEADBAND))) { P.setSpeed(speed); scrollSpeed = speed; PRINT("nChanged speed to ", P.getSpeed()); } } if (uiDirection.read() == MD_UISwitch::KEY_PRESS) // SCROLL DIRECTION { PRINTS("nChanging scroll direction"); scrollEffect = (scrollEffect == PA_SCROLL_LEFT ? PA_SCROLL_RIGHT : PA_SCROLL_LEFT); P.setTextEffect(scrollEffect, scrollEffect); P.displayClear(); P.displayReset(); } if (uiInvert.read() == MD_UISwitch::KEY_PRESS) // INVERT MODE { PRINTS("nChanging invert mode"); P.setInvert(!P.getInvert()); }}#endif // USE_UI_CONTROLvoid readSerial(void){ static char *cp = newMessage; while (Serial.available()) { *cp = (char)Serial.read(); if ((*cp == n) || (cp - newMessage >= BUF_SIZE-2)) // end of message character or full buffer { *cp = 0; // end the string // restart the index for next filling spree and flag we have a message waiting cp = curMessage; newMessageAvailable = true; } else // move char pointer to next position cp++; }}void setup(){ Serial.begin(9600); Serial.print("n[Parola Scrolling Display]nType a message for the scrolling displaynEnd message line with a newline");#if USE_UI_CONTROL uiDirection.begin(); uiInvert.begin(); pinMode(SPEED_IN, INPUT); doUI();#endif // USE_UI_CONTROL P.begin(); P.displayText(newMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);}void loop(){#if USE_UI_CONTROL doUI();#endif // USE_UI_CONTROL if (P.displayAnimate()) { if (newMessageAvailable) { strcpy(curMessage, newMessage); newMessageAvailable = false; } P.displayReset(); } readSerial();}