#include <Bridge.h>
#include <Process.h>
#include <Temboo.h>
#include "TembooAccount.h"
#include "TwilioAccount.h"
const int LED = 13;
const int FOOD = 12;
const int DRINK = 7;
boolean TEXTED = false;
int RECEIVED = 0;
const int FRIENDS = 4;
String friends[] = {"Drake", "Eric", "Jon", "Chris"};
String oldIDs[] = {"", "", "", ""};
String numbers[] = {"+1 XXX-XXX-XXXX", "+1 XXX-XXX-XXXX", "+1 XXX-XXX-XXXX", "+1 XXX-XXX-XXXX"};
void setup() {
Bridge.begin();
Serial.begin(9600);
//Configure pins
pinMode(FOOD, INPUT_PULLUP);
pinMode(DRINK, INPUT_PULLUP);
//Initialize message IDs
for (int i = 0; i < FRIENDS; i++) {
String initID = "";
TembooChoreo incomingSMS = createIncomingSMSChoreo(numbers[i]);
incomingSMS.run();
while (incomingSMS.available()) {
String field = incomingSMS.readStringUntil('\x1F');
field.trim();
String data = incomingSMS.readStringUntil('\x1E');
data.trim();
if (field == "sid") { initID = data; }
}
delay(1000); incomingSMS.close();
oldIDs[i] = initID;
}
}
TembooChoreo createOutgoingSMSChoreo(String firstName, String number, String type) {
TembooChoreo OutgoingSMSChoreo;
OutgoingSMSChoreo.begin();
//Choreo Setup
OutgoingSMSChoreo.setAccountName(TEMBOO_ACCOUNT);
OutgoingSMSChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME);
OutgoingSMSChoreo.setAppKey(TEMBOO_APP_KEY);
OutgoingSMSChoreo.setChoreo("/Library/Twilio/SMSMessages/SendSMS");
//API Inputs
OutgoingSMSChoreo.addInput("AccountSID", TWILIO_ACCOUNT_SID);
OutgoingSMSChoreo.addInput("AuthToken", TWILIO_AUTH_TOKEN);
OutgoingSMSChoreo.addInput("From", TWILIO_NUMBER);
OutgoingSMSChoreo.addInput("To", number);
//Message Body
String message = "Hey " + firstName + ", Sofia is making " + type + " at her apartment - want to join?";
OutgoingSMSChoreo.addInput("Body", message);
return OutgoingSMSChoreo;
}
TembooChoreo createIncomingSMSChoreo(String number) {
TembooChoreo IncomingSMSChoreo;
IncomingSMSChoreo.begin();
//Choreo Setup
IncomingSMSChoreo.setAccountName(TEMBOO_ACCOUNT);
IncomingSMSChoreo.setAppKeyName(TEMBOO_APP_KEY_NAME);
IncomingSMSChoreo.setAppKey(TEMBOO_APP_KEY);
IncomingSMSChoreo.setChoreo("/Library/Twilio/SMSMessages/GetLastMessageFromNumber");
//API Inputs
IncomingSMSChoreo.addInput("AccountSID", TWILIO_ACCOUNT_SID);
IncomingSMSChoreo.addInput("AuthToken", TWILIO_AUTH_TOKEN);
IncomingSMSChoreo.addInput("From", number);
IncomingSMSChoreo.addInput("ResponseMode", "verbose");
//Output Filters
IncomingSMSChoreo.addOutputFilter("sid", "/sid", "Response");
IncomingSMSChoreo.addOutputFilter("body", "/body", "Response");
return IncomingSMSChoreo;
}
void speak(String text) {
Process p;
p.begin("/mnt/sda1/tts.py");
p.addParameter(text);
p.run();
}
void loop() {
String newID, body;
int foodValue = digitalRead(FOOD);
int drinkValue = digitalRead(DRINK);
//Button Pressed
if (foodValue == LOW || drinkValue == LOW) {
String type = "stuff";
if (foodValue == LOW) { type = "food"; } else if (drinkValue == LOW) { type = "tea"; }
digitalWrite(LED, HIGH);
speak("Sending text to your friends");
int success = 0;
for (int i = 0; i < FRIENDS; i++) {
TembooChoreo outgoingSMS = createOutgoingSMSChoreo(friends[i], numbers[i], type);
success = success + outgoingSMS.run();
delay(1000); outgoingSMS.close();
}
if (success == 0) {
speak("Texts sent!");
} else {
speak("Texts failed.");
}
RECEIVED = 0;
TEXTED = (success == 0) ? true : false;
} else if (TEXTED) {
digitalWrite(LED, LOW);
//Checking for new texts
for (int i = 0; i < FRIENDS; i++) {
TembooChoreo incomingSMS = createIncomingSMSChoreo(numbers[i]);
incomingSMS.run();
while (incomingSMS.available()) {
String field = incomingSMS.readStringUntil('\x1F');
field.trim();
String data = incomingSMS.readStringUntil('\x1E');
data.trim();
if (field == "sid") {
newID = data;
} else if (field == "body") {
body = data;
}
Serial.println(body);
}
delay(1000); incomingSMS.close();
if (oldIDs[i] != newID) {
oldIDs[i] = newID;
RECEIVED++;
String message = friends[i] + " says, '" + body + "'.";
speak(message);
}
}
if (RECEIVED == FRIENDS) { TEXTED = false; RECEIVED = 0; }
delay(7000);
}
}
Comments