Serial communication w/ Python (send a string to LED Matrix)

Hello everyone,

i'm new to the arduino and hope you can help me out with my project i trying to achieve.
my setup is the following:
LED Matrix 12x(8x8) + Arduino Uno + USB from PC/Mac
i included the MD_parola and MD_MAX72xx library and used their serial test example which comes within the installation.

Now further on to my question;
basically what i want to do is to send data via a python script to be displayed on the LED Matrix.

Python script:

import time
import serial 

arduino = serial.Serial('/dev/cu.usbmodemFA121', 57600, timeout=.1) #serial connection
time.sleep(1)

newMessage = "Test Test Test"
arduino.write(newMessage)	

arduino.close()

Arduino script:

// 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::FC16_HW
#define MAX_DEVICES 12
#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10

// HARDWARE SPI
MD_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);



uint8_t scrollSpeed = 25;    // 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] = { "Newsticker Test" };
bool newMessageAvailable = true;


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");

  P.begin();
  P.displayText(curMessage, scrollAlign, scrollSpeed, scrollPause, scrollEffect, scrollEffect);
}

void loop()
{

  if (P.displayAnimate())
  {
    if (newMessageAvailable)
    {
      strcpy(curMessage, newMessage);
      newMessageAvailable = false;
    }
    P.displayReset();
  }
  readSerial();
}

If i open the serial monitor i can write a word and it is displayed on the LED Matrix..why can't i achieve this with a python script?
Do i have a main understanding issue here.

I really hope you guys can help me out on this one.
Sorry for my bad english.

Thank you for your help, great community!

One important thing to watch is that the Arduino resets when the PC program opens the serial port so your PC program needs to open the serial port, allow time for the Arduino to reset and then keep the serial port open until it is completely finished with the Arduino.

Have a look at how it is done in this Python - Arduino demo

...R

How can i reset the arduino with python? If i open the serial monitor and start my python script there is an error.
When i close the serial monitor and run my script, the LED Matrix restarts but doesnt show my testmessage from the python script...it only shows the default Newsticker test message from the arduino script. :confused:

BroManZer:
How can i reset the arduino with python?

Just opening the serial port causes the Arduino to reset, whether you want to or not.

Have you tried my example?

...R