Connect with us

ARDUINO coding

Discussion in 'Microcontrollers, Programming and IoT' started by Chul Min, Jan 19, 2018.

  1. Chul Min

    Chul Min

    7
    0
    Jan 3, 2018
    I used arduino uno and max7219 dot matrix module for scrolling matrix.
    But all of scrolling letters are shown inverse, like a mirror effect.
    So I tried to find inverting mode and changed some code.
    But it didn't change at all.
    Here, I attach uploaded coding chart.
    Please help me, how to change inverting mode.

    Code:
    #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 MAX_DEVICES 8
    #define CLK_PIN   13
    #define DATA_PIN  11
    #define CS_PIN    10
    
    // HARDWARE SPI
    MD_Parola P = MD_Parola(CS_PIN, MAX_DEVICES);
    // SOFTWARE SPI
    //MD_Parola P = MD_Parola(DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
    
    // Scrolling parameters
    #if USE_UI_CONTROL
    const uint8_t SPEED_IN = A5;
    const uint8_t DIRECTION_SET = 8;  // change the effect
    const uint8_t INVERT_SET = 9;     // change the invert
    
    const uint8_t SPEED_DEADBAND = 5;
    #endif // USE_UI_CONTROL
    
    uint8_t scrollSpeed = 125;    // default frame delay value
    textEffect_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 75
    char curMessage[BUF_SIZE] = { "" };
    char newMessage[BUF_SIZE] = { "Hello! Enter new message?" };
    bool newMessageAvailable = true;
    
    #if USE_UI_CONTROL
    
    MD_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_CONTROL
    
    void 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 = newMessage;
          newMessageAvailable = true;
        }
        else  // move char pointer to next position
          cp++;
      }
    }
    
    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_CONTROL
      uiDirection.begin();
      uiInvert.begin();
      pinMode(SPEED_IN, INPUT);
    
      doUI();
    #endif // USE_UI_CONTROL
    
      P.begin();
      P.displayText(curMessage, 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();
    }
    
     
    Last edited by a moderator: Jan 28, 2018
  2. Merlin3189

    Merlin3189

    250
    69
    Aug 4, 2011
    I don't know a lot about this and have not used this device nor the MD Parola library, but since no one lese has come in yet, I'll say what I see.

    I can't see any reason why the display is inverted in the first place. On my reading of the documentation, the display should initialise to normal.

    In your code I can't see anywhere that you use MD_Parola::setinvert() because the only place that text appears is inside an #IF directive. ie. - inside
    #if USE_UI_CONTROL
    ...
    #endif // USE_UI_CONTROL

    but you set,
    #define USE_UI_CONTROL 0
    which means the if will evaluate false I think.

    =====================
    Edit. Maybe you could correct it with an
    #else P.setInvert( false );
    inside the #if directive.

    Or simply put the P.setInvert( false ); unconditionally after P is defined
     
    Last edited: Jan 24, 2018
    Chul Min likes this.
  3. Arouse1973

    Arouse1973 Adam

    5,164
    1,078
    Dec 18, 2013
  4. Chul Min

    Chul Min

    7
    0
    Jan 3, 2018
    Thank you so much.
    I'll try to put your advisory code.
     
Ask a Question
Want to reply to this thread or ask your own question?
You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.
Electronics Point Logo
Continue to site
Quote of the day

-