EXCERCISE 1: ARDUINO TO P5.JS COMMUNICATION
RESULT:
P5.JS:
CODE (P5.JS):
let sensorValue = 0; // Variable to store sensor data function setup() { createCanvas(640, 480); textSize(18); if (!serialActive) { setUpSerial(); // Start serial communication with Arduino } } function draw() { // Set the background to dark blue and purple hues based on the sensor value background(map(sensorValue, 0, 1023, 50, 75), 0, map(sensorValue, 0, 1023, 100, 150)); // Map the sensor value to control the ellipse's horizontal position let ellipseX = map(sensorValue, 0, 1023, 0, width); // Draw the ellipse in the middle of the screen fill(255); // White ellipse for contrast ellipse(ellipseX, height / 2, 50, 50); // Display connection status fill(255); // White text for readability if (!serialActive) { text("Press Space Bar to select Serial Port", 20, 30); } else { text("Connected", 20, 30); // Display the current sensor value text("Sensor Value = " + str(sensorValue), 20, 50); } } function keyPressed() { if (key === " ") { setUpSerial(); // Start the serial connection when the spacebar is pressed } } // This function is called by the web-serial library with each new line of data function readSerial(data) { if (data != null) { // Parse the sensor value from the Arduino sensorValue = int(trim(data)); } }
CODE (ARDUINO): https://github.com/aaa10159/IntroToIM/blob/a6dc11112996470e161e0ef812409366ebd219d4/week%2011%20-%20exercise%201
EXCERCISE 2: P5 TO ARDUINO COMMUNICATION
RESULT:
P5.JS:
CODE (P5.JS):
let brightness = 0; // Brightness value to send to Arduino function setup() { createCanvas(640, 480); textSize(18); // Check if serial is active and set it up if not if (!serialActive) { setUpSerial(); // Initialize serial communication } } function draw() { background(30); // Dark background fill(255); // White text text("Use the UP and DOWN arrows to control LED brightness", 20, 30); // Display the current brightness value text("Brightness: " + brightness, 20, 60); } function keyPressed() { if (keyCode === UP_ARROW) { // Increase brightness brightness = min(brightness + 10, 255); // Max brightness is 255 sendBrightness(); } else if (keyCode === DOWN_ARROW) { // Decrease brightness brightness = max(brightness - 10, 0); // Min brightness is 0 sendBrightness(); } else if (key === " ") { // Start serial connection when spacebar is pressed setUpSerial(); } } function sendBrightness() { if (writer) { // Send the brightness value to Arduino writer.write(brightness + "\n"); } else { console.error("Writer is not available. Please connect to the serial port."); } }
CODE (ARDUINO):
https://github.com/aaa10159/IntroToIM/blob/64b87caff1ef02ad4c3254acbd5fcd12b89e00f0/exercise%202
EXCERCISE 3: BI-DIRECTIONAL COMMUNICATION
RESULT:
EF08D8F3-8CC4-4F3D-939A-E8996AC8E21A
P5.JS:
CODE (P5.JS):
let velocity; let gravity; let position; let acceleration; let wind; let drag = 0.99; let mass = 50; let sensorValue = 0; // Variable to store wind value from Arduino let windStrength = 0; // Wind force determined by the sensor function setup() { createCanvas(640, 360); noFill(); position = createVector(width / 2, 0); velocity = createVector(0, 0); acceleration = createVector(0, 0); gravity = createVector(0, 0.5 * mass); wind = createVector(0, 0); // Initialize serial communication if (!serialActive) { setUpSerial(); } } function draw() { background(255); // Apply gravity applyForce(gravity); // Apply wind (continuously updated from sensor) wind.x = map(sensorValue, 0, 1023, -2, 2); // Map sensor value to a stronger wind range applyForce(wind); // Update position and velocity velocity.add(acceleration); velocity.mult(drag); position.add(velocity); acceleration.mult(0); // Draw the ball ellipse(position.x, position.y, mass, mass); // Check for bounce if (position.y > height - mass / 2) { velocity.y *= -0.9; // A little dampening when hitting the bottom position.y = height - mass / 2; // Notify Arduino about the bounce sendBounce(); } } function applyForce(force) { // Newton's 2nd law: F = M * A let f = p5.Vector.div(force, mass); acceleration.add(f); } // Notify Arduino when the ball bounces function sendBounce() { if (writer) { writer.write('1\n'); // Send the bounce signal } } // Read wind control value from Arduino function readSerial(data) { if (data != null) { // Parse the sensor value directly into a variable for wind force sensorValue = int(trim(data)); } } // Handle serial setup (using the serial.js file) function keyPressed() { if (key === " ") { setUpSerial(); } }
CODE (ARDUINO):
https://github.com/aaa10159/IntroToIM/blob/b181568724f29fd0d2bf9f290ca3b29949e18740/exercise%203