xxxxxxxxxx
97
let isBlooming = false;
let bloomSize = 0;
let maxBloomSize = 100; // Maximum size of bloom
let serial;
let butterflyX, butterflyY; // Butterfly position
let butterflySpeedX, butterflySpeedY; // Butterfly speed
function setup() {
createCanvas(400, 400);
background(20);
// Initialize butterfly position and speed
butterflyX = random(width);
butterflyY = random(height);
butterflySpeedX = random(1, 3);
butterflySpeedY = random(1, 3);
// Serial communication setup
serial = new p5.SerialPort();
serial.open("/dev/tty.usbmodem14101"); // Replace with your Arduino port
serial.on("data", serialEvent);
}
function draw() {
background(20, 30, 50, 20); // Dark blue background with a slight fade effect
// Blooming effect when heartbeat is detected
if (isBlooming) {
bloomSize += 5; // Increase bloom size on heartbeat
drawFlower(width / 2, height / 2, bloomSize);
} else {
bloomSize = max(bloomSize - 2, 0); // Gradually reduce bloom size
drawFlower(width / 2, height / 2, bloomSize);
drawButterfly(); // Draw butterfly when no heartbeat is detected
}
}
// Function to draw a flower with pink petals
function drawFlower(x, y, size) {
push();
translate(x, y);
// Draw multiple petals
for (let angle = 0; angle < 360; angle += 45) {
push();
rotate(radians(angle));
fill(255, 102, 178, 150); // Soft pink color with some transparency
noStroke();
ellipse(0, size / 4, size, size * 0.6); // Petal shape
pop();
}
// Draw center of flower
fill(255, 182, 193); // Light pink color for center
ellipse(0, 0, size / 4, size / 4);
pop();
}
// Function to draw a butterfly
function drawButterfly() {
// Update butterfly position
butterflyX += butterflySpeedX;
butterflyY += butterflySpeedY;
// Bounce off the edges of the canvas
if (butterflyX > width || butterflyX < 0) butterflySpeedX *= -1;
if (butterflyY > height || butterflyY < 0) butterflySpeedY *= -1;
// Draw butterfly wings
push();
translate(butterflyX, butterflyY);
fill(255, 153, 204, 200); // Light pink color for butterfly wings
noStroke();
// Left wing
ellipse(-10, 0, 20, 30);
// Right wing
ellipse(10, 0, 20, 30);
// Butterfly body
fill(100);
ellipse(0, 0, 5, 15);
pop();
}
// Event function that triggers when heartbeat data is received
function serialEvent() {
let data = serial.readStringUntil("\n");
if (data.trim() === "1") { // "1" signifies a heartbeat
isBlooming = true;
} else {
isBlooming = false;
}
}