Next its time to load up the SMS-recieving-and-displaying Arduino sketch, included below. Make sure you have the Fona library installed!
// Fona + Flora SMSsenger bag // receives and displays text messages on a 8x32 flex NeoPixel matrix // tutorial: https://learn.adafruit.com/flora-plus-fona #include "Wire.h" #include <Adafruit_GFX.h> #include <Adafruit_NeoMatrix.h> #include <Adafruit_NeoPixel.h> #include <SoftwareSerial.h> #include "Adafruit_FONA.h" #define FONA_RX 10 #define FONA_TX 9 #define FONA_RST 6 #define PIN 12 // MATRIX DECLARATION: // Parameter 1 = width of NeoPixel matrix // Parameter 2 = height of matrix // Parameter 3 = pin number (most are valid) // Parameter 4 = matrix layout flags, add together as needed: // NEO_MATRIX_TOP, NEO_MATRIX_BOTTOM, NEO_MATRIX_LEFT, NEO_MATRIX_RIGHT: // Position of the FIRST LED in the matrix; pick two, e.g. // NEO_MATRIX_TOP + NEO_MATRIX_LEFT for the top-left corner. // NEO_MATRIX_ROWS, NEO_MATRIX_COLUMNS: LEDs are arranged in horizontal // rows or in vertical columns, respectively; pick one or the other. // NEO_MATRIX_PROGRESSIVE, NEO_MATRIX_ZIGZAG: all rows/columns proceed // in the same order, or alternate lines reverse direction; pick one. // See example below for these values in action. // Parameter 5 = pixel type flags, add together as needed: // NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs) // NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers) // NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products) // NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2) // Example for NeoPixel Shield. In this application we'd like to use it // as a 5x8 tall matrix, with the USB port positioned at the top of the // Arduino. When held that way, the first pixel is at the top right, and // lines are arranged in columns, progressive order. The shield uses // 800 KHz (v2) pixels that expect GRB color data. Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(32, 8, PIN, NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRB + NEO_KHZ800); const uint16_t colors[] = { matrix.Color(255, 0, 0), matrix.Color(0, 255, 0), matrix.Color(0, 0, 255) }; // this is a large buffer for replies char replybuffer[255]; uint8_t msgLen = 0; // Empty message int x = matrix.width(); int pass = 0; // variable we'll use to keep track of a cycling of colors bool newMessageCheck = 1; // variable to toggle checking of SMSs after each message scroll uint8_t n; // variable for the number of SMSs SoftwareSerial fonaSS = SoftwareSerial(FONA_TX, FONA_RX); SoftwareSerial *fonaSerial = &fonaSS; Adafruit_FONA fona = Adafruit_FONA(FONA_RST); uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0); unsigned long prevFrameTime = 0L; // For animation timing #define FPS 20 // Scrolling speed void setup() { Serial.begin(115200); Serial.println(F("FONA SMS LCD test")); Serial.println(F("Initializing....(May take 3 seconds)")); matrix.begin(); matrix.setTextWrap(false); matrix.setBrightness(40); matrix.setTextColor(colors[0]); Serial.println(F("Checking FONA")); // See if the FONA is responding fonaSerial->begin(4800); if (! fona.begin(*fonaSerial)) { // make it slow so its easy to read! //lcd.print("Not found! :("); Serial.println(F("Couldn't find FONA")); while (1); } Serial.println(F("FONA is OK")); delay(1000); } void loop() { unsigned long t = millis(); // Current elapsed time, milliseconds. // millis() comparisons are used rather than delay() so that animation // speed is consistent regardless of message length & other factors. if (newMessageCheck == 1){ while (fona.getNetworkStatus() != 1) { Serial.println(F("Waiting 4 signal")); Serial.print("."); delay(400); } Serial.println(F("Waiting for SMS")); int8_t smsnum = fona.getNumSMS(); if (smsnum < 0) { Serial.println(F("Could not read # SMS")); return; } else { Serial.print(smsnum); Serial.println(F(" SMS's on SIM card!")); } if (smsnum == 0) return; else n = smsnum; // there's an SMS! Set index to most recent message Serial.print(F("\n\rReading SMS #")); Serial.println(n); uint16_t len; if(!fona.readSMS(n, replybuffer, 250, &len)) { // Uh oh failed to read SMS, show error perhaps? Serial.println("failed to read SMS"); //break; } if (len == 0) { Serial.println(F("[empty slot]")); n++; //continue; } msgLen = len; Serial.print(F("***** SMS #")); Serial.print(n); Serial.print(" ("); Serial.print(len); Serial.println(F(") bytes *****")); Serial.println(replybuffer); Serial.println(F("*****")); newMessageCheck = 0; } if((t - prevFrameTime) >= (1000L / FPS)) { // Handle scrolling matrix.fillScreen(0); matrix.setCursor(x, 0); matrix.print(replybuffer); if(--x < (msgLen * -6)) { newMessageCheck = 1; x = matrix.width(); // We must repeat! if(++pass >= 3) pass = 0; matrix.setTextColor(colors[pass]); } matrix.show(); prevFrameTime = t; } }
Page last edited November 18, 2015
Text editor powered by tinymce.