xxxxxxxxxx
103
//let interval;
let angle = 0;
let maxRpm = 100;
let lastMillis = 0;
let gui;
//let step;
/*
var Fan = 1;
var FanMin = 1;
var FanMax = 9;
var FanStep = 1;
var Rotations = 0;
var RotationsMin = 0;
var RotationsMax = 255;
var RotationsStep = 5;
*/
let speed = [10, 20, 30, 40, 50, 60, 70, 80, 90]; // speed settings
let angles = [0, 0, 0, 0, 0, 0, 0, 0, 0];
let params = { //______________ gui list : number make automatically type sliders
speed0: speed[0],
speed1: speed[1],
speed2: speed[2],
speed3: speed[3],
speed4: speed[4],
speed5: speed[5],
speed6: speed[6],
speed7: speed[7],
speed8: speed[8],
}
function gui_setup() {
gui = createGui('Fan Speed');
sliderRange(0, 255, 5);
// gui.addGlobals('Rotations', 'Fan'); // multiplex idea possible with this lib?
gui.addObject(params);
}
function gui_readback() {
speed[0] = params.speed0;
speed[1] = params.speed1;
speed[2] = params.speed2;
speed[3] = params.speed3;
speed[4] = params.speed4;
speed[5] = params.speed5;
speed[6] = params.speed6;
speed[7] = params.speed7;
speed[8] = params.speed8;
}
function setup() {
createCanvas(2200, 200);
rectMode(CENTER);
angleMode(DEGREES);
lastMillis = millis();
gui_setup();
}
function keyPressed() {
if (keyCode == RETURN) {
console.log(speed);
console.log(angles);
}
if (key == 'c' ) params.speed0 = 0; //test, works for value but not for slider pos???
}
function updateAngle() {
let newMillis = millis();
let elapsedMillis = newMillis - lastMillis;
// let rpm = maxRpm * (Rotations / 255.0);
for (let i = 0; i < many; i++) {
let rpm = maxRpm * (speed[i] / 255.0);
let rps = rpm / 60;
let rev = rps * (elapsedMillis / 1000);
angles[i] += 360 * rev;
}
lastMillis = newMillis;
}
let many = 9;
function draw() {
background(125);
translate(150, 100);
gui_readback(); // very bad way, should find how to use a change event
updateAngle();
for (let i = 0; i < many; i++) draw_fan(angles[i]);
}
function draw_fan(angle) {
translate(150, 0);
push();
rotate(angle);
stroke(0);
fill(255, 255, 255);
rect(0, 0, 25, 150);
circle(0, 0, 40);
pop();
}