The following are the p5 codes and the Arduino code for the exercises that we had done in class. I have used a potentiometer as my sensor.
Exercise 1 :
P5 Code
let serial; let xPos = 0; function setup() { createCanvas(800, 400); // Initialize serial serial = new p5.WebSerial(); serial.open(); // Opens serial connection // Listen for incoming data serial.on("data", serialEvent); } function draw() { background(220); ellipse(xPos, height / 2, 50, 50); } function serialEvent() { let data = serial.readLine(); // Read data from Arduino if (data.length > 0) { xPos = map(Number(data), 0, 1023, 0, width); // Map sensor value to canvas width } }
Arduino Code
int potPin = A0; void setup() { Serial.begin(9600); } void loop() { int potValue = analogRead(potPin); Serial.println(potValue); // Send value to p5.js delay(10); }
Exercise 2:
P5 Code
let serial; let brightness = 0; function setup() { createCanvas(400, 200); // Initialize serial serial = new p5.WebSerial(); serial.open(); // Opens serial connection } function draw() { background(220); brightness = map(mouseX, 0, width, 0, 255); // Map mouse position to brightness serial.write(brightness + "\n"); // Send brightness to Arduino fill(0); text("Brightness: " + brightness, 10, 20); }
Arduino Code
int ledPin = 9; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { if (Serial.available() > 0) { int brightness = Serial.parseInt(); analogWrite(ledPin, brightness); // Set LED brightness } }
Exercise 3:
P5 Code
let serial; let balls = []; let wind = 0; function setup() { createCanvas(400, 400); serial = new p5.WebSerial(); serial.open(); // Initialize balls for (let i = 0; i < 10; i++) { balls.push(new Ball(random(width), random(height / 2))); } serial.on("data", serialEvent); } function draw() { background(220); for (let ball of balls) { ball.applyForce(createVector(wind, 0.1)); // Apply wind ball.update(); ball.display(); if (ball.isBouncing()) { serial.write("bounce\n"); // Send bounce signal to Arduino } } } function serialEvent() { let data = serial.readLine(); if (data.length > 0) { wind = map(Number(data), 0, 1023, -0.2, 0.2); // Map sensor value to wind } } class Ball { constructor(x, y) { this.pos = createVector(x, y); this.vel = createVector(0, 0); this.acc = createVector(0, 0); this.r = 10; } applyForce(force) { this.acc.add(force); } update() { this.vel.add(this.acc); this.pos.add(this.vel); this.acc.set(0, 0); // Check for bounce if (this.pos.y > height - this.r) { this.pos.y = height - this.r; this.vel.y *= -0.8; // Reverse and reduce velocity } } display() { ellipse(this.pos.x, this.pos.y, this.r * 2); } isBouncing() { return this.pos.y >= height - this.r; } }
Arduino Code
int sensorPin = A0; int ledPin = 13; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(9600); } void loop() { int sensorValue = analogRead(sensorPin); Serial.println(sensorValue); // Send sensor value to p5.js // Toggle LED for bounce feedback digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); }