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.


Log in to reply
 

Recent Posts

  • @FlorianB said in ESP32 with a capacitive sensor:

    I haven't found a good sensor module for this at al

    One of my friend used TP223 Touch button module from Ali express, and it's worked fine also @Akhil also used on of module.

    another option is that you can build capacitive sensor your own with resistors.

    read more
  • A

    IMG-20200603-WA0050.jpg

    "Energy is liberated matter, matter is energy maintained" ~ Bill Bryson

    Have you ever wondered what the future of energy would be like? Especially since machine learning has opened up such a wide range of innovations and opportunities?

    Care to take a look at the answers?

    The RSET IEEE Power and Energy Society SBC proudly presents to you an informative webinar on "Machine Learning in Power Systems" hosted by Dr. Qiuhua Huang.

    Dr. Qiuhua Huang is currently a Senior Power System Research Engineer with the Electricity Infrastructure Group, Pacific Northwest National Laboratory, USA. He has been a Principal Investigator, Project Manager, Task Lead and Key Technical Contributor in 10+ DOE-funded projects. Besides these, he is also the recipient of the 2019 IEEE PES Prize Paper Award, 2018 R&D 100 Award and several other achievements in his field of expertise.

    Join us as we delve into the enigma that is Machine Learning.

    Registration open to all.

    Date: 7th June 2020
    Time: 11:00 a.m
    Register Now
    Contact
    Eldho: +919745161124
    George: +918921075923

    read more
  • This webinar focuses on the Fusion360 basics and 3D modelling for the additive Manufacturing process.

    Maker: Suhail
    Place: Zoom
    Date: 7th June 2020
    Time: 8:00 PM

    Register here at https://forms.gle/vmW1evy4p9riFt7k7

    photo_2020-06-04_23-21-04.jpg

    read more
  • F

    @salmanfaris best if you could point me to an example that works as described: getting different values depending on hoe close the finger is without really touching. nothing i tried did work yet

    read more
  • F

    @salmanfaris I haven't found a good sensor module for this at all. I used a thing which was calles touch sensor and it returns only 1/0. Tried to use touchRead() but it is not sensitive apparently, only 40 and 1 more or less.

    #define touch_pin_numer 33

    const int VALUE_THRESHOLD = 30;
    int TOUCH_SENSOR_VALUE;
    void setup()
    {
    Serial.begin(115200);
    delay(1000);

    }
    void loop(){
    TOUCH_SENSOR_VALUE = touchRead(touch_pin_numer);
    Serial.println(TOUCH_SENSOR_VALUE);
    if(TOUCH_SENSOR_VALUE < VALUE_THRESHOLD)
    {
    Serial.println ("Touch ON");
    }
    else{
    Serial.println ("Touch OFF");
    }
    }

    should show something between 40 (current max) and 1 (current min) the closer the finger gets but it shows 40/41/39 and 1 - nothing inbetween. got this code from the web

    read more