Wireless Notice Board (Arduino UNO + DMD)

Wireless Notice Board (Arduino UNO + DMD) © GPL3+

Dot Matrix Display is a matrix of LED connected in 16x32 pattern. We can wirelessly transfer messages over mobile to DMD using Bluetooth.

  • 19,107 views
  • 13 comments
  • 37 respects

Components and supplies

Apps and online services

About this project

Introduction

16x32 DMD display board having 512 LEDs. We have to show a message on the board. We connect a HC06 Bluetooth module with Arduino UNO as per the circuit diagram provided. Then connect DMD board with a shield or you can made one as shown in the circuit that will be cheaper and easy one if you know a little bit of soldering.

The Circuits

Then open the app and connect with HC06 module (PWD = 1234). Open the Terminal option in the app and then type any message and send.

It will show on your DMD display board and scrolled automatically. If you have any doubt or problem then feel free to ask in comment below else if it works perfectly give REP to this post.

Thanks!

The Video

Code

DMD + arduino + bluetoothArduino
Connection of LED display board with arduino and Bluetooth.
/*

-----------
 - Download the DMD library here: https://github.com/freetronics/DMD
 - Place the DMD library folder into the "arduino/libraries/" folder of your Arduino installation.
 - Get the TimerOne library from here: http://code.google.com/p/arduino-timerone/downloads/list
   or download the local copy from the DMD library page (which may be older but was used for this creation)
   and place the TimerOne library folder into the "arduino/libraries/" folder of your Arduino installation.
 - Restart the IDE.

*/

#include <SPI.h>        //SPI.h must be included as DMD is written by SPI (the IDE complains otherwise)
#include <DMD.h>        
#include <TimerOne.h>   
#include "SystemFont5x7.h"
#include "Arial_black_16.h"

//Fire up the DMD library as dmd
#define DISPLAYS_ACROSS 1
#define DISPLAYS_DOWN 1
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
//number max of characters in your message
#define max_char 100
char message[max_char];    // stores you message
//char mess[max_char];
char r_char;               // reads each character
byte index = 0;            // defines the position into your array
int i;            
char greeting[] = "Abhijit Pattnaik";
/*--------------------------------------------------------------------------------------
  Interrupt handler for Timer1 (TimerOne) driven DMD refresh scanning, this gets
  called at the period set in Timer1.initialize();
--------------------------------------------------------------------------------------*/
void ScanDMD()
{ 
  dmd.scanDisplayBySPI();
}

void setup(void)
{

   //initialize TimerOne's interrupt/CPU usage used to scan and refresh the display
   Timer1.initialize( 5000 );           //period in microseconds to call ScanDMD. Anything longer than 5000 (5s) and you can see flicker.
   Timer1.attachInterrupt( ScanDMD );   //attach the Timer1 interrupt to ScanDMD which goes to dmd.scanDisplayBySPI()
  
   //clear/init the DMD pixels held in RAM
   dmd.clearScreen( true );   //true is normal (all pixels off), false is negative (all pixels on)
   Serial.begin(9600);
strcpy(message,greeting);
}
void loop(void)
{
   //check if serial is avaible an before reading a new message delete's the old message
    
   if(Serial.available())
   {       
        for(i=0; i<99; i++){
            message[i] = '\0';
        } 
        //resests the index        
        index=0;
    }

    //while is reading the message 
    while(Serial.available() > 0){
       //the message can have up to 100 characters 
       dmd.clearScreen( true );
       if(index < (max_char-1)) 
       {         
           r_char = Serial.read();      // Reads a character
           message[index] = r_char;     // Stores the character in message array
           index++;                     // Increment position
          // message[index] = '\0';       // Delete the last position
             
       } 
   }
    
 //prepares the display to print our message
   dmd.selectFont(Arial_Black_16);
   //displays the message
   dmd.drawMarquee(message ,max_char,(32*DISPLAYS_ACROSS)-1 ,0);
   long start=millis();
   long timer=start;
   boolean ret=false;
   while(!ret)
   {
     if ((timer+30) < millis()) {
       ret=dmd.stepMarquee(-1,0);
       timer=millis();
     }
   }
}

Schematics

Circuit Diagram

Comments

Similar projects you might like

ATtiny Programmer Board (Arduino UNO as ISP)

Project tutorial by xreef

  • 1,447 views
  • 0 comments
  • 2 respects

4x4x4 LED cube with Arduino Uno and 1sheeld

Project tutorial by Hassan Ibrahim

  • 30,471 views
  • 7 comments
  • 61 respects

Programming ATtiny85 with Arduino Uno

Project tutorial by Arjun Ganesan

  • 226,608 views
  • 74 comments
  • 190 respects

Programming ATtiny13 with Arduino Uno

by Tauno Erik

  • 10,924 views
  • 7 comments
  • 20 respects
Add projectSign up / Login