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);
}