桜の開花を撮っておこうと気がついたのは既に日没後。
でもまだ薄明るいからなんとかなるべと、とりあえず一番明るいレンズを付けて挑戦。ボケた部分は偽色っぽいのが見えるけどなんとかなるもんだ。
最近はデジタル化してズーム主体の暗いレンズのオンパレードだけど昔の明るいレンズってやっぱり素敵だわ。
1/250でシャッター切れるし。
背景にある醜い電線を分らなくしてくれるし。
ついでにストロボにも挑戦。マニュアル発光で1/64でこんなもの。もう少し落としても良かったかな。
春♪
3桁ごとのカンマ区切り
数字を出力するときに3桁毎にカンマで区切るというよくあるコード。
なんとなく書いてみたのが format3_1 のコード。
それをちょっとづづいじっていって、短くしたのが format3_7 のコード。
短くなると、なんとなく嬉しい。
出力結果は、
123456789012345
3-1 123,456,789,012,345
3-2 123,456,789,012,345
3-3 123,456,789,012,345
3-4 123,456,789,012,345
3-5 123,456,789,012,345
3-6 123,456,789,012,345
3-7 123,456,789,012,345
大丈夫みたい。
// three_dig.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" #include "three_dig.h" #include <iostream> #include <stdlib.h> #include <string> #ifdef _DEBUG #define new DEBUG_NEW #endif // 唯一のアプリケーション オブジェクトです。 CWinApp theApp; using namespace std; // 3桁ごとのカンマ区切り(正の整数専用) // 無理せずに思いつくとおり書いてみる。 string format3_1(long long l) { string s = ""; int d = 0; int n; do { // 3桁毎をチェックしてカンマ挿入 if (d == 3) { s = ',' + s; d = 0; } d ++; // 下一桁をバッファの先頭に追加 n = l%10; s = char('0'+(n)) + s; // 数値を1桁シフト(下一桁を取り除く) l /= 10; } while (l > 0); return s; } // l /= 10; と n = l%10; は直接書けばいいや。と、思って省略。 string format3_2(long long l) { string s = ""; int d = 0; do { if (d == 3) { s = ',' + s; d = 0; } d ++; s = char('0'+(l%10)) + s; } while ((l /= 10) > 0); return s; } // d のインクリメントを条件判断と一緒にする。 string format3_3(long long l) { string s = ""; int d = 0; do { if (!(d++ % 3)) { if (d > 1) s = ',' + s; } s = char('0'+(l%10)) + s; } while ((l /= 10) > 0); return s; } // 1桁目の時のカンマ抑制 (d>1) も一緒にする。 string format3_4(long long l) { string s = ""; int d = 0; do { if (!(d++ % 3) && (d>1)) s = ',' + s; s = char('0'+(l%10)) + s; } while ((l /= 10) > 0); return s; } // (l /= 10) > 0 は l /= 10 でいいことに気づく。 string format3_5(long long l) { string s = ""; int d = 0; do { if (!(d++ % 3) && (d>1)) s = "," + s; s = char('0'+(l%10)) + s; } while (l /= 10); return s; } // if を ?: 演算子に置き換える。 string format3_6(long long l) { string s = ""; int d = 0; do { s = char('0'+(l%10)) + (((!(d++ % 3) && (d>1)) ? ",": "") + s); } while (l /= 10); return s; } // do-while を for に変える。 string format3_7(long long l) { string s = ""; for (int d=0; l ; d++, l/=10) s = char('0'+(l%10)) + (((!(d % 3) && d) ? ",": "") + s); return s; } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; HMODULE hModule = ::GetModuleHandle(NULL); if (hModule != NULL) { // MFC を初期化して、エラーの場合は結果を印刷します。 if (!AfxWinInit(hModule, NULL, ::GetCommandLine(), 0)) { // TODO: 必要に応じてエラー コードを変更してください。 _tprintf(_T("致命的なエラー: MFC の初期化ができませんでした。\n")); nRetCode = 1; } else { // TODO: アプリケーションの動作を記述するコードをここに挿入してください。 long long l = 123456789012345; cout << l << endl; cout << " 3-1 " << format3_1(l) << endl; cout << " 3-2 " << format3_2(l) << endl; cout << " 3-3 " << format3_3(l) << endl; cout << " 3-4 " << format3_4(l) << endl; cout << " 3-5 " << format3_5(l) << endl; cout << " 3-6 " << format3_6(l) << endl; cout << " 3-7 " << format3_7(l) << endl; } } else { // TODO: 必要に応じてエラー コードを変更してください。 _tprintf(_T("致命的なエラー: GetModuleHandle が失敗しました\n")); nRetCode = 1; } return nRetCode; }
Bluetoothキーボード
温湿度センサ
お休みなので以前から気になっていたセンサを試してみた。
千石さんで見つけた「HIH-4030 湿度センサー」。
湿度が電圧でリニアに測れるらしい。
センサの出力電圧は2.049V。湿度への換算はデータシートの式から
VOUT=(VSUPPLY)(0.0062(sensor RH) + 0.16)とあるので湿度を求めるには、
sensor RH = (VOUT / VSUPPLY – 0.16) / 0.0062 でいいのかな。
そうしますと、VOUT=2.049 に VSUPPLY=5.04 なので、
sensor RH は電卓で計算すると、約39.8%となります。これに温度補正を加えるようです。
温度はLM61でお手軽に計測。このセンサは1℃あたり10mVの出力変化で、0℃のときは600mVを出力してくれる。つまり出力が0Vなら-60℃、800mVなら+20℃となる。分かりやすいのでお気に入りのセンサです。
LM61の出力は824mV。ということは室温22.4℃なので、データシートにある温度補償の式、
True RH = (Sensor RH)/(1.0546 – 0.00216T) に代入すると、39.8 / (1.0546 – 0.00216*22.4)≒39.554。つまり約39.6% が温度補償後の湿度となりました。


![[Win]+[Space]キーで切り替え。 [Win]+[Space]キーで切り替え。](http://tokachi-lab.com/wp3/wp-content/uploads/2012/04/IMG_0802-200x300.png)
