PC & Softwareの最近のブログ記事

設定でハマったので備忘録を兼ねてメモ。

highlight.jsでコードハイライトを試してみました。

java


public class MainActivity extends FragmentActivity {
static final String TAG = "MainActivity";

/**
* The {@link android.support.v4.view.PagerAdapter} that will provide
* fragments for each of the sections. We use a {@link FragmentPagerAdapter}
* derivative, which will keep every loaded fragment in memory. If this
* becomes too memory intensive, it may be best to switch to a
* {@link android.support.v4.app.FragmentStatePagerAdapter}.
*/

/**
* The {@link ViewPager} that will host the section contents.
*/
// ViewPager mViewPager;
GoogleMap map;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
map = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map)).getMap();

MapsInitializer.initialize(this);

moveToSapporoStation();
}
}

C++


/*
* main.cpp
*
* Created on: 2012/06/12
* Author: yasuoki
*/

#include "sentinel.h"
#include "sst_memory.h"
#include "pjson.h"
#include
#include
#include
#include
#include
#include

using namespace SST;

int main(int argc, char *argv[])
{
char confFile[1024];

strcpy(confFile, SST_CONFFOLDER "/" SST_CONFFILE);

openlog(SST_SYSLOGIDENT, LOG_PID, LOG_USER);
Sentinel *obj = new Sentinel();

argc--; argv++;
while(argc) {
char *p = *argv;
if( *p == '-' ) {
if( strcmp( p+1, "f") == 0 ) {
argc--; argv++;
if( !argc ) {
obj->log(LOG_ERR, "param error (-f)");
exit(EXIT_FAILURE);
}
strcpy(confFile, *argv );
argc--; argv++;
} else if( strcmp(p+1, "v") == 0 ) {
#ifdef _DEBUG
printf("sentinel %s (DEBUG build)\n", SST_VERSION);
#else
printf("sentinel %s\n", SST_VERSION);
#endif
return 0;
}
continue;
}
fprintf(stderr, "param error (%s)", p);
exit(EXIT_FAILURE);
}
obj->log(LOG_NOTICE, "sentinel %s", SST_VERSION);

if( !obj->loadConfig(confFile) ) {
exit(EXIT_FAILURE);
closelog();
}

Conf *conf = obj->getConf();
int f = LOG_USER;
if( conf->daemonaize )
f = LOG_DAEMON;
if( (conf->logIdent && strcmp(conf->logIdent, SST_SYSLOGIDENT) != 0) || conf->daemonaize || conf->logFacility != f ) {
closelog();
int f = LOG_USER;
if( conf->daemonaize )
f = LOG_DAEMON;
if( conf->logFacility != 0)
f = conf->logFacility;
openlog(conf->logIdent, LOG_PID, f);
obj->log(LOG_NOTICE, "sentinel %s", SST_VERSION);
}

if( conf->daemonaize ) {
pid_t pid, sid;
pid = fork();
if (pid < 0) {
obj->log(LOG_ERR, "fork");
exit(EXIT_FAILURE);
}
if (pid > 0)
exit(EXIT_SUCCESS);

sid = setsid();
if (sid < 0) {
obj->log(LOG_ERR, "setsid");
exit(EXIT_FAILURE);
}
if (chdir("/") < 0) {
obj->log(LOG_ERR, "chdir");
exit(EXIT_FAILURE);
}
umask(0);
{
FILE *fp = fopen(conf->pidFile, "w");
if( fp == NULL ) {
fprintf(stderr, "create pid file error.\n");
obj->log(LOG_ERR, "create pid file error.");
exit(EXIT_FAILURE);
}
fprintf(fp,"%d", getpid());
fclose(fp);
}
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
}

if( !obj->run() ) {
obj->log(LOG_ERR, "sentinel aborted");
if( conf->daemonaize ) {
unlink(conf->pidFile);
}
exit(EXIT_FAILURE);
}
if( conf->daemonaize ) {
unlink(conf->pidFile);
}
delete obj;
closelog();
#ifdef SST_DEBUG
sst_dump();
#endif
exit(EXIT_SUCCESS);
}

MTで使うには簡単で良いですね。

車載PC Playerの制作も途中ですが、こんどはクルマのメーターパネルを作ってみることにしました。
きっかけは、ELM327 Bluetoothアダプタを買ってみたことで、これを使って遊んでみようという単純なお話です。

クルマ系の話題なのでみんカラの方に少し前から書いていましたが、だんだん工作面が強くなってきたのでこちらで書くことにしました。

2013-01-31 12 08 28.jpg

これをクルマのOBD2ポートに接続すると、Bluetooth経由で主要なデータを取得することができます。
例えば、エンジン回転数、冷却水温度、走行速度、などなど。

5fdd8fe8dd.jpg
これが標準状態のメーターパネルです。

c004cb673c.jpg
ここに適当な大きさのAndroid端末を置いて、

96337d2ead.jpg
オリジナルアプリでELM327から受信したデータを表示します。

6e59458323.jpg
周りをお化粧すると出来上がりという計画。


link.jpg
全体の構成はこんな感じで。


現在の進捗は、Androidアプリの作成がほぼ完成して、周辺機器と格闘しているところです。

実機で開発すると、ハードとソフトの同時開発になってトラブルの元です。
そこで、本体のパネル回りの動作をエミュレートする環境を作ってみました。

12040702.png

フィルム状のOLEDパネルの端子についてRS-ONLINEに聞いてみたら、アダプターボードという物があると教えてくれました。
で、それを購入したのですが使い方が良くわからない。

12032402.jpg

2週間かかると言われていたOLEDパネルがもう届いた。

12030703.jpg

電子部品なのに化粧箱みたいなケース入りです。

電源を見直してみました。変更点は2点。

  1. PC用電源は容量に不安があったので、3Aまでのレギュレータに変更してリレーでON/OFFとする
  2. キーのON/OFFを確実に検出するため、ACCラインでリレーを動かしてPICのポートにつなぐ

pw_v2.png

車載PCの電源には多くの方が頭を悩ませていますが、結構面倒ですね。
まず電圧の問題ですが、一般のPCは最低12Vの安定した電源がないと動作しないので、クルマの11.5Vから13.5Vで変動する電圧では非常に扱いにくいです。しかも少なくとも30W程度の電力が必要になるので、昇圧するのも大変です。
その点、今回は全部の機材に12V以下で動作する物を選択したので、昇圧回路は不要となり少し楽になったのですが、OLEDのためにPICで電源の一部だけON/OFFできるようにしなくてはならなくなりました。

pw_v1.png

散々迷って、結局省電力とコンパクトな点が決めてとなりOLEDディスプレイを使ってみる事にしました。
RS-ONLINEで発注しましたが、英国取り寄せとなり納品まで2週間ほどかかるようです。
OLEDディスプレイということでPCとの表示データの転送速度が懸念となりますが、RS-232Cでどこまでできるのか試してみる事にしました。
120301.jpg

電子ボリュームの動作試験に進む予定でしたが、良く考えたら正負電源が必要なので電源回路を用意しないと進めませんでした。 電源回路を用意するためには必要な電圧が確定しないとならないので、先に表示パネルの選定をする必要があります。

2023年10月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
OpenID対応しています OpenIDについて