Pot control spin&viz

My physical controller for a previous processing sketch consists of one single potentiometer. I chose to use a pot primarily because it is more stable than many sensors, and it’s handy. The sketch I used is the spinning INTER letters. This time, instead of having the letters rotate by themselves,  the pot would control their rotation speed and visibility.

Video:

The code:

int potPin = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(57600);
  Serial.println("500");
}

void loop() {
  // put your main code here, to run repeatedly:
   if ( Serial.available() > 0) {
    int inByte = Serial.read();
    Serial.println( analogRead(potPin));
  }
}
import processing.serial.*;
Serial myPort;

//float alpha = map(sWeight, 10, 30, 170, 200);
float rotArray[] = new float [4];
float rotIncrease;
float c;

void setup() {
  size(800, 800);
  myPort = new Serial( this, "/dev/cu.usbserial-DA01LJIV", 57600);
  myPort.bufferUntil('\n');
  stroke(c);
  strokeWeight(20);
}

void draw() {
  fill(0, 60);
  rect(0, 0, 800, 800);

  rotArray[0] = 1.0;
  for ( int i=0; i<rotArray.length; i++) {
    rotArray[i] += rotIncrease/180;
  }

  pushMatrix();
  translate(width/2, height/2);
  rotate(radians(rotArray[1]));
  charI();
  rotate(radians(rotArray[1]));
  charN();
  rotate(radians(rotArray[2]));
  charT();
  rotate(radians(rotArray[3]));
  charE();
  rotate(radians(rotArray[3]));
  charR(); 
  popMatrix();
} 

void charI() {
  stroke(c);
  strokeWeight(20);
  line(0, 0, 40, 0);
  line(0, 60, 40, 60);
  line(20, 0, 20, 60);
}

void charN() {
  line(60, 20, 60, 60);
  line(60, 20, 90, 60);
  line(90, 60, 90, 20);
}

void charT() {
  line(80, 40, 120, 40);
  line(100, 40, 100, 90);
}

void charE() {
  line(140, 60, 180, 60);
  line(140, 60, 140, 110);
  line(140, 85, 170, 85);
  line(140, 110, 180, 110);
}

void charR() {
  line(200, 100, 200, 180);
  noFill();
  arc(200, 120, 70, 40, PI+HALF_PI, TWO_PI+HALF_PI);
  line(200, 130, 240, 170);
}

void serialEvent(Serial myPort) { 
  String input = myPort.readString();
  float val = float(input);
  println(val);
  c = map(val, 0, 1023, 0, 255);
  rotIncrease = map(val, 0, 1023, 0, 360);
  myPort.write('x');
}

Leave a Reply