Exercise 1:
Make something that uses only one sensor on Arduino and makes the ellipse in p5 move on the horizontal axis, in the middle of the screen, and nothing on Arduino is controlled by p5.
The location of the x of ellipse is being altered by the potentiometer.
The value from the potentiometer is mapped between 0 and 640, the width of the canvas.
Utilizing a Potentiometer, the ellipse moves along the horizontal axis, while also changing colors by making changes to the B value of fill.
P5 Code:
let ellipseX = 0; //x value of ellipse to be changed by potentiometer let B =0; function setup() { createCanvas(640, 480); ellipseMode(CENTER); } function draw() { clear(); background(0) fill(255,0,B); ellipse(ellipseX, height/2, 50, 50); if (!serialActive) { text("Press Space Bar to select Serial Port", 20, 30); } else { text("Connected", 20, 30); // Print the current values text('ellipseX = ' + str(ellipseX), 20, 50); } } function keyPressed() { if (key == " ") { setUpSerial(); //establish serial communication } } function readSerial(data) { if (data) { //run only if data is received data = data.trim(); // Remove any whitespace if (!isNaN(data)) { //check whether data is a number or not //debug: console.log("Received:", data); ellipseX = int(data); } }
Exercise 2:
Make something that controls the LED brightness from p5.
A slider is created and data from it is sent to the Arduino. Based on the input from the p5 sketch, the LED’s brightness is adjusted accordingly.
P5 Code:
let slider; let brightness = 0; function setup() { createCanvas(400, 400); // Create a brightness slider slider = createSlider(0, 255, 128); slider.position(width/2, height/2); slider.style('width', '100px'); } function draw() { background(255); if (!serialActive) { textAlign(CENTER) text("Press Space Bar to select Serial Port", width/2, height/3); } else { text("Connected", width/2, height/3); } brightness = slider.value(); } function keyPressed() { if (key == " ") { // important to have in order to start the serial connection!! setUpSerial(); } } function readSerial(data) { console.log(data); let dataToSend = brightness + ", \n"; writeSerial(dataToSend); }
Exercise 3:
Take the gravity wind example and make it so every time the ball bounces one led lights up and then turns off, and you can control the wind from one analog sensor.
Using a potentiometer mapped from -2 to 2, when the potentiometer is towards the left, the wind blows towards the left, and vice versa. The LED lights up every time the ball touches the bottom edge of the canvas.
A serial signal is sent to arduino everytime the ball touches the bottom of the canvas, resulting in the led to light up on the arduino. The potentiometer’s value will be reflected in the direction that the wind is blowing on the ball. I also added two walls on the right and left sides of the canvas, to prevent the wind from blowing the ball outside of the canvas.
P5 Code:
let led; let velocity; let gravity; let position; let acceleration; let wind; let drag = 0.99; let mass = 50; 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); } function draw() { background(255); applyForce(wind); applyForce(gravity); velocity.add(acceleration); velocity.mult(drag); position.add(velocity); acceleration.mult(0); ellipse(position.x,position.y,mass,mass); if (position.y > height-mass/2) { velocity.y *= -0.9; // A little dampening when hitting the bottom position.y = height-mass/2; if(serialActive){ writeSerial("bounced\n"); } } // Check for collisions with the left wall if (position.x < mass / 2) { velocity.x =0; // Reverse horizontal velocity (bounce) position.x = mass / 2; // Correct position } // Check for collisions with the right wall if (position.x > width - mass / 2) { velocity.x =0; // Reverse horizontal velocity (bounce) position.x = width - mass / 2; // Correct position } } function applyForce(force){ // Newton's 2nd law: F = M * A // or A = F / M let f = p5.Vector.div(force, mass); acceleration.add(f); } function keyPressed() { if (key == " ") { // important to have in order to start the serial connection!! setUpSerial(); } if (keyCode==DOWN_ARROW){ //mass=random(15,80); position.y=-mass; velocity.mult(0); } } function readSerial(data){ if (data != null){ wind.x=int(data); console.log("working"); } }