体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

ポケコン PC-G850Vで電子回路工作(6/11)

MCP3002で2ch分A/D変換で取り込んでみた。
2chアナログ値を発生させるのはArduino界隈で使われているPARALLAX inc.の2-Axis Joystick。
データシートはこれ
参考にした配線図はこちらのサイト様のArduino Unoの図。

配線図はCH1と書いてある3ピンもアナログ入力として使用。
a0034780_2365478.jpg
5/31のSPI通信のコマンドで、ODD/SGNが0だとCH0選択なので1でCH1選択にする。
google sheetのタイミングチャートで表のH4,I4が0→1になるので、データとしては最初の方の0,4→2,6になる。

【Cプログラム】
10  main() {
15 unsigned char a[34]={0,2,6,2,6,0,4,2,6,0,5,0,5,
0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,0,5,8,12,99};
20 char b[3][21]={"003C7EFFFFFDFD723C00",
"003C4EFFFFFDFD723C00",
"003C7EFFFFCDFD723C00"};
21 char u[21]="00000000000000000000";
22 int c,d,i,f=0;
23 unsigned char r;
24 int x=-1,x1=-1,x2=-1,w,m=0,k=0;
28 clrscr();
30 outport(0x60,1);
40 outport(0x61,1);
45 do {
50 c=10;d=0;i=-1;
70 /* while(a[++i]!=99) {*/
80 do {
90 outport(0x62,(a[i] & 0xFE));
100 if((a[i] & 1)!=0){
120 r=inport(0x62);
140 if(c!=10) {
150 if(r==1)
155 d+=(1<<c);
160 if(c==0) { w=(int)(d/8);if(f==0) x=x1; else x=x2;
162 if(x!=w) {
163 gcursor(70+(k++%50),25);
164 if(k==49){gcursor(70+48,25);gprint(u);k=0;}else gprint(b[m++%3]);
165 gotoxy(f*5,4);printf("% 5d",d);
166 line(x+(x<w),f*8,w+(x>w),7+f*8,2,0xFFFF,2);
167 if(f==0){a[5]=2;a[6]=6;x1=w;}else{a[5]=0;a[6]=4;x2=w;}f=1-f;}
168 /*pset(x++,d/22,1); */
169 /*x=(x<144)*x;*/
170 }
175 }
180 c--;
185 }
190 } while(a[i++]!=99);
200 } while(1);
210 }
配列データのアンダーラインの所がCH番号の部分。ここを167行目で書換え、フラグfで0/1でCH番号用に制御する。コマンドをかわりばんこに投げてCH0とCH1を交互に取り出す。x1,x2は前回のx座標、CH0/1用を保存。数字は最大1023なので符号を入れて5桁左詰め。
ちなみにボールはA/D値に変化があれば1ドットずつ右へ転がり50ドット移動したら70ドット目に戻る。

Youtube:ポケコンによる2軸アナログ入力
a0034780_23511766.jpg

動画の縦横が回転してしまった。
[PR]
by k1segawa | 2015-06-11 22:22 | ポケコン | Comments(0)