// Dino -- Ambient Display Creature // // Note: requires Carnivore Library for Processing v2.2 (http://r-s-g.org/carnivore) // // Be sure to use the correct COM port settings // // By James Kim, dzeikei1@hotmail.com // // Last Updated 8/11/2006 import processing.net.*; import org.rsg.carnivore.*; import processing.serial.*; Serial myPort; int out = 0; int redVal = 0; int greenVal = 0; int redLim = 0; int greenLim = 0; int blueVal = 0; int servoPos = 50; int servoLoop = 0; int servoSpeed = 0; int servoTop = 70; int servoBtm = 30; int servoPulse = 50; int decayCheck = 0; int decayTime = 100; int decayLCheck = 0; int decayLTime = 10000; int decayBCheck = 0; int decayBTime = 100; int interludeTime = 300000; int interludeCheck = 0; int happyCheck = 0; int loveCheck = 0; int unhappyCheck = 0; int angryCheck = 0; String happyWords[]; String loveWords[]; String unhappyWords[]; String angryWords[]; void setup(){ // Log.setDebug(true); // Uncomment for verbose mode CarnivoreP5 c = new CarnivoreP5(this); //c.setVolumeLimit(4); //limit the output volume (optional) //c.setShouldSkipUDP(true); //tcp packets only (optional) happyWords = loadStrings("happyWords.txt"); // Loads Happy words list loveWords = loadStrings("loveWords.txt"); // Loads sad words list unhappyWords = loadStrings("unhappyWords.txt"); // Loads sad words list angryWords = loadStrings("angryWords.txt"); // Loads sad words list println(Serial.list()); myPort = new Serial(this, Serial.list()[12], 9600); myPort.write(101); } void draw(){ if(servoLoop > 0){ if(servoLoop == 2){ servoTop = 51; servoBtm = 49; } servoPos = servoPos + servoSpeed; if(servoPos > servoTop){ servoPos = servoTop; servoSpeed = servoSpeed * -1; servoLoop = servoLoop - 1; } if(servoPos < servoBtm){ servoPos = servoBtm; servoSpeed = servoSpeed * -1; servoLoop = servoLoop - 1; } out = servoPos; myPort.write(out); delay(servoPulse); } if (millis() - decayCheck >= decayTime){ if(redVal > redLim){ redVal = redVal - 1; myPort.write(109); println("Red:" + redVal + "/" + redLim); } if(redVal > 256){ redVal = 256; } if(greenVal > greenLim){ greenVal = greenVal - 1; myPort.write(117); println("Green:" + greenVal + "/" + greenLim); } if(greenVal > 256){ greenVal = 256; } decayCheck = millis(); } if (millis() - decayLCheck >= decayLTime){ if(redLim > 0){ redLim = redLim - 1; } if(redLim < 0){ redLim = 0; } if(redLim > 256){ redLim = 256; } if(greenLim > 0){ greenLim = greenLim - 1; } if(greenLim < 0){ greenLim = 0; } if(greenLim > 256){ greenLim = 256; } decayLCheck = millis(); } if (millis() - interludeCheck >= interludeTime){ if (greenVal == greenLim && redVal == redLim){ if(greenLim > redLim){ greenVal = 256; // increase Green brightness myPort.write(116); servoBtm = 30; // servoBtm: 30-70 servoTop = 70; // servoTop: 30-70 servoSpeed = 3; servoLoop = 5; } if(redLim > greenLim){ redVal = 256; // increase Red brightness myPort.write(108); servoBtm = 40; // servoBtm: 30-70 servoTop = 60; // servoTop: 30-70 servoSpeed = 10; servoLoop = 9; } } interludeCheck = millis(); } if(blueVal > 0){ if (millis() - decayBCheck >= decayBTime){ if(blueVal > 0){ blueVal = blueVal - 4; myPort.write(125); } decayBCheck = millis(); } } } // Called each time a new packet arrives void packetEvent(CarnivorePacket p) { String MSNpacket = p.ascii().toLowerCase(); int checkMessage = MSNpacket.indexOf("x-mms-im-format"); //Check packet for MSN message int checkTyping = MSNpacket.indexOf("text/x-msmsgscontrol"); //Check packet for MSN Typing int checkDatacast = MSNpacket.indexOf("text/x-msnmsgr-datacast"); //Check packet for MSN nudge/wink int checkEmail = MSNpacket.indexOf("text/x-msmsgsemailnotification"); //Check packet for new Hotmail if(checkMessage != -1) { // println("(" + p.strTransportProtocol + " packet) " + p.senderSocket() + " > " + p.receiverSocket()); println("MSN: " + MSNpacket); println("---------------------------\n"); myPort.write(124); blueVal = 256; servoBtm = 50; // servoBtm: 30-70 servoTop = 60; // servoTop: 30-70 servoSpeed = 3; servoLoop = 4; for(int x=0;x< happyWords.length; x++) { happyCheck = MSNpacket.indexOf(happyWords[x]); if(happyCheck != -1) { println("Happy"); greenVal = 128; // increase Green brightness myPort.write(114); servoBtm = 35; // servoBtm: 30-70 servoTop = 65; // servoTop: 30-70 servoSpeed = 3; servoLoop = 7; greenLim = greenLim + 8; // increase Green brightness } } for(int x=0;x< loveWords.length; x++) { loveCheck = MSNpacket.indexOf(loveWords[x]); if(loveCheck != -1) { println("Love"); greenVal = 256; // increase Green brightness myPort.write(116); servoBtm = 30; // servoBtm: 30-70 servoTop = 70; // servoTop: 30-70 servoSpeed = 1; servoLoop = 8; greenLim = greenLim + 16; // increase Green brightness } } for(int y=0;y< unhappyWords.length; y++) { unhappyCheck = MSNpacket.indexOf(unhappyWords[y]); if(unhappyCheck != -1) { println("Unhappy"); redVal = 128; // increase Red brightness myPort.write(106); servoBtm = 40; // servoBtm: 30-70 servoTop = 60; // servoTop: 30-70 servoSpeed = 10; servoLoop = 9; redLim = redLim + 8; // increase Red brightness } } for(int x=0;x< angryWords.length; x++) { angryCheck = MSNpacket.indexOf(angryWords[x]); if(angryCheck != -1) { println("Angry"); redVal = 256; // increase Green brightness myPort.write(108); servoBtm = 30; // servoBtm: 30-70 servoTop = 70; // servoTop: 30-70 servoSpeed = 10; servoLoop = 10; redLim = redLim + 16; // increase Green brightness } } } if(checkTyping != -1) { println("Typing"); myPort.write(121); blueVal = 64; servoBtm = 45; // servoBtm: 30-70 servoTop = 55; // servoTop: 30-70 servoSpeed = 5; servoLoop = 2; } if(checkDatacast != -1) { println("Nudge/Wink"); blueVal = 256; myPort.write(124); servoBtm = 40; // servoBtm: 30-70 servoTop = 60; // servoTop: 30-70 servoSpeed = 3; servoLoop = 8; } if(checkEmail != -1) { println("You've got mail!"); blueVal = 256; myPort.write(124); servoBtm = 40; // servoBtm: 30-70 servoTop = 60; // servoTop: 30-70 servoSpeed = 5; servoLoop = 20; } }