Here's my code for GSM:
/*
GSM BASED LED MATRIX DISPLAY USING ARDUINO
October 2012
*/
#include <SIM900.h>
#include <sms.h>
#include <SoftwareSerial.h>
// ---------- for sms ----------
char smsbuffer[160]; //holds buffered data
char smsdata[160]; //sms only accept 160 char, remaining for header
char numberRx[20]; //holds sender number
char incomingChar;
boolean started=false;
//---------- registered numbers ----------
char regnum[] = {"639339182267"};
char passRx[] = {"default#"}; //holds password, must be 8 char only! and ends with #
char parSMS[160];
void setup ()
{
gsmsetup();
}
void loop ()
{
checkSMS();
}
void gsmsetup(void)
// ---------- serial setup ----------
{
Serial.begin(9600);
if (gsm.begin(4800)){
Serial.println("GSM SHIELD READY");
started=true;
}
else Serial.println("GSM SHIELD IDLE");
}
void checkSMS()
// ---------- check if there is new message ----------
{
if(started){
if(gsm.readSMS(smsbuffer, 160, numberRx, 20))
{
Serial.print("\nFrom: ");
Serial.print(numberRx);
Serial.print("\nMessage: ");
Serial.print(smsbuffer);
Serial.println("\n");
}
delay(1000);
checkSender();
}
}
void checkSender()
{
char numRx[12];
int p = sizeof(regnum);
for (int x=0;x<=p;x++)
{
numRx[x]= regnum[x];
}
if (strncmp (numberRx, numRx, 11) == 0)
{
Serial.println("Authorized Sender.");
checkPassword();;
}
else
{
Serial.println("Unauthorized Sender.");
}
}
void checkPassword()
{
// ---------- check for password in string ------------
if (strncmp (smsbuffer, passRx, 8) == 0)
{
Serial.println("Password Correct.");
parseSMS();
}
else
{
Serial.println("Password inCorrect.");
}
}
void parseSMS()
{
int y = 0;
int i = 9;
Serial.print("\nSMS Buffer: ");
while (smsbuffer[i] != '\0')
{
parSMS[y] = smsbuffer[i];
Serial.print(smsbuffer[i]);
i++;
y++;
}
loadSMS();
}
void loadSMS()
{
int i = 0;
Serial.print("\nParsed SMS: ");
while (smsbuffer[i] != '\0')
{
Serial.print(parSMS[i]);
i++;
}
Serial.println("");
}
Here's my code for LED Matrix Display
#include <DateTime.h>
#include <DateTimeStrings.h>
#include <stdio.h>
#include <stdlib.h>
#include "cmap.h"
unsigned int d;
unsigned char char_pointer;
char Display_Ram[38];
unsigned char mask;
int message_no;
char count;
unsigned char shift_counter;
#define INTEN 6500 //speed the higher the value, the slower the scroll
const char CLK = 5;
const char DAT = 6;
const char STR = 7;
const char K0 = A0;
const char K1 = A1;
const char K2 = A2;
const char K3 = A3;
const char K4 = 8;
const char K5 = 9;
const char K6 = 10;
const char K7 = 11;
void setup() {
pinMode(CLK, OUTPUT);
pinMode(DAT, OUTPUT);
pinMode(STR, OUTPUT);
pinMode(K0, OUTPUT);
pinMode(K1, OUTPUT);
pinMode(K2, OUTPUT);
pinMode(K3, OUTPUT);
pinMode(K4, OUTPUT);
pinMode(K5, OUTPUT);
pinMode(K6, OUTPUT);
pinMode(K7, OUTPUT);
digitalWrite(K0,HIGH);
digitalWrite(K1,HIGH);
digitalWrite(K2,HIGH);
digitalWrite(K3,HIGH);
digitalWrite(K4,HIGH);
digitalWrite(K5,HIGH);
digitalWrite(K6,HIGH);
digitalWrite(K7,HIGH);
for(d=0;d<32;d++)
{
clock();
}
strobe();
d = 0;
DateTime.sync(DateTime.makeTime(0, 15, 10, 12, 9, 2012)); // default start, 00:00:00 at tuesday, october 9, 2012
// sec, min, hour, date, month, year // Replace this with the most current time
// NOTE: month January starts from 0.
// Serial.begin(9600);
}
void loop(){
// unsigned long prevtime;
// if(DateTime.available()) { // update clocks if time has been synced
// digitalWrite(13,LOW); // first flash the LED
// prevtime = DateTime.now();
// while( prevtime == DateTime.now() ) // wait for the second to rollover
// ;
DateTime.available(); //refresh the Date and time properties
// digitalClockDisplay( ); // update digital clock
// Serial.println("");
// send our time to any app at the other end of the serial port
/* Serial.print( TIME_HEADER,BYTE); // this is the header for the current time
Serial.println(DateTime.now());
digitalWrite(13,HIGH); */
// }
Display();
shift();
}
void shift(void)
{
for (int val=0; val<37; val++){
Display_Ram[val] = Display_Ram[val+1];
}
shift_counter++;
if(shift_counter == 6){
shift_counter = 0;
load();
}
}
void Display(void)
{
mask = 0x01;
scan();
digitalWrite(K7,LOW);
for(d=0;d<INTEN;d++){}
digitalWrite(K7,HIGH);
mask = 0x02;
scan();
digitalWrite(K6,LOW);
for(d=0;d<INTEN;d++){}
digitalWrite(K6,HIGH);
mask = 0x04;
scan();
digitalWrite(K5,LOW);
for(d=0;d<INTEN;d++){}
digitalWrite(K5,HIGH);
mask = 0x08;
scan();
digitalWrite(K4,LOW);
for(d=0;d<INTEN;d++){}
digitalWrite(K4,HIGH);
mask = 0x10;
scan();
digitalWrite(K3,LOW);
for(d=0;d<INTEN;d++){}
digitalWrite(K3,HIGH);
mask = 0x20;
scan();
digitalWrite(K2,LOW);
for(d=0;d<INTEN;d++){}
digitalWrite(K2,HIGH);
mask = 0x40;
scan();
digitalWrite(K1,LOW);
for(d=0;d<INTEN;d++){}
digitalWrite(K1,HIGH);
mask = 0x80;
scan();
digitalWrite(K0,LOW);
for(d=0;d<INTEN;d++){}
digitalWrite(K0,HIGH);
}
void load(void){
char counter1;
char *LED_DATA= announcement(message_no);
if(LED_DATA[char_pointer] == '\0'){
char_pointer = 0;
message_no++;
if (message_no >12){
message_no = 0;
}
goto exit;
}
for(counter1 = 0; counter1 < 5; counter1++){
//LED_DATA[char_pointer] - 0x20 = ASCII code - 32
//character_data[character/element from cmap.h][array in cmap representing each column]
Display_Ram[32 + counter1] = character_data[(LED_DATA[char_pointer] - 0x20)][counter1];
}
Serial.println(LED_DATA);
// Serial.print("*****");
// Serial.println(DateTime.Year,DEC);
Display_Ram[37] = 00;
char_pointer++;
exit:
counter1++; //do nothing
}
char *announcement(int message_no1){
//char *day_digit;
//itoa(DateTime.Day,day_digit, DEC);
char *Month_string = DateTimeStrings.monthStr(DateTime.Month);
//char *Day_string = DateTimeStrings.dayStr(DateTime.DayofWeek);
char *day_digit = convert_byte(DateTime.Day);
char *year_digit = convert_year(DateTime.Year-100);
char *min_digit = convert_byte(DateTime.Minute);
char *hr_digit = convert_byte(DateTime.Hour);
char *LED_message[]={"Today is ",
//Day_string,
//" ",
Month_string,
day_digit,
",",
year_digit,
" Time: ",
hr_digit,
":",
min_digit,
" LCoES Announcements ",
"Oct. 11-17 Final Examination ",
"Oct. 18 Semestral Break ",
"Enjoy your vacation!!! ",
"See you next Semester "};
return LED_message[message_no1];
}
char *convert_byte(byte number){
char *digit[]={"00","01","02","03","04","05","06","07","08","09","10",
"11","12","13","14","15","16","17","18","19","20",
"21","22","23","24","25","26","27","28","29","30",
"31","32","33","34","35","36","37","38","39","40",
"41","42","43","44","45","46","47","48","49","50",
"51","52","53","54","55","56","57","58","59","60"};
return digit[number];
}
char *convert_year(byte year_number){
char *year_digit[]={"2000","2001","2002","2003","2004","2005","2006","2007","2008",
"2009","2010","2011","2012","2013","2014","2015","2016",
"2017","2018","2019","202","2021","2022","2023","2024"};
return year_digit[year_number];
}
void Clear_Display_Ram(void){
unsigned char rcount;
for(rcount = 0; rcount < 37; rcount++)
Display_Ram[rcount] = 0xff;
}
void scan(void){
for (count=32;count>(-1);count--){
if ((Display_Ram[count] & mask) == mask)
digitalWrite(DAT,LOW);
else
digitalWrite(DAT,HIGH);
clock();
}
strobe();
}
void clock(void){
digitalWrite(CLK,HIGH); // clock hi
digitalWrite(CLK,LOW); // clock low
}
void strobe(void){
digitalWrite(STR,HIGH); // strobe hi
digitalWrite(STR,LOW); // strobe low
}
Hope you could help me. thanks!