• Categories
  • Recent
  • Popular
  • Tags
  • Users
  • Groups
  • Register
  • Login
MakerGram Logo

MakerGram

  • Register
  • Login
  • Search
  • Categories
  • Recent
  • Popular
  • Tags
  • Users
  • Groups

Help needed: Arduino Wireless Notice Board project

Arduino
6
28
3.9k
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C
    codelery @salmanfaris last edited by codelery 5 Jul 2023, 17:09 5 Jul 2023, 17:07

    @salmanfaris After countless trials and efforts without success, I have decided to use two separate microcontrollers (Atmega328p). One microcontroller receives SMS from SIM800l, parses it and sends it to the second microcontroller via serial interface (Arduino Rx and Tx pin). The second microcontroller receives the message via serial and send it to p10 module for display. This solution is not cost-effective because of the additional microcontroller. However, it solves the problem of interference between DMD library and SoftwareSerial which appeared to be the reason for the corrupted string I shared earlier.

    However, I am facing another challenge; the message that the second microcontroller receives via serial interface is not complete. When I send "*Hello people of working with you are you doing tonight or tomorrow morning dear#" via SMS, what is received and displayed on p10 is "*Hello people of working with you are you doing tonight or tomo".

    Here are the two codes:

    Code for receiving SMS

     
     #include <SIM800L.h>
    SIM800L sim800l(2, 3); //Rx, Tx
    int LED_PIN = 8;
    
    //Enter the phone number of the person whom you want to send sms
    String reply = "Hey! I have got your message";
    
    void handleSMS(String number, String message) {
      int start_index = message.indexOf('*'); // message starts with '*'
      int end_index = message.indexOf('#'); // message ends with '*'
      //message.trim();
      // if message starts with * and ends with #
      if(start_index == 0 && end_index == (message.length() - 1)) {
        Serial.println(message);
        blinkLed();
        sim800l.sendSMS(number, reply);
      } 
    }
    
    void setup() {
      Serial.begin(9600);
      pinMode(LED_PIN, OUTPUT);
      sim800l.begin(9600);
      sim800l.setSMSCallback(handleSMS);
    }
    
    void loop() {
      sim800l.listen();
    }
    
    void blinkLed(){
       for(int i = 0; i < 3; i++){
          digitalWrite(LED_PIN, HIGH);
          delay(1000);
          digitalWrite(LED_PIN, LOW);
          delay(1000);
     }
      }
    

    *** Code for receiving and displaying message on p10 ***

    #include <SPI.h>
    #include  "buzzer.h"
    #include <DMD.h>
    #include "memory.h"
    
    #include <TimerOne.h>
    
    #include "SystemFont5x7.h"
    
    #include "Arial_black_16.h"
    
    
    #define ROW 3
    
    #define COLUMN 1
    
    #define FONT Arial_Black_16
    char message [500] = "Welcome to electronic projects workshop 1234"; 
    char r_msg[500] = "";
    bool flag = false;
    
    DMD led_module(ROW, COLUMN);
    
    
    void scan_module()
    
    {
    
      led_module.scanDisplayBySPI();
    
    }
    
    
    void setup()
    
    {
      EEPROM.begin();
      Serial.begin(9600);
      buzzerSetup();
      beeps(3);
    
      int m_length = EEPROM.read(5);
     
        //    strcpy(message, "");
      String stored_string = read_string(5); 
         
      char stored_char[stored_string.length() + 1];
      stored_string.toCharArray(stored_char, stored_string.length() + 1); // convert message from string to array of char
      strcpy(message, stored_char); // update p10 with stored message
    
      Timer1.initialize(2000);
    
      Timer1.attachInterrupt(scan_module);
    
     led_module.clearScreen( true );
    }
    
    void loop()
    
    {
      Serial.println(read_string(5)); 
        receiveMessage();
        
        led_module.selectFont(FONT);
    
        led_module.drawMarquee(message, strlen(message), (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 receiveMessage()
    {
      /*
        Listens to incoming message through serial interface. 
        It extracts the message if it starts with '*' and ends with '#'
      */
      while(Serial.available())
      {
        String s_msg = Serial.readString();
        // s_msg.trim();
        int start_index = s_msg.indexOf('*') + 1;
        int end_index = s_msg.indexOf('#');
          
        // whether message contains * and # and also # comes after *
        if(start_index > 0 ){
            beeps(1);
            String substr = s_msg.substring(start_index, end_index - 1);
            int m_len = substr.length() + 1;
            char m_msg [m_len];
            substr.toCharArray(m_msg, m_len);
            
            strcpy(message, m_msg);
            // write to eeprom
            writeString(5, substr);
          }
       }
    }
    
    rafitc99 1 Reply Last reply 5 Jul 2023, 17:49 Reply Quote 0
    • rafitc99
      rafitc99 @codelery last edited by 5 Jul 2023, 17:49

      @codelery It might be because of buffer size of received message. You need to increase the buffer size.
      Check the section "Expanding Arduino SoftwareSerial Buffer Size" in this tutorial : https://lastminuteengineers.com/sim800l-gsm-module-arduino-tutorial/

      C 2 Replies Last reply 7 Jul 2023, 00:44 Reply Quote 1
      • C
        codelery @rafitc99 last edited by 6 Jul 2023, 01:45

        @rafitc99 The thing is that I am not using the SoftwareSerial library in receiving the message from the first microcontroller. I am using the hardware serial (pin 0 and 1 on Arduino Uno)

        salmanfaris 1 Reply Last reply 6 Jul 2023, 12:22 Reply Quote 0
        • salmanfaris
          salmanfaris @codelery last edited by 6 Jul 2023, 12:22

          @codelery said in Help needed: Arduino Wireless Notice Board project:

          I am using the hardware serial (pin 0 and 1 on Arduino Uno)

          As @rafitc99 mentioned, you need to expand the Serila buffer, in the hardware serial also the Arduino board package implements a 64-byte ring buffer for send and receive on the hardware serial messages. So you need to change that to 256 as per your message length.

          C 1 Reply Last reply 7 Jul 2023, 00:41 Reply Quote 0
          • C
            codelery @salmanfaris last edited by 7 Jul 2023, 00:41

            @salmanfaris I did change the buffer size and everything is working perfectly. Thanks coming to my rescue.

            1 Reply Last reply Reply Quote 2
            • C
              codelery @rafitc99 last edited by 7 Jul 2023, 00:44

              @rafitc99 I changed the buffer and that solved the problem. Thanks a lot for coming to my rescue.

              salmanfaris 1 Reply Last reply 7 Jul 2023, 06:58 Reply Quote 2
              • salmanfaris
                salmanfaris @codelery last edited by 7 Jul 2023, 06:58

                @codelery Awesome. That's great news. Kudos to @rafitc99 . 🙌

                @codelery Please keep us updated about your project, looking forward to seeing it in action 🤩

                1 Reply Last reply Reply Quote 1
                23 out of 28
                • First post
                  23/28
                  Last post

                Recent Posts

                • @codelery Awesome. That's great news. Kudos to @rafitc99 . 🙌

                  @codelery Please keep us updated about your project, looking forward to seeing it in action 🤩

                  7 Jul 2023, 06:58 • read more
                • C

                  @rafitc99 I changed the buffer and that solved the problem. Thanks a lot for coming to my rescue.

                  7 Jul 2023, 00:44 • read more
                • C

                  @salmanfaris I did change the buffer size and everything is working perfectly. Thanks coming to my rescue.

                  7 Jul 2023, 00:41 • read more
                • @codelery said in Help needed: Arduino Wireless Notice Board project:

                  I am using the hardware serial (pin 0 and 1 on Arduino Uno)

                  As @rafitc99 mentioned, you need to expand the Serila buffer, in the hardware serial also the Arduino board package implements a 64-byte ring buffer for send and receive on the hardware serial messages. So you need to change that to 256 as per your message length.

                  6 Jul 2023, 12:22 • read more
                • C

                  @rafitc99 The thing is that I am not using the SoftwareSerial library in receiving the message from the first microcontroller. I am using the hardware serial (pin 0 and 1 on Arduino Uno)

                  6 Jul 2023, 01:45 • read more
                By MakerGram | A XiStart Initiative | Built with ♥ NodeBB
                Copyright © 2023 MakerGram, All rights reserved.
                Privacy Policy | Terms & Conditions | Disclaimer | Code of Conduct