Arduino/Processingコード

コードの説明はこちらへどうぞ(Arduino/Processing)

▽Processingコードへ

トップに戻る

Arduino

感圧センサをアナログピンに接続
LED3つをデジタルピンに接続します。

-----コードここから-----
//ピン
const int PRE = 0; //感圧センサアナログ入力ピン
const int LED_asi = 2; //LED出力ピン
const int LED_ark = 3;
const int LED_kut = 4;

//入力
int pre; //感圧

//変数
int old_pre = 0; //前のループのpre
unsigned long timeA; //足がついた/離れた時刻
unsigned long timeB; //足がついた時刻
unsigned long old_timeB = 0; //前のループのtimeB
unsigned long timeC = 0; //足がついた/離れた時間
unsigned long timeD = 0; //足がついた時間
unsigned long old_timeD = 0; //前のループのtimeD
unsigned long timeE;

//パラメーター
int timerA = 735; //半歩分の時間(ms)
int pre_pir =80; //靴が地面から離れる瞬間の感圧センサの値
int pre_kut = 40; //靴を履いているかどうかの閾値

//出力
int asi; //足踏みをしている間1
int ark; //歩いている間1
int kan; //足の動き1周期にかかる時間(ms)
int kut; //靴を履いている間1
int ser; //シリアル通信用
int c_kan; //音楽の速度

void setup(){
 Serial.begin(9600);
 pinMode(LED_ark , OUTPUT);
 pinMode(LED_kut , OUTPUT);
 pinMode(LED_asi , OUTPUT);
}

void loop(){
 //センサの値を入力
 pre = analogRead(PRE) / 4;

 //足踏みをしている間asiを1にする
 if((old_pre > pre_pir && pre <= pre_pir) || (old_pre < pre_pir && pre >= pre_pir)){ //preが閾値を跨いだ
  timeC = millis();
 }
 if(millis() < timeC + 100){
  asi = 1;
 } else {
  asi = 0;
 }

 //歩いている間arkを1にする
 if((old_pre > pre_pir & pre <= pre_pir) || (old_pre < pre_pir && pre >= pre_pir)){ //preが閾値を跨いだ
  timeA = millis();
 }
 if(millis() < timeA + timerA){
  ark = 1;
 } else {
  ark = 0;
 }

 //靴を履いている間kutを1にする
 if(ark == 1 || pre > pre_kut){
  kut = 1;
 } else {
  kut = 0;
 }

 //1歩の間隔を求めkanに代入
 if(old_pre > pre_pir && pre <= pre_pir){ //足が地面から離れた
  timeB = millis();
  kan = timeB - old_timeB;
  c_kan = map(kan, 500, 1100, 200, 75);
  old_timeB = timeB;
 }
 if(old_pre < pre_pir && pre >= pre_pir){ //足が地面についた
  timeD = millis();
  kan = timeD - old_timeD;
  c_kan = map(kan, 500, 1100, 200, 75);
  old_timeD = timeD;
 }

 if(millis() < timeE + 3000){
  c_kan = 75;
 }

 //変数操作
 old_pre = pre;

 if(kut == 1 && ark == 0){
  timeE = millis();
 }

 //LED操作

 //ark関連
 if(ark == 1){
  digitalWrite(LED_ark, HIGH);
 } else {
  digitalWrite(LED_ark, LOW);
 }

 //kut関連
 if(kut == 1){
  digitalWrite(LED_kut, HIGH);
 } else {
  digitalWrite(LED_kut, LOW);
 }

 //asi関連
 if(asi == 1){
  digitalWrite(LED_asi, HIGH);
 } else {
  digitalWrite(LED_asi, LOW);
 }

 //シリアル

 if(c_kan < 0){
  c_kan = 0;
 } else if(c_kan > 255){
  c_kan = 255;
 }


 if(Serial.available() > 0){
  Serial.write(c_kan);
  Serial.write(kut);
  Serial.write(ark);
  Serial.read();
 }

 delay(100);

}
-----コードここまで-----

△ページ上部へ

Processing

-----コードここから-----
//soniaというライブラリを使用します
import pitaru.sonia_v2_9.*;
import processing.serial.*;

Serial port;

//soundPlayerクラスのplayerを生成します
soundPlayer player;

//曲名
String tuneName = "shinsekaiyori.wav";

//最大速度と最大音量(今回は最大のxとy)を決めておきます
int maxSpeed;
int maxVolume;

int kut, spd, pre_kut;
int ark;

void setup()
{
 size(300,300);

 //初めのおまじない
 Sonia.start(this);

 //曲名でplayerの実体を作れます
 player = new soundPlayer(tuneName);

 //最大速度と最大音量の設定
 maxSpeed = 150;
 maxVolume = 300;

 player.setVolume(150);

 //シリアル通信
 println(Serial.list());
 String arduinoPort = Serial.list()[1];
 port = new Serial(this, arduinoPort, 9600);
 port.clear();
 port.write(65);
}

void draw()
{

 //曲を再生しているときのみ実行する
 if(player.isPlaying() != 0)
 {
  if(ark == 1){
  //曲のスピードはx座標の絶対値
   player.setSpeed(spd);
  } else {
   player.setSpeed(75);
  }
 }
 if(pre_kut == 0 && kut == 1){
  player.play();
 } else if(pre_kut == 1 && kut == 0){
  player.pause();
 }
 pre_kut = kut;
}


//シリアル通信
void serialEvent(Serial port){
 if(port.available() > 2){
  spd = port.read();
  kut = port.read();
  ark = port.read();
  port.write(65);
 }
}

//終了処理
//!!!消すとパソコンにダメージがいきます!!!
void stop()
{
 Sonia.stop();
 super.stop();
}
-----コードここまで-----

△ページ上部へ

トップに戻る







inserted by FC2 system