その他のショップやセンサについては、このブログページ右側の「ショップリスト」にも記載してあるので参考にして下さい。
センサ活用ハンドブック―色/明るさから距離/圧力まで14のターゲットを検出 (トランジスタ技術SPECIAL)
posted with amazlet at 09.04.01
CQ出版
売り上げランキング: 109202
四谷アートステュディウム・建築発明工作ゼミ(2008年度)の授業サブノート
主にProcessingやArduinoについて記載しています。
//円のXY座標の変数を用意する
int x,y;
//円の座標とマウス座標の差分(ずれ)の変数
int dx,dy;
//ドラッグ開始終了のフラグを用意
boolean startDrag;
//円の半径
int r=30;
void setup(){
size(600,600);//画面サイズ設定
smooth();//滑らかな描画にする
stroke(255);//線色を白
fill(0);//塗り色を黒
x=width/2;//円を画面中心に配置しておく
y=height/2;
}
void draw(){
background(0);//背景色(黒)
//ドラッグ中の場合
if(startDrag==true){
//マウス座標に差分を加えた値を円の座標に代入
x=mouseX+dx;
y=mouseY+dy;
}
//円を描画する
ellipse(x,y,r*2,r*2);
}
void mousePressed(){
//円中心座標とマウス座標の距離が円半径以内の場合
if(dist(x,y,mouseX,mouseY)<=r){
//ドラッグ用フラグをtrue(ドラッグ中)にする
startDrag=true;
//円の座標とマウス座標の差分を求めておく
dx=x-mouseX;
dy=y-mouseY;
}
}
void mouseReleased(){
//ドラッグ用フラグをfalse(ドラッグなし)にする
startDrag=false;
}
//円のXY座標の変数を用意する
int x,y;
//円の座標とマウス座標の差分(ずれ)の変数
int dx,dy;
//ドラッグ開始終了のフラグ
boolean startDrag;
//円の半径
int r=30;
//記録中/記録停止のフラグ
boolean startRecord;
//座標記録用の配列を用意し、内容を空にしておく。
int[] xPos={};
int[] yPos={};
void setup(){
size(600,600);//画面サイズ設定
smooth();//滑らかな描画にする
stroke(255);//線色を白
fill(0);//塗り色を黒
x=width/2;//円を画面中心に配置しておく
y=height/2;
}
void draw(){
background(0);//背景色(黒)
//ドラッグ中の場合
if(startDrag==true){
//マウス座標に差分を加えた値を円の座標に代入
x=mouseX+dx;
y=mouseY+dy;
}
//記録中の場合
if(startRecord==true){
xPos=append(xPos,x);//座標値を配列に付け加えていく
yPos=append(yPos,y);
}
//円を描画する
ellipse(x,y,r*2,r*2);
}
void mousePressed(){
//円中心座標とマウス座標の距離が円半径以内の場合
if(dist(x,y,mouseX,mouseY)<=r){
//ドラッグ用フラグをtrue(ドラッグ中)にする
startDrag=true;
//円の座標とマウス座標の差分を求めておく
dx=x-mouseX;
dy=y-mouseY;
}
}
void mouseReleased(){
//ドラッグ用フラグをfalse(ドラッグなし)にする
startDrag=false;
}
void keyPressed(){
if(key=='r'){//「r」キーを押した場合
if(startRecord==true){//記録中の場合
startRecord=false;//記録なしに戻す
fill(0,0,0);//円の塗色を黒に戻す
}else{//記録なしの場合
startRecord=true;//記録中にする
fill(255,0,0);//円の塗色を赤にする
}
}
}
//円のXY座標の変数を用意する
int x,y;
//円の座標とマウス座標の差分(ずれ)の変数
int dx,dy;
//ドラッグ開始終了のフラグ
boolean startDrag;
//円の半径
int r=30;
//記録中/記録停止のフラグ
boolean startRecord;
//座標記録用の配列を用意し、内容を空にしておく
int[] xPos={};
int[] yPos={};
//消去用に空の配列を用意しておく
int[] clearArray={};
void setup(){
size(600,600);//画面サイズ設定
smooth();//滑らかな描画にする
stroke(255);//線色を白
fill(0);//塗り色を黒
x=width/2;//円を画面中心に配置しておく
y=height/2;
}
void draw(){
background(0);//背景色(黒)
//ドラッグ中の場合
if(startDrag==true){
//マウス座標に差分を加えた値を円の座標に代入
x=mouseX+dx;
y=mouseY+dy;
}
//記録中の場合
if(startRecord==true){
xPos=append(xPos,x);//座標値を配列に付け加えていく
yPos=append(yPos,y);
}
//円を描画する
ellipse(x,y,r*2,r*2);
}
void mousePressed(){
//円中心座標とマウス座標の距離が円半径以内の場合
if(dist(x,y,mouseX,mouseY)<=r){
//ドラッグ用フラグをtrue(ドラッグ中)にする
startDrag=true;
//円の座標とマウス座標の差分を求めておく
dx=x-mouseX;
dy=y-mouseY;
}
}
void mouseReleased(){
//ドラッグ用フラグをfalse(ドラッグなし)にする
startDrag=false;
}
void keyPressed(){
//記録用の処理
if(key=='r'){//「r」キーを押した場合
if(startRecord==true){//記録中の場合
startRecord=false;//記録なしに戻す
fill(0,0,0);//円の塗色を黒に戻す
}else{//記録なしの場合
startRecord=true;//記録中にする
fill(255,0,0);//円の塗色を赤にする
}
}
//保存用の処理
if(key=='s'){//「s」キーを押した場合
//ファイル選択画面で保存先を決める
String savePath = selectOutput();
//保存先のパスが空ではないとき
if (savePath != null) {
//保存用のインスタンスを用意する
PrintWriter output;
//保存先にファイルを生成
output=createWriter(savePath);
//配列に含まれる値を出力する
for(int i=0;i<xPos.length;i++){
output.println(xPos[i]+","+yPos[i]);//X座標+コンマ+Y座標+改行
}
output.flush();//データ保存
}
}
//記録内容を消去する処理
if(key=='c'){//「c」キーを押した場合
xPos=clearArray;//X座標の配列に空の配列を代入し、内容を消去
yPos=clearArray;//Y座標の配列に空の配列を代入し、内容を消去
}
}
//円のXY座標の変数を用意する
int x,y;
//円の座標とマウス座標の差分(ずれ)の変数
int dx,dy;
//ドラッグ開始終了のフラグ
boolean startDrag;
//円の半径
int r=30;
//記録中/記録停止のフラグ
boolean startRecord;
//座標記録用の配列を用意し、内容を空にしておく。
int[] xPos={};
int[] yPos={};
//消去用に空の配列を用意しておく
int[] clearArray={};
boolean startPlay;//再生用フラグ
int count;//再生用カウンタ変数
void setup(){
size(600,600);//画面サイズ設定
smooth();//滑らかな描画にする
stroke(255);//線色を白
fill(0);//塗り色を黒
x=width/2;//円を画面中心に配置しておく
y=height/2;
}
void draw(){
background(0);//背景色(黒)
//ドラッグ中の場合
if(startDrag==true){
//マウス座標に差分を加えた値を円の座標に代入
x=mouseX+dx;
y=mouseY+dy;
}
//記録中の場合
if(startRecord==true){
xPos=append(xPos,x);//座標値を配列に付け加えていく
yPos=append(yPos,y);
}
//再生中の場合
if(startPlay==true){
//カウンタ変数に合わせてXY座標の配列の値を円の座標に代入していく
x=xPos[count];
y=yPos[count];
fill(0,255,0);//塗色を緑にする
count++;//カウンタ変数を増加させる
if(count>xPos.length-1){//カウント数が配列データの個数以上になったら
startPlay=false;//再生停止にする
count=0;//カウンタ変数をゼロに戻す
println("Finish Playing");//再生終了の出力
fill(0);//塗色を黒に戻す
}
}
//円を描画する
ellipse(x,y,r*2,r*2);
}
void mousePressed(){
//円中心座標とマウス座標の距離が円半径以内の場合
if(dist(x,y,mouseX,mouseY)<=r){
//ドラッグ用フラグをtrue(ドラッグ中)にする
startDrag=true;
//円の座標とマウス座標の差分を求めておく
dx=x-mouseX;
dy=y-mouseY;
}
}
void mouseReleased(){
//ドラッグ用フラグをfalse(ドラッグなし)にする
startDrag=false;
}
void keyPressed(){
//記録用の処理
if(key=='r'){//「r」キーを押した場合
if(startRecord==true){//記録中の場合
startRecord=false;//記録なしに戻す
fill(0,0,0);//円の塗色を黒に戻す
}else{//記録なしの場合
startRecord=true;//記録中にする
fill(255,0,0);//円の塗色を赤にする
}
}
//保存用の処理
if(key=='s'){//「s」キーを押した場合
//ファイル選択画面で保存先を決める
String savePath = selectOutput();
//保存先のパスが空ではないとき
if (savePath != null) {
//保存用のインスタンスを用意する
PrintWriter output;
//保存先にファイルを生成
output=createWriter(savePath);
//配列に含まれる値を出力する
for(int i=0;i<xPos.length;i++){
output.println(xPos[i]+","+yPos[i]);//X座標+コンマ+Y座標+改行
}
output.flush();//データ保存
}
}
//記録内容を消去する処理
if(key=='c'){//「c」キーを押した場合
xPos=clearArray;//X座標の配列に空の配列を代入し、内容を消去
yPos=clearArray;//Y座標の配列に空の配列を代入し、内容を消去
}
//再生用の処理
if(key=='p'){
//記録されているデータがある場合
if(xPos.length>0){
startPlay=true;//再生中にする
}
}
//ファイルデータ読み込みの処理
if(key=='l'){//「l」キーを押した場合
//読み込みファイルパスの指定
String loadPath = selectInput();
//パスが空ではないとき
if (loadPath != null){
//座標用配列に空の配列を代入し、内容を消去しておく
xPos=clearArray;
yPos=clearArray;
//文字列の配列を用意し、データを行ごとに配列に代入する(読み込む)
String[] lines=loadStrings(loadPath);
//各行ごとに、文字列データをXとYの座標の数値に変換する
for (int i=0; i<lines.length; i++) {//行数の分だけ繰り返し処理する
//コンマ記号を境目に文字列データを分割し、数値用の配列に代入
int[] data=int(split(lines[i],','));
//数値用配列のはじめの値をX座標用配列に追加していく
xPos=append(xPos,data[0]);
//数値用配列のつぎの値をY座標配列に追加していく
yPos=append(yPos,data[1]);
}
}
}
}
//イーサネットライブラリを取り入れる
#include <Ethernet.h>
//MAC ID(各シールドに記載)
byte mac[] = { 0x00, 0x50, 0xC2, 0x97, 0x20, 0x11 };
//サーバ用IPアドレスの設定
byte ip[] = { 192, 168, 3, 100 };
//ポート設定(80:HTTPプロトコル)
Server server(80);
void setup(){
//イーサネット通信開始
Ethernet.begin(mac, ip);
//サーバ開始
server.begin();
}
void loop(){
//クライアントからのデータ受信
Client client = server.available();
//クライアントからの受信がある場合
if (client) {
//ブラウザからのHTTPリクエストの空白行の有無のフラグ
boolean current_line_is_blank = true;
//クライアントとの接続中の処理
while (client.connected()) {
//クライアントから受信データがあるとき
if (client.available()) {
//HTTPリクエスト(受信データ)を一つずつ読み込む
char c = client.read();
//HTTPリクエストにラインフィード(改行)があり、
//現在空白行である場合
if (c == '\n' && current_line_is_blank) {
//HTTPレスポンス(返信)
server.println("HTTP/1.1 200 OK");//リクエスト成功
server.println("Content-Type: text/html");//HTML文書形式
server.println();//空白行を入れる
//タイトルバー表示
server.println("<title>KOUSAKU WEB SITE</title>");
server.print("ANALOG INPUT: ");//文字表示
server.print(analogRead(0));//アナログ入力値
server.println("<br/>");//改行
//リンク画像表示
server.println("<img src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaheaHbQ3daidUYbowV86kuQZ_KEFKepS8OSdQpKmfQTKJPJObPSP6EhPBS-tk-zBwZ1lTEDlUhcfi9d7DxbaO0nzj3W2qkHQFgbsXgLiIGrxNnX3IR50H_YSkfuYKezThpK_vU7TPe4Y2/s400/ethernet.png\">");
server.println("<br/>");//改行
//このブログへのリンク
server.println("<a href=\"http://kousaku-kousaku.blogspot.com\">GO TO: KOUSAKU BLOG PAGE<a>");
break;
}
if (c == '\n') {//読み込んだ文字がラインフィードの場合
//現在の行を空白行とみなす
current_line_is_blank = true;
} else if (c != '\r') {//読み込んだ文字がキャリッジリターン以外の場合
//現在の行を空白行としない
current_line_is_blank = false;
}
}
}
delay(1);
client.stop();
}
}
GET / HTTP/1.1 (リクエスト行)
Host: 192.168.3.100:12345 (メッセージヘッダ:以下の空白行手前まで)
User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; ja-JP-mac; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cache-Control: max-age=0
(空白行)
(メッセージボディ:今回は特に何も送るデータは含まれていない)
HTTP/1.1 200 OK (ステータス行)
content-type:text/html (メッセージヘッダー)
(空白行:CR+LF)
<html> (メッセージボディ)
<head>...</head>
<body>...</body>
</html>