スクーミーアートモーションプログラム⑥~圧力センサーで画像を回転~

~アナログ値で画像回転~

ムサシくんの回転スピードが、圧力センサーを押す強さによって変わります!

動画

スクーミーIDEのコード

int sensors[2];
int inByte;

void setup(){
  Serial.begin(9600);
  pinMode(A5, INPUT);
  pinMode(A1, INPUT);
  
  sensors[0] = 0;
  sensors[1] = 0;
  inByte = 0;
  establishContact();
}
 
void loop(){
  if (Serial.available() > 0) {
    inByte = Serial.read();
    sensors[0] = analogRead(A5);
    sensors[1] = analogRead(A1);
    Serial.print(sensors[0]);
    Serial.print(",");
    Serial.println(sensors[1]);    
  }
}
 
void establishContact() {
  while (Serial.available() <= 0) {
    Serial.println("通信中");
    delay(300);
  }
}

アートモーションIDEのコード

import processing.serial.*;
Serial myPort; 

PImage img;
float fill;
float diameter;
float x = 460;
float y = 460;
int spin = 0;
float rad;

void setup() {
  size(980, 980);
  myPort = new Serial(this, Serial.list()[0], 9600);
  myPort.bufferUntil('\n');
  img = loadImage("musashi_face.png");
}

void draw() {
  background(255);
  imageMode(CENTER);
  translate(x, y);
  if (diameter > 0) {
    if (diameter > 200) {
      spin += 5;
    if (diameter > 400) {
      spin += 15;
      if (diameter > 600) {
        spin += 30;

        if (diameter > 800) {
          spin += 60;
        }
      }
    }
    }
  } 
  rad = radians(spin);
  rotate(rad);
  image(img, 0, 0, 600, 600);
}

void serialEvent(Serial myPort) { 
  String myString = myPort.readStringUntil('\n');
  myString = trim(myString);
  int sensors[] = int(split(myString, ','));
  if (sensors.length > 1) {
    diameter = sensors[0] + 20;
    fill = sensors[1];
  }
  myPort.write("A");
}

コメントを残す

メールアドレスが公開されることはありません。