| home > Tea Ceremony > Code - final version | ||
| Tea
Ceremony |
![]() |
|
| Final Code - Processing Click here to download the final version of Tea Ceremony Code. >> tea_final_code.zip (6.5 Mb, with Sound files) >> tea_final_code2.zip (6 kb, without Sound files) Main Code
import processing.serial.*;
Serial port; // The serial port
int[] serialInArray = new int[4]; // Where we'll put what we receive
int serialCount = 0; // A count of how many bytes we receive
int drizzleTea, showerTea, fogTea, snowTea; // Starting position of the ball
boolean firstContact = false; // Whether we've heard from the microcontroller
float averDrizzle = 0; // average values
float averShower =0;
float averSnow = 0;
float averFog = 0;
int averDrizzleCount = 0; // average counts
int averShowerCount =0;
int averSnowCount = 0;
int averFogCount = 0;
int aniCount1 =0;
int aniCount2 =0;
int aniCount3 =0;
int aniCount4 =0;
boolean DrizzleStart = false; // animation trigger
boolean SnowStart = false;
boolean ShowerStart = false;
boolean FogStart = false;
boolean drizzleTurn = false; // ready (got average values)
boolean showerTurn = false;
boolean snowTurn = false;
boolean fogTurn = false;
boolean drizzleReaver = false; // when I pull tea recalculate averages
boolean showerReaver = false;
boolean snowReaver = false;
boolean fogReaver = false;
int ResetCount0 = 0;
int ResetCount1 = 0;
int ResetCount2 = 0;
int ResetCount3 = 0;
int ResetCount4 = 0;
int StartPoint = 100;
int AverCount = 20;
int DifferValue = 7;
int lastAni = 0;
import krister.Ess.*;
AudioChannel myChannel0;
AudioChannel myChannel1;
AudioChannel myChannel2;
AudioChannel myChannel3;
AudioChannel myChannel4;
PImage paper;
Drizzle drizzles; // decare drizzle object
Snow[] snows;
int totalSnows =0;
Shower[] showers;
int totalShowers =0;
Fog[] fogs;
int totalFogs =0;
void setup() {
println(Serial.list());
port = new Serial(this, Serial.list()[0], 9600);
port.write(65); // Send a capital A to start the microcontroller sending
Ess.start(this); // start up Ess
myChannel0=new AudioChannel("tea_backsound01.wav"); // load sound file into a new AudioChannel
myChannel1=new AudioChannel("drizzle01.wav"); // load sound file into a new AudioChannel
myChannel2=new AudioChannel("shower01.wav"); // load sound file into a new AudioChannel
myChannel3=new AudioChannel("snow01.wav"); // load sound file into a new AudioChannel
myChannel4=new AudioChannel("fog01.wav"); // load sound file into a new AudioChannel
paper = loadImage("paper_pattern02.jpg");
size(800,400); // Stage size
background(255);
image(paper, 0, 0);
image(paper, 200, 0);
image(paper, 400, 0);
image(paper, 600, 0);
image(paper, 0, 200);
image(paper, 200, 200);
image(paper, 400, 200);
image(paper, 600, 200);
noStroke(); // No border on the next thing drawn
smooth();
frameRate(30);
drizzles = new Drizzle();
snows = new Snow[300];
showers = new Shower[200];
fogs = new Fog[34];
myChannel0.play(Ess.FOREVER);
}
void draw() {
fill(0);
///////////////////////
if(drizzleTea < 10 || showerTea < 10 || fogTea < 10 || snowTea < 10){
allReset();
}
/*Drizzle*/
if(drizzleTea > StartPoint){
if(averDrizzleCount < AverCount){
if(drizzleTurn ==false){
averDrizzle=(averDrizzle+drizzleTea)/2;
averDrizzleCount++;
}
}
else{
drizzleTurn = true;
}
if(drizzleTurn == true && (drizzleTea-averDrizzle)> DifferValue){ // when I pull tea
if(drizzleReaver == false){
Initialize();
DrizzleStart = true;
averSnow = snowTea;
averShower = showerTea;
averFog = fogTea;
drizzleReaver = true;
}
if(aniCount1 < 1000){
Animation();
aniCount1++;
ResetCount0 =0;
}else{
if(ResetCount0 < 22){
tint(255,255,255, ResetCount0);
Reset();
ResetCount0++;
delay(100);
}else{
aniCount1 =0;
}
}
lastAni=1;
}
}
else if(drizzleTea <= StartPoint){
if(drizzleReaver == true){
drizzleTurn = false;
averDrizzleCount = 0;
drizzleReaver = false;
}
if(ResetCount0 < 20 && lastAni==1){
tint(255,255,255, ResetCount0);
Reset();
ResetCount0++;
}
}
/*Shower*/
if(showerTea > StartPoint){
if(averShowerCount < AverCount){
if(showerTurn == false){
averShower = (averShower+showerTea)/2;
averShowerCount++;
}
}
else{
showerTurn = true;
}
if (showerTurn ==true && (showerTea-averShower)> DifferValue){
if(showerReaver == false){
Initialize();
ShowerStart = true;
averSnow = snowTea;
averDrizzle = drizzleTea;
averFog = fogTea;
showerReaver = true;
}
if(aniCount2 < 600){
Animation();
aniCount2++;
ResetCount0 = 0;
} else{
if(ResetCount0 < 22){
tint(255,255,255, ResetCount0);
Reset();
ResetCount0++;
delay(100);
}else{
aniCount2 =0;
}
}
lastAni = 2;
}
}
else if(showerTea <= StartPoint) {
showerTurn = false;
averShowerCount =0;
showerReaver = false;
if(ResetCount0 < 20 && lastAni ==2){
tint(255,255,255, ResetCount0);
Reset();
ResetCount0++;
}
}
/*Snow*/
if(snowTea >StartPoint){
if(averSnowCount < AverCount){
if(snowTurn == false){
averSnow = (averSnow +snowTea)/2;
averSnowCount++;
}
}
else{
snowTurn = true;
}
if (snowTurn ==true && (snowTea-averSnow)> DifferValue){
if(snowReaver ==false){
Initialize();
SnowStart = true;
averDrizzle = drizzleTea;
averShower = showerTea;
averFog = fogTea;
snowReaver = true;
}
Animation();
lastAni =3;
ResetCount0 =0;
}
}
else if(snowTea <= StartPoint){
snowTurn = false;
averSnowCount = 0;
snowReaver = false;
if(ResetCount0 < 20 && lastAni==3){
tint(255,255,255, ResetCount0);
Reset();
ResetCount0++;
}
}
/*Fog*/
if(fogTea >StartPoint){
if(averFogCount < AverCount){
if(fogTurn == false){
averFog = (averFog +fogTea)/2;
averFogCount++;
}
}
else {
fogTurn = true;
}
if (fogTurn == true && (fogTea-averFog) > DifferValue){
if(fogReaver == false){
Initialize();
FogStart = true;
averDrizzle = drizzleTea;
averShower = showerTea;
averSnow = snowTea;
fogReaver = true;
}
if(aniCount4 < 100){
Animation();
aniCount4++;
println(aniCount4);
ResetCount0 =0;
}else{
if(ResetCount0 < 22){
tint(255,255,255, ResetCount0);
Reset();
ResetCount0++;
delay(100);
}else{
aniCount4 =0;
}
}
lastAni = 1;
}
}
else if(fogTea <= StartPoint){
fogTurn = false;
averFogCount = 0;
fogReaver = false;
/*Shower*/
if(showerTea > StartPoint){
if(averShowerCount < AverCount ){
if(showerTurn == false){
averShower = (averShower+showerTea)/2;
averShowerCount++;
}
}
else{
showerTurn = true;
}
if (showerTurn ==true && (showerTea-averShower)> DifferValue){
if(showerReaver == false){
Initialize();
ShowerStart = true;
averSnow = snowTea;
averDrizzle = drizzleTea;
averFog = fogTea;
showerReaver = true;
}
Animation();
lastAni = 2;
ResetCount0 = 0;
}
}
else if(showerTea <= StartPoint) {
showerTurn = false;
averShowerCount =0;
showerReaver = false;
if(ResetCount0 < 20 && lastAni ==4){
tint(255,255,255, ResetCount0);
Reset();
ResetCount0++;
}
}
///////////////////////
if (firstContact == false) {
delay(300);
port.write(65);
}
}
}
void Initialize(){
DrizzleStart = false;
SnowStart = false;
ShowerStart = false;
FogStart = false;
}
void allReset(){
myChannel1.stop();
myChannel2.stop();
myChannel3.stop();
myChannel4.stop();
image(paper, 0, 0);
image(paper, 200, 0);
image(paper, 400, 0);
image(paper, 600, 0);
image(paper, 0, 200);
image(paper, 200, 200);
image(paper, 400, 200);
image(paper, 600, 200);
}
void Reset(){
//tint(255,255,255, ResetCount1);
image(paper, 0, 0);
image(paper, 200, 0);
image(paper, 400, 0);
image(paper, 600, 0);
image(paper, 0, 200);
image(paper, 200, 200);
image(paper, 400, 200);
image(paper, 600, 200);
delay(50);
}
void Animation(){
// Drizzle
if(DrizzleStart == true){
myChannel1.play(Ess.FOREVER);
myChannel2.stop();
myChannel3.stop();
myChannel4.stop();
if(ResetCount1 < 20 ){
tint(255,255,255, ResetCount1);
Reset();
ResetCount1++;
}
else {
drizzles.display();
}
}
else{
ResetCount1 =0;
myChannel1.stop();
}
//Shower
if(ShowerStart == true){
myChannel1.stop();
myChannel2.play(Ess.FOREVER);
myChannel3.stop();
myChannel4.stop();
if(ResetCount2 < 20 ){
tint(255,255,255, ResetCount2);
Reset();
ResetCount2++;
}
else{
showers[totalShowers] = new Shower();
totalShowers++;
if(totalShowers >= showers.length){
totalShowers = 0; //Start over
}
for (int i=0; i < totalShowers; i++){
showers[i].display();
showers[i].move();
}
}
}
else{
myChannel2.stop();
ResetCount2 = 0;
}
//Snow
if(SnowStart ==true){
myChannel1.stop();
myChannel2.stop();
myChannel3.play(Ess.FOREVER);
myChannel4.stop();
if(ResetCount3 < 20){
tint(255,255,255,ResetCount3);
Reset();
ResetCount3++;
}
else{
//background(255);
//image(paper, 0, 0);
////////////////////////
tint(255,255,255,255);
image(paper, 0, 0);
image(paper, 200, 0);
image(paper, 400, 0);
image(paper, 600, 0);
image(paper, 0, 200);
image(paper, 200, 200);
image(paper, 400, 200);
image(paper, 600, 200);
////////////////////////
snows[totalSnows] = new Snow();
totalSnows++;
if(totalSnows >= snows.length){
totalSnows = 0; //Start over
}
for (int i=0; i < totalSnows; i++){
snows[i].display();
snows[i].move();
}
}
}
else{
myChannel3.stop();
ResetCount3 = 0;
}
// Fog
if(FogStart == true){
myChannel1.stop();
myChannel2.stop();
myChannel3.stop();
myChannel4.play(Ess.FOREVER);
if(ResetCount4 < 20 ){
tint(255,255,255, ResetCount4);
Reset();
ResetCount4++;
}
else {
fogs[totalFogs] = new Fog();
totalFogs++;
if(totalFogs >= fogs.length){
totalFogs = 0; //Start over
}
for (int i=0; i < totalFogs; i++){
fogs[i].display();
fogs[i].move();
}
Reset();
}
}
else{
myChannel4.stop();
ResetCount4 =0;
}
}
public void stop() {
Ess.stop();
super.stop();
}
void serialEvent(Serial port) {
// if this is the first byte received,
// take note of that fact:
if (firstContact == false) {
firstContact = true;
}
// Add the latest byte from the serial port to array:
serialInArray[serialCount] = port.read();
serialCount++;
// If we have 3 bytes:
if (serialCount > 3 ) {
drizzleTea = serialInArray[0];
showerTea = serialInArray[1];
fogTea = serialInArray[2];
snowTea = serialInArray[3];
// print the values (for debugging purposes only):
// println(drizzleTea + "\t" + averDrizzle + "\t"+ showerTea + "\t"+ averShower+ "\t" + fogTea +"\t" + averFog+ "\t" + snowTea + "\t" + averSnow);
// Send a capital A to request new sensor readings:
port.write(65);
// Reset serialCount:
serialCount = 0;
}
}
|
||
| Do you want to contact us? Ji Sun Lee, Cho Rong Hwang |
||