Temboo and Twitter
Having already constructed a vision for my final, I used project 11 to play around and test some of the available components I will be using for my final. As a result I attempted to make a program that would tweet depending on whether or not a force resistor was pressed. I learned how to make arrays and how to store strings in them, and then created a list of a few things that I wanted the computer to tweet. After that I tested it by creating a interface on processing that changed the words depending on if you pressed the resistor or not. When I was finished with that I simply linked it to twitter instead of the interface. As I was testing it somehow, I ended up using all of my available data for Temboo. Luckily that data resets every month so for my final project I will test it simply using processing until my Temboo data limit refreshes. Below are some images of the tweets sent by the force resistor as well as the initial project to send a tweet just from Temboo’s processing code.
Tweeting through my aurdino and force resistor
As the values increase (as you press the resistor) it scrolls through the list of phrases to potentially say.
When you let go the visible phrase changes to the last one you stopped at. Once you hold the resistor down again the process continues.
The results can be seen on the screen and, as I programmed it to, as a tweet.
My code can be seen down below.
Processing Code:
// This program will relay a series of six phrases when the user presses a pressure sensor
// Import the Serial library and create a Serial port handler
import processing.serial.*;
Serial myPort;
import com.temboo.core.*;
import com.temboo.Library.Twitter.Tweets.*;
// Create a session using your Temboo account application details
TembooSession session = new TembooSession("ritznrubble", "myFirstApp", "1d8cccc701d3473282acd6d52044d86b");
int valueA; // Sensor Value A
int valueB; // Sensor Value B
boolean a=false;
float i;
//------------------------------------
int y= 0;
int update=0;
int mapA;
int valA=0;
String[] sayings= new String[6];
//tracking if c is equal to y or if the value of y changes
int c=y;
int count=0;
void setup(){
runStatusesUpdateChoreo();
size(250,200);
// List my available serial ports
int nPorts = Serial.list().length;
for (int i=0; i < nPorts; i++) {
println("Port " + i + ": " + Serial.list()[i]);
}
String portName = Serial.list()[0];
myPort = new Serial(this, portName, 9600);
serialChars = new ArrayList();
//array of sayings
sayings [0]= "That hurts!";
sayings [1]= "Stop pushing!";
sayings [2]= "Pull back!";
sayings [3]= "Under Pressure";
sayings [4]= "So much stress!";
sayings [5]= "The pain!";
}
void draw(){
processSerial();
background(0);
fill(255);
println("check c", c, "check y", y, "check count:", count, "valueA", valueA, "ValA", valA, "mapA", mapA, "update", update);
text(sayings[update],100,height/2);
//
if (valueA==0){
a=!a;
}
if (!a){
i= random(6);
y= (int)i;
count=count+1;
c=y;
update=-1;
}else{
a=false;
update= c;
} while(update==c){
runStatusesUpdateChoreo();
}
Math.round(y);
}
void runStatusesUpdateChoreo() {
// Create the Choreo object using your Temboo session
StatusesUpdate statusesUpdateChoreo = new StatusesUpdate(session);
// Set credential
statusesUpdateChoreo.setCredential("Test");
// Set inputs
statusesUpdateChoreo.setAccessToken("569521804-FioaGf2pkeT2DIECqmW1jqhrxnHLiaFepyUhnhSL");
statusesUpdateChoreo.setAccessTokenSecret("M4DQwCeSZPJBN5Pn8YLmB3RLRXpXk3Ec9zx6AMoDOtCur");
statusesUpdateChoreo.setConsumerSecret("4XapePIoUgWMEeRet54J7Vtnsvt8gYGBONqXNIeG8ZOKqQDjyn");
statusesUpdateChoreo.setStatusUpdate(sayings[update]);
statusesUpdateChoreo.setConsumerKey("PQZOI9BpDdu3txrFVSzVdQZfG");
// Run the Choreo and store the results
StatusesUpdateResultSet statusesUpdateResults = statusesUpdateChoreo.run();
}
//---------------------
ArrayList serialChars; // Temporary storage for received serial data
int whichValueToAccum = 0; // Which piece of data am I currently collecting?
boolean bJustBuilt = false; // Did I just finish collecting a datum?
void processSerial() {
while (myPort.available () > 0) {
char aChar = (char) myPort.read();
// You'll need to add a block like one of these
// if you want to add a 3rd sensor:
if (aChar == 'A') {
bJustBuilt = false;
whichValueToAccum = 0;
} else if (aChar == 'B') {
bJustBuilt = false;
whichValueToAccum = 1;
} else if (((aChar == 13) || (aChar == 10)) && (!bJustBuilt)) {
// If we just received a return or newline character, build the number:
int accum = 0;
int nChars = serialChars.size();
for (int i=0; i < nChars; i++) {
int n = (nChars - i) - 1;
int aDigit = ((Integer)(serialChars.get(i))).intValue();
accum += aDigit * (int)(pow(10, n));
}
// Set the global variable to the number we captured.
// You'll need to add another block like one of these
// if you want to add a 3rd sensor:
if (whichValueToAccum == 0) {
valueA = accum;
// println ("A = " + valueA);
} else if (whichValueToAccum == 1) {
valueB = accum;
// println ("B = " + valueB);
}
// Now clear the accumulator
serialChars.clear();
bJustBuilt = true;
} else if ((aChar >= 48) && (aChar <= 57)) {
// If the char is between '0' and '9', save it.
int aDigit = (int)(aChar - '0');
serialChars.add(aDigit);
}
}
}
Aurdino Code:
// This Arduino program reads signals,
// such as from the force resistor
int sensorValue1 = 0; // variable to store the value coming from the other sensor
void setup() {
Serial.begin(9600); // initialize serial communications
}
void loop() {
// Read the value from the sensor
sensorValue1 = analogRead (A1); // reads value from Analog input 1
Serial.print ("A");
Serial.println (sensorValue1);
delay (50); // wait a fraction of a second, to be polite
}
/*
*/
Earlier
For my initial test on using twitter (before making this program), I had processing tweet, “Well did it work?”.