K3. UJI DOT MATRIKS
Kerjakan proyek ini wokwi.com
B. SKETCH YANG PERLU DIKETIK:
// Use the Parola library to scroll text on the display//// Demonstrates the use of the scrolling function to display text received// from the serial interface//// User can enter text on the serial monitor and this will display as a// scrolling message on the display.// Speed for the display is controlled by a pot on SPEED_IN analog in.// Scrolling direction is controlled by a switch on DIRECTION_SET digital in.// Invert ON/OFF is set by a switch on INVERT_SET digital in.//// UISwitch library can be found at https://github.com/MajicDesigns/MD_UISwitch// MD_MAX72XX library can be found at https://github.com/MajicDesigns/MD_MAX72XX//#include <MD_Parola.h>#include <MD_MAX72xx.h>#include <SPI.h>// set to 1 if we are implementing the user interface pot, switch, etc#define USE_UI_CONTROL 0#if USE_UI_CONTROL#include <MD_UISwitch.h>#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::PAROLA_HW#define MAX_DEVICES 11#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 = 60; // default frame delay valuetextEffect_t scrollEffect = PA_SCROLL_LEFT;textPosition_t scrollAlign = PA_LEFT;uint16_t scrollPause = 2000; // in milliseconds// Global message buffers shared by Serial and Scrolling functions#define BUF_SIZE 75char curMessage[BUF_SIZE] = { "" };char newMessage[BUF_SIZE] = { "Selamat Datang di eskul Robotika Samarinda, bersama pak firdaus" };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 waitingcp = newMessage;newMessageAvailable = true;}else // move char pointer to next positioncp++;}}void setup(){Serial.begin(57600);Serial.print("\n[Parola Scrolling Display]\nType a message for the scrolling display\nEnd message line with a newline");#if USE_UI_CONTROLuiDirection.begin();uiInvert.begin();pinMode(SPEED_IN, INPUT);doUI();#endif // USE_UI_CONTROLP.begin();P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);}void loop(){#if USE_UI_CONTROLdoUI();#endif // USE_UI_CONTROLif (P.displayAnimate()){if (newMessageAvailable){strcpy(curMessage, newMessage);newMessageAvailable = false;}P.displayReset();}readSerial();}