Help needed: Arduino Wireless Notice Board project



  • I'm making a Wireless Notice Board for my project purpose. Simply the expected working is... "Sending a message from our mobile handset to sim which inserted to SIM900A GSM Module Arduino read the message and display through P10 LED display."

    Recieving SMS system and P10 LED display are working separately. These programs are combined. SMS are received (we can see in serialmonitor). But it cannot display. Displaying what is written in the program only

    #include <SoftwareSerial.h>
    #include <SPI.h>
    #include <DMD.h>
    #include <TimerOne.h>
    #include "SystemFont5x7.h"
    #include "Arial_black_16.h"
    
    #define ROW 1
    #define COLUMN 1
    #define FONT Arial_Black_16
    
    DMD led_module(ROW, COLUMN);
    
    String st; 
    const char *msg;
    unsigned int LengMsg;
    SoftwareSerial mySerial(3, 2);
    
    void scan_module(){
      led_module.scanDisplayBySPI();
    }
    
    void setup() {
      Timer1.initialize(2000);
      Timer1.attachInterrupt(scan_module);
      led_module.clearScreen( true );
      
      Serial.begin(4800);
      mySerial.begin(4800);
      Serial.println("Starting..."); 
      delay(1000);
      mySerial.println("AT");
      pollSms();
      mySerial.println("AT+CMGF=1"); 
      pollSms();
      mySerial.println("AT+CNMI=1,2,0,0,0");
      pollSms();
    }
    
    void loop(){
      pollSms();
      delay(500);
    
      //Start print in led matrix 
      led_module.selectFont(FONT);
      led_module.drawMarquee(msg,LengMsg, (32 * ROW), 0);
      long start = millis();
      long timming = start;
      boolean flag = false;
      while (!flag){
        if((timming + 20) < millis()){
            flag = led_module.stepMarquee(-1, 0);
            timming = millis();
          }
        }
      }
    
    void pollSms(){
      delay(500);
      while (Serial.available()) {
        mySerial.write(Serial.read());
        String st = String(Serial.read());
        Serial.println(st);
      }
      while(mySerial.available()) {
        Serial.write(mySerial.read());
        st = String(Serial.readString());
        Serial.println(st);
        LengMsg = st.length();
        st.toCharArray(msg,LengMsg);    
      }
      delay(500);
    }
    


  • @SAFVAN Thanks for posting the query. I would like to know what is the exact part number or any picture of the Display you're using and I wanna know what connections have you made.

    Please post these details such that it becomes easy for us to review.!!



  • @SAFVAN are you getting any error or something ?



  • @salmanfaris no any error, issue is in that LED metrix library print function parameters are *const char. So need to convert SMS boast string to const char *Variable.



  • @kowshik1729 display is 16×32 P10 LED display.
    RX and TX connected pin 3&2.
    P10 connected as https://circuitdigest.com/microcontroller-projects/digital-notice-board-using-p10-led-matrix-display-and-arduino



  • Hi @rafitc99, You can convert the string to char array using toCharArray() it will Copies the String’s characters to the supplied buffer.

    • Syntax
    myString.toCharArray(buf, len)
    
    • Parameters
      myString: a variable of type String.
      buf: the buffer to copy the characters into. Allowed data types: array of char.
      len: the size of the buffer. Allowed data types: unsigned int.

    more : https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/tochararray/ , https://www.arduino.cc/en/Tutorial/BuiltInExamples#strings

    also @SAFVAN is using const char* to hold message array You cannot change the contents of the location(s) this pointer points to.



  • @salmanfaris Rewrite all code and uploaded. But SMS is not displaying correctly in LED Board, .. I'm attaching code and display output. take a look ,

    #include <SoftwareSerial.h>
    #include <SPI.h>
    #include <DMD.h>
    #include <TimerOne.h>
    #include "SystemFont5x7.h"
    #include "Arial_black_16.h"
    
    #define ROW 1
    #define COLUMN 1
    #define FONT Arial_Black_16
    
    DMD led_module(ROW, COLUMN);
    
    String st; 
    const char *msg;
    unsigned int LengMsg;
    SoftwareSerial mySerial(3, 2);
    
    void scan_module(){
      led_module.scanDisplayBySPI();
    }
    
    void setup() {
      Timer1.initialize(2000);
      Timer1.attachInterrupt(scan_module);
      led_module.clearScreen( true );
      
      Serial.begin(4800);
      mySerial.begin(4800);
      Serial.println("Starting..."); 
      delay(1000);
      mySerial.println("AT");
      pollSms();
      mySerial.println("AT+CMGF=1"); 
      pollSms();
      mySerial.println("AT+CNMI=1,2,0,0,0");
      pollSms();
    }
    
    void loop(){
      pollSms();
      delay(500);
    
      //Start print in led matrix 
      led_module.selectFont(FONT);
      led_module.drawMarquee(msg,LengMsg, (32 * ROW), 0);
      long start = millis();
      long timming = start;
      boolean flag = false;
      while (!flag){
        if((timming + 20) < millis()){
            flag = led_module.stepMarquee(-1, 0);
            timming = millis();
          }
        }
      }
    
    void pollSms(){
      delay(500);
      while (Serial.available()) {
        mySerial.write(Serial.read());
        //String st = String(Serial.read());
        //Serial.println(st);
      }
      while(mySerial.available()) {
        Serial.write(mySerial.read());
        st = String(mySerial.readString());
        Serial.println(st);
        LengMsg = st.length();
        st.toCharArray(msg,LengMsg);    
      }
      delay(500);
    }
    

    output video : video link



  • Can you print the SMS on the serial monitor too? so we can conclude the problem



  • @salmanfaris in serial monitor getting normal text. No problem in there.



  • @rafitc99 Okay, it might be sending char from SMS buffer to LED panel. let me check, I'll get back to you.



  • @rafitc99 Please answer my question...

    1. Why did u declared message as const? Const indicates you are not going to change that variable any more.

    Try to use c_str() instead to_charArray()

    Reference



  • @rafitc99 , @SAFVAN did you tried the @arunksoman suggestion?



  • Now message is displaying with mobile number, date, time.
    I want filter the actual message only.



  • @SAFVAN what was the solution with the previous problem?



  • @salmanfaris tried @arunksoman suggestion , c_str() instead to_charArray().. But want to parse SMS body only. Now working on that.


Log in to reply
 

Recent Posts

  • You can find analyzed list of projects to make emergency ventilators in response to COVID-19, focusing on free-libre open-source here on COVID-19 Ventilator Projects and Resources and FAQ

    alt text

    read more
  • @Gladiator54 did you getting any updates on the monitor? and how did you flashed the SD card? which OS are you used?

    read more
  • S

    @arunksoman , any idea on this

    read more
  • G

    Hi all,
    My raspberry pi 3b was working recently ... Installed raspbian os.. but lately on inserting sd card no green light blinks ... Just the red light is there for the power supply... The sd card is being read at other sd card readers or in phone but not in raspberry pi ... Have also tested other sd cards but have got no success... Pls do let me know what can i do ?

    read more
  • @Ggreeshma-stani Pretty good than the previous design. I am able to see 2 crystals on the board. Can I know why did you use another one?

    And finally, you can address me as kowshik. No need of sir😉

    read more