Adafruit FONA 800H breakout
Dependencies: mbed
Revision 17:b01377595122, committed 2016-03-30
- Comitter:
- jbaker66
- Date:
- Wed Mar 30 16:19:51 2016 +0000
- Parent:
- 16:18750ad91289
- Commit message:
- udpated library files jb;
Changed in this revision
diff -r 18750ad91289 -r b01377595122 4DGL-uLCD-SE.lib --- a/4DGL-uLCD-SE.lib Tue Mar 29 22:51:02 2016 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/4180_1/code/4DGL-uLCD-SE/#2cb1845d7681
diff -r 18750ad91289 -r b01377595122 PinDetect.lib --- a/PinDetect.lib Tue Mar 29 22:51:02 2016 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -http://mbed.org/users/AjK/code/PinDetect/#cb3afc45028b
diff -r 18750ad91289 -r b01377595122 main.cpp --- a/main.cpp Tue Mar 29 22:51:02 2016 -0400 +++ b/main.cpp Wed Mar 30 16:19:51 2016 +0000 @@ -18,7 +18,7 @@ ****************************************************/ /* - * Modified by Marc PLOUHINEC 27/06/2015 for use in mbed + * Modified by Jesse Baker & George Tzintzarov 03/30/2016 for use in mbed LPC1768 */ /*
diff -r 18750ad91289 -r b01377595122 main_withULCD.bat --- a/main_withULCD.bat Tue Mar 29 22:51:02 2016 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,558 +0,0 @@ -/*************************************************** - This is an example for our Adafruit FONA Cellular Module - - Designed specifically to work with the Adafruit FONA - ----> http://www.adafruit.com/products/1946 - ----> http://www.adafruit.com/products/1963 - ----> http://www.adafruit.com/products/2468 - ----> http://www.adafruit.com/products/2542 - - These cellular modules use TTL Serial to communicate, 2 pins are - required to interface - Adafruit invests time and resources providing this open source code, - please support Adafruit and open-source hardware by purchasing - products from Adafruit! - - Written by Limor Fried/Ladyada for Adafruit Industries. - BSD license, all text above must be included in any redistribution - ****************************************************/ - - /* - * Modified by Marc PLOUHINEC 27/06/2015 for use in mbed - */ - -/* -THIS CODE IS STILL IN PROGRESS! - -Open up the serial console on the Arduino at 4800 baud to interact with FONA - -Note that if you need to set a GPRS APN, username, and password scroll down to -the commented section below just before the main "while (true)" loop. -*/ - -#include <ctype.h> -//#include "SoftSerial.h" I dont think we need this -#include "Adafruit_FONA.h" -#include "PinDetect.h" -#include "uLCD_4DGL.h" - -#define FONA_RST p12 -#define FONA_TX p13 -#define FONA_RX p14 -#define FONA_RI p11 - -// this is a large buffer for replies -char replybuffer[255]; - - -Serial pcSerial(USBTX, USBRX); -Adafruit_FONA fona(FONA_TX, FONA_RX, FONA_RST, FONA_RI); -uLCD_4DGL uLCD(p28,p27,p30); - -PinDetect pbUp(p20); -PinDetect pbMid(p19); -PinDetect pbDown(p21); -PinDetect pbBACK(p18); - -// Turn on a LED when somebody call the FONA -DigitalOut led1(LED1); -class FonaEventListener : public Adafruit_FONA::EventListener { - virtual void onRing() { - led1 = 1; - } - - virtual void onNoCarrier() { - led1 = 0; - } -}; -FonaEventListener fonaEventListener; - -// Functions defined after main() -uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout = 0); -void printMenu(void); -void printTopLine(void); -void printTime(void); -void flushSerial(); -char readBlocking(); -uint16_t readnumber(); -long map(long x, long in_min, long in_max, long out_min, long out_max); - - - - -enum TOPMENU {PHONE, SMS, RADIO, radio_TUNE, radio_OFF, radio_VOLUME, EXECUTE_TUNE, EXECUTE_radio_OFF}; -TOPMENU myTopMenu = PHONE; - - -bool printFirst = true; -bool blockInterrupts = false; - -DigitalOut led2(LED2); -DigitalOut led3(LED3); -DigitalOut led4(LED4); -//Button interrupt functions -void pbUp_hit_callback(void) { - if (!blockInterrupts){ - printFirst = true; - switch(myTopMenu) { - case PHONE: { - myTopMenu = RADIO; - uLCD.cls(); - //printTopLine(); - uLCD.locate(0,3); - uLCD.printf("RADIO"); - break; - } - case SMS: { - myTopMenu = PHONE; - uLCD.cls(); - //printTopLine(); - uLCD.locate(0,3); - uLCD.printf("PHONE"); - break; - } - case RADIO: { - myTopMenu = SMS; - uLCD.cls(); - //printTopLine(); - uLCD.locate(0,3); - uLCD.printf("SMS"); - break; - } - case radio_TUNE: { - myTopMenu = radio_VOLUME; - uLCD.cls(); - //printTopLine(); - //uLCD.locate(0,3); - //uLCD.printf("RADIO\n->VOLUME"); - uLCD.locate(0,3); - uLCD.printf("RADIO\n->VOLUME"); - break; - } - case radio_OFF: { - myTopMenu = radio_TUNE; - uLCD.cls(); - //printTopLine(); - //uLCD.locate(0,3); - //uLCD.printf("RADIO\n->TUNE"); - uLCD.locate(0,3); - uLCD.printf("RADIO\n->TUNE"); - break; - } - case radio_VOLUME: { - myTopMenu = radio_OFF; - uLCD.cls(); - //printTopLine(); - //uLCD.locate(0,3); - //uLCD.printf("RADIO\n->OFF"); - uLCD.locate(0,3); - uLCD.printf("RADIO\n->OFF"); - break; - } - } - } -} -void pbMid_hit_callback(void) { - if (!blockInterrupts){ - printFirst = true; - switch(myTopMenu) { - case PHONE: { - led2=!led2; - break; - } - case SMS: { - led3=!led3; - break; - } - case RADIO: { - myTopMenu = radio_TUNE; - break; - //led4=!led4; - } - case radio_TUNE: { - //uLCD.cls(); - //printTopLine() - myTopMenu = EXECUTE_TUNE; - break; - //led4=!led4; - } - case radio_OFF: { - //uLCD.cls(); - //printTopLine(); - myTopMenu = EXECUTE_radio_OFF; - break; - //led4=!led4; - } - } - } -} -void pbDown_hit_callback(void) { - if (!blockInterrupts){ - printFirst = true; - switch(myTopMenu) { - case PHONE: { - myTopMenu = SMS; - uLCD.cls(); - uLCD.locate(0,3); - uLCD.printf("SMS"); - break; - } - case SMS: { - myTopMenu = RADIO; - uLCD.cls(); - uLCD.locate(0,3); - uLCD.printf("RADIO"); - break; - } - case RADIO: { - myTopMenu = PHONE; - uLCD.cls(); - uLCD.locate(0,3); - uLCD.printf("PHONE"); - break; - } - case radio_TUNE: { - myTopMenu = radio_OFF; - uLCD.cls(); - //printTopLine(); - uLCD.locate(0,3); - uLCD.printf("RADIO\n->OFF"); - break; - } - case radio_OFF: { - myTopMenu = radio_VOLUME; - uLCD.cls(); - //printTopLine(); - uLCD.locate(0,3); - uLCD.printf("RADIO\n->VOLUME"); - break; - } - case radio_VOLUME: { - myTopMenu = radio_TUNE; - uLCD.cls(); - //printTopLine(); - uLCD.locate(0,3); - uLCD.printf("RADIO\n->TUNE"); - break; - } - } - } -} -void pbBACK_hit_callback(void) { - led4=!led4; -} - - -int main() { - // Set the LCD screen up - uLCD.display_control(PORTRAIT); - uLCD.cls(); - uLCD.baudrate(BAUD_3000000); - uLCD.background_color(BLACK); - - //set up button interrupts - pbUp.mode(PullUp); - pbMid.mode(PullUp); - pbDown.mode(PullUp); - pbBACK.mode(PullUp); - wait(.5); - pbUp.attach_deasserted(&pbUp_hit_callback); - pbMid.attach_deasserted(&pbMid_hit_callback); - pbDown.attach_deasserted(&pbDown_hit_callback); - pbBACK.attach_deasserted(&pbBACK_hit_callback); - pbUp.setSampleFrequency(); - pbMid.setSampleFrequency(); - pbDown.setSampleFrequency(); - pbBACK.setSampleFrequency(); - - //pcSerial.baud(9600); - wait(1); - //pcSerial.printf("\r\n"); - - uLCD.printf("FONA basic test\r\n"); - uLCD.printf("Initializing....\r\n"); - - // See if the FONA is responding - if (! fona.begin(9600)) { - uLCD.cls(); - uLCD.printf("Couldn't find FONA\r\n"); - while (1); - } - fona.setEventListener(&fonaEventListener); - uLCD.cls(); - pcSerial.printf("FONA is OK\r\n"); - wait(1); - - // Print SIM card IMEI number. - char imei[15] = {0}; // MUST use a 16 character buffer for IMEI! - uint8_t imeiLen = fona.getIMEI(imei); - if (imeiLen > 0) { - uLCD.printf("SIM card IMEI:\n %s\r\n", imei); - } - - // Optionally configure a GPRS APN, username, and password. - // You might need to do this to access your network's GPRS/data - // network. Contact your provider for the exact APN, username, - // and password values. Username and password are optional and - // can be removed, but APN is required. - //fona.setGPRSNetworkSettings("your APN", "your username", "your password"); - //fona.setGPRSNetworkSettings("web.pt.lu", "", ""); - - // Optionally configure HTTP gets to follow redirects over SSL. - // Default is not to follow SSL redirects, however if you uncomment - // the following line then redirects over SSL will be followed. - //fona.setHTTPSRedirect(true); - - //printMenu(); - - wait(1); - //set up the time - if (!fona.enableNetworkTimeSync(true)){ - uLCD.printf("NA\r\n"); - } - - uLCD.cls(); - printTopLine(); - - - while (true) { - switch(myTopMenu){ - case PHONE: { - if (printFirst){ - printTopLine(); - printFirst = false; - } - break; - } - case SMS:{ - if (printFirst){ - printTopLine(); - printFirst = false; - } - break; - } - case RADIO: { - if (printFirst){ - printTopLine(); - printFirst = false; - } - break; - } - case radio_TUNE: { - if (printFirst){ - printTopLine(); - printFirst = false; - wait(.5); - } - break; - } - case radio_OFF: { - if (printFirst){ - printTopLine(); - printFirst = false; - } - break; - } - case radio_VOLUME: { - if (printFirst){ - printTopLine(); - printFirst = false; - } - break; - } - case EXECUTE_TUNE: { - blockInterrupts = true; - uLCD.cls(); - // get freq - flushSerial(); - uLCD.printf("COMPUTER PORT->"); - pcSerial.printf("FM Freq (eg 1011 == 101.1 MHz): "); - uint16_t station = readnumber(); - pcSerial.printf("\r\n"); - // FM radio ON using headset - if (fona.FMradio(true, FONA_HEADSETAUDIO)) { - pcSerial.printf("Opened\r\n"); - } - if (! fona.tuneFMradio(station)) { - pcSerial.printf("Failed\r\n"); - } else { - pcSerial.printf("Tuned\r\n"); - } - uLCD.printf("\n\nTuned!"); - wait(1); - printFirst = true; - blockInterrupts = false; - myTopMenu = radio_TUNE; - break; - } - case EXECUTE_radio_OFF: { - blockInterrupts = true; - if (printFirst){ - if (! fona.FMradio(false)) { - uLCD.printf("\n\nFailed\r\n"); - wait(1); - } - else { - uLCD.printf("\n\nOK!\r\n"); - wait(1); - } - printFirst = true; - blockInterrupts = false; - myTopMenu = radio_OFF; - } - break; - } - - - - - } - } -} - - - - - -void printTopLine(void) { - uLCD.locate(5,0); - // read the battery voltage and percentage - uint16_t vbat; - if (! fona.getBattPercent(&vbat)) { - uLCD.printf("BATT:NA\r\n"); - } - else { - uLCD.printf("b=%d%%\r\n", vbat); - } -} - - - -void printMenu(void) { - pcSerial.printf("-------------------------------------\r\n"); - pcSerial.printf("[?] Print this menu\r\n"); - pcSerial.printf("[a] read the ADC (2.8V max)\r\n"); - pcSerial.printf("[b] read the Battery V and %% charged\r\n"); - pcSerial.printf("[C] read the SIM CCID\r\n"); - pcSerial.printf("[U] Unlock SIM with PIN code\r\n"); - pcSerial.printf("[i] read RSSI\r\n"); - pcSerial.printf("[n] get Network status\r\n"); - pcSerial.printf("[v] set audio Volume\r\n"); - pcSerial.printf("[V] get Volume\r\n"); - pcSerial.printf("[H] set Headphone audio\r\n"); - pcSerial.printf("[e] set External audio\r\n"); - pcSerial.printf("[T] play audio Tone\r\n"); - pcSerial.printf("[P] PWM/Buzzer out\r\n"); - - // FM (SIM800 only) - pcSerial.printf("[f] tune FM radio\r\n"); - pcSerial.printf("[F] turn off FM\r\n"); - pcSerial.printf("[m] set FM volume\r\n"); - pcSerial.printf("[M] get FM volume\r\n"); - pcSerial.printf("[q] get FM station signal level\r\n"); - - // Phone - pcSerial.printf("[c] make phone Call\r\n"); - pcSerial.printf("[h] Hang up phone\r\n"); - pcSerial.printf("[p] Pick up phone\r\n"); - - // SMS - pcSerial.printf("[N] Number of SMSs\r\n"); - pcSerial.printf("[r] Read SMS #\r\n"); - pcSerial.printf("[R] Read All SMS\r\n"); - pcSerial.printf("[d] Delete SMS #\r\n"); - pcSerial.printf("[s] Send SMS\r\n"); - - // Time - pcSerial.printf("[y] Enable network time sync\r\n"); - pcSerial.printf("[Y] Enable NTP time sync (GPRS)\r\n"); - pcSerial.printf("[t] Get network time\r\n"); - - // GPRS - pcSerial.printf("[G] Enable GPRS\r\n"); - pcSerial.printf("[g] Disable GPRS\r\n"); - pcSerial.printf("[l] Query GSMLOC (GPRS)\r\n"); - pcSerial.printf("[w] Read webpage (GPRS)\r\n"); - pcSerial.printf("[W] Post to website (GPRS)\r\n"); - - // GPS - pcSerial.printf("[O] Turn GPS on (SIM808)\r\n"); - pcSerial.printf("[o] Turn GPS off (SIM808)\r\n"); - pcSerial.printf("[x] GPS fix status (SIM808)\r\n"); - pcSerial.printf("[L] Query GPS location (SIM808)\r\n"); - pcSerial.printf("[E] Raw NMEA out (SIM808)\r\n"); - - pcSerial.printf("[S] create Serial passthru tunnel\r\n"); - pcSerial.printf("-------------------------------------\r\n"); - pcSerial.printf("\r\n"); -} - -void flushSerial() { - while (pcSerial.readable()) - pcSerial.getc(); -} - -char readBlocking() { - while (!pcSerial.readable()); - return pcSerial.getc(); -} - -uint16_t readnumber() { - uint16_t x = 0; - char c; - while (! isdigit(c = readBlocking())) { - //pcSerial.putc(c); - } - pcSerial.putc(c); - x = c - '0'; - while (isdigit(c = readBlocking())) { - pcSerial.putc(c); - x *= 10; - x += c - '0'; - } - return x; -} - -uint8_t readline(char *buff, uint8_t maxbuff, uint16_t timeout) { - uint16_t buffidx = 0; - bool timeoutvalid = true; - if (timeout == 0) timeoutvalid = false; - - while (true) { - if (buffidx > maxbuff) { - //pcSerial.printf("SPACE\r\n"); - break; - } - - while(pcSerial.readable()) { - char c = pcSerial.getc(); - - //pcSerial.printf("%02x#%c\r\n", c, c); - - if (c == '\r') continue; - if (c == 0xA) { - if (buffidx == 0) // the first 0x0A is ignored - continue; - - timeout = 0; // the second 0x0A is the end of the line - timeoutvalid = true; - break; - } - buff[buffidx] = c; - buffidx++; - } - - if (timeoutvalid && timeout == 0) { - //pcSerial.printf("TIMEOUT\r\n"); - break; - } - wait_ms(1); - } - buff[buffidx] = 0; // null term - return buffidx; -} - -long map(long x, long in_min, long in_max, long out_min, long out_max) -{ - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; -} \ No newline at end of file