From eb947bff8cf96f67f48e9f1233cc761d70ed544b Mon Sep 17 00:00:00 2001 From: Brendan Haines Date: Tue, 29 Nov 2016 20:45:52 -0700 Subject: [PATCH] should change all pinouts to match v1.1 PCB (keypad pinout possibly wrong) --- Hohm_Phone.ino | 97 ++++++++------------------------------------------ 1 file changed, 15 insertions(+), 82 deletions(-) diff --git a/Hohm_Phone.ino b/Hohm_Phone.ino index c7b2bc1..eb80d2f 100644 --- a/Hohm_Phone.ino +++ b/Hohm_Phone.ino @@ -6,31 +6,21 @@ ////////// PARAMETERS ////////// //////////////////////////////// -// Arduino will wake from sleep when WAKE_PIN is pulled low. Connect any waking buttons to WAKE_PIN -#define WAKE_PIN 2 +#define LED_BAT_LOW 3 +#define LED_NO_SERVICE 2 #define BUT_ANS A3 #define BUT_END A4 -// RX/TX are in reference to the Arduino, not SIM800 -#define GSM_RX 3 -#define GSM_TX 11 #define GSM_RST A2 #define GSM_RING A5 -// TIMEOUT_SLEEP is the time to stay awake from last activity until sleep (milliseconds) -#define TIMEOUT_SLEEP 6000 - // Charging voltage thresholds. Will turn on charging at CHG_VLO and turn off charging at CHG_VHI (millivolts) #define CHG_VLO 3900 #define CHG_VHI 4100 #define CHG_PIN A0 -// Comment the following line to use HW serial for Fona and disable debugging information -#define USB_DEBUG - -// Comment the following line to disable sleeping the Arduino -//#define SLEEP +#define MAG_SENSE A1 // Keypad pinout byte rowPins[4] = {9, 4, 5, 7}; @@ -54,13 +44,7 @@ unsigned long lastActiveTime; bool dialtoneActive = false; bool startDialtone = false; -#ifdef USB_DEBUG -#include "SoftwareSerial.h" -SoftwareSerial fonaSS = SoftwareSerial(GSM_RX, GSM_TX); -SoftwareSerial *fonaSerial = &fonaSS; -#else HardwareSerial *fonaSerial = &Serial; -#endif Adafruit_FONA fona = Adafruit_FONA(GSM_RST); Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, 4, 3 ); @@ -70,28 +54,6 @@ Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, 4, 3 ); ////////// FUNCTIONS ////////// /////////////////////////////// -void wakeFromSleep() { - sleep_disable(); - detachInterrupt(WAKE_PIN); -#ifdef USB_DEBUG - Serial.println("Woke up"); -#endif - startDialtone = true; -} - -void goToSleep() { -#ifdef USB_DEBUG - Serial.println("Going to sleep"); -#endif - sleep_enable(); - attachInterrupt(WAKE_PIN, wakeFromSleep, LOW); - set_sleep_mode(SLEEP_MODE_PWR_DOWN); - cli(); - sleep_bod_disable(); - sei(); - sleep_cpu(); -} - void inCall() { while (1) { if ( !digitalRead(BUT_END) || fona.getCallStatus() < 3 ) { // End button pressed @@ -112,20 +74,11 @@ void inCall() { } void beginCall() { -#ifdef USB_DEBUG - Serial.println("Starting Call"); -#endif fona.sendCheckReply( F("AT+STTONE=0"), F("OK") ); // End dialtone dialtoneActive = false; if ( fona.callPhone( phoneNumber ) ) { -#ifdef USB_DEBUG - Serial.println("Call Started"); -#endif inCall(); } -#ifdef USB_DEBUG - Serial.println("Call ended"); -#endif } void resumeDialtone() { @@ -138,36 +91,33 @@ void resumeDialtone() { ////////////////////////////////// void setup() { -#ifdef USB_DEBUG - Serial.begin(9600); - Serial.println("Booted. Setting up"); -#endif - pinMode( WAKE_PIN, INPUT_PULLUP ); pinMode( BUT_ANS, INPUT_PULLUP ); pinMode( BUT_END, INPUT_PULLUP ); pinMode( GSM_RST, OUTPUT ); pinMode( GSM_RING, INPUT_PULLUP ); pinMode( CHG_PIN, OUTPUT ); + pinMode( LED_BAT_LOW, OUTPUT); + pinMode( LED_NO_SERVICE, OUTPUT); + + digitalWrite( LED_BAT_LOW, HIGH ); + digitalWrite( LED_NO_SERVICE, HIGH ); digitalWrite( GSM_RST, HIGH ); digitalWrite( CHG_PIN, HIGH ); - fonaSerial->begin(4800); + digitalWrite( LED_NO_SERVICE, LOW ); + fonaSerial->begin(115200); if (! fona.begin(*fonaSerial)) { -#ifdef USB_DEBUG - Serial.println("Fona failed to respond"); -#endif while (1); //fona didn't start } - while ( !fona.setAudio(FONA_EXTAUDIO) ) {} + //while ( !fona.setAudio(FONA_EXTAUDIO) ) {} -#ifdef USB_DEBUG - Serial.println("Setup Complete"); -#endif startDialtone = true; lastActiveTime = millis(); - + + digitalWrite( LED_BAT_LOW, LOW ); fona.sendCheckReply( F("AT+CLVL=20"), F("OK") ); // set dialtone volume + } void loop() { @@ -199,14 +149,6 @@ void loop() { fona.playDTMF( key ); // Play DTMF tone lastActiveTime = millis(); -#ifdef USB_DEBUG - int i; - for (i = 0; i < 15; i = i + 1) { - Serial.print(phoneNumber[i]); - Serial.print(", "); - } - Serial.println(phoneNumberLength); -#endif // Check for complete phone number (including +1 country code) if ( ( phoneNumberLength == 10 & phoneNumber[0] != '1' ) || phoneNumberLength > 10 ) { beginCall(); @@ -220,12 +162,10 @@ void loop() { phoneNumber[j] = 0; } phoneNumberLength = 0; -#ifdef USB_DEBUG - Serial.println( phoneNumberLength ); -#endif resumeDialtone(); } + // Battery Management uint16_t vbat; fona.getBattVoltage(&vbat); if ( vbat < CHG_VLO ) { @@ -234,13 +174,6 @@ void loop() { digitalWrite( CHG_PIN, LOW ); } -#ifdef SLEEP - // Autoshutdown if inactive for extended period - // Typecast to long avoids "rollover" issues - if ( (long)(millis() - lastActiveTime) > TIMEOUT_SLEEP ) { - goToSleep(); - } -#endif }