目次
コメントはありません。 Comments/ikuma
3週間に渡って試行錯誤したタッチセンサがやっとまともに動いてくれた。
どうやら原因は電力不足だったみたいです…いろいろはまりどころがあるんですね^^;
というわけでACアダプタを接続。そしたら今度はプログラムの書き込みができない!!?
……外部から電力供給してるときは、Program PartでAcquire ModeをResetにしないとだめみたいです。Power Cycleでやるならアダプタをはずしてから書き込まないとうまくい
かないようです。
そして配線のちプログラム。先週終わりに1人で迷走してたゲームの中身のプログラムは、問題としてタッチセンサの0から15までを1つ選ぶ→光らせる→タッチ→正誤の判定。という流れでやることにした。そこでまずはタッチセンサの0から16に対応した4×4のマトリクスLEDを光らせるプログラムを書いた。
y座標は光らせたい0から15までの値を4で割った数とそれに1を足した数の2行を光らせ、x座標は4で割った数分だけを2bitシフトしたところを光らせる??という感じでと説明してもらったんですが…ちょっとx座標のシフトの話をうまくプログラムにかけなくて、ごり押しであまりが0から3までのときのパターンを作り、if文で選択して光らせるという形に…先生ごめんなさい。
また、countという関数でタッチされた番号を返すという形にしたのですが、何もタッチされなかったら?という値を指定してなかったため、タッチしてないときは0を返され、最初から0がタッチされてる=光ってるという状態に…。
これはタッチしてないときは-1を返すをいうことで解決しました。逆に返ってきた値が-1のときはLEDを全部消すというプログラムを書くことで、タッチしてるときだけ光るようにしました。
とりあえずタッチすると4×4でマトリクスLEDが光るところまではできた……のですが、ここで問題が。
なぜか15番目のタッチセンサだけタッチすると0番のパターンが光ります。例の作った関数に15という値を直接代入すればちゃんと15番のパターンが光るんですが、タッチセンサにすると0番目が光ります…なぜでしょう???
元々先週から0番目がタッチされたかどうか調べるプログラムを書いても、15番目をタッチしても反応してたりしてたんですが…
来週は15番目の謎を解いて、問題を出して光らせるプログラムを書きたいと思います。
タッチセンサの読みとりプログラムを書いた。
センサの0番目から15番目までの何番目がタッチされてるか?を返すプログラムを書き、実行してみたがうまくいかない…
0番目の値を読み取り、もしタッチされていれば0を返すという処理ならうまくいくが、それを16回繰り返すと実行してくれないという問題にずっと試行錯誤…
最終的に先生と相談しながらやってみると、しきい値が高すぎた模様。しきい値を50とし、10回読み取ったうち1回でも50を上回っていたら○を表示するというプログラムを書いたときはなんとか反応してくれた。しかしそれだとしきい値が低すぎでどこを押しても反応するという状態に…
しかも0だけを読み取ると指定したときも、16回繰り返すとしたときもずっと16番目のセンサだけは反応してくれた。。。。なぜだっっ??
徐々に残り回数のカウントダウンが見えてきて焦り始めています。ちょっと今週中に家でゲームの内容のプログラムを書いてみようと思いつついろいろ問題が発生。
マトリクスLEDとタッチセンサの0から15をどうやって結びつけようか…。自分的にはランダムな1つ(2×2のマトリクスLED)を光らせ、その後タッチセンサからの信号を読み取り、光らせたLEDと一致しているかどうかの判定を表示という風にやろうかなと考えていたら、後半の判定の部分は今日作ろうとしていた関数を使えば簡単にできそうだけど、やっぱりランダムな1つを表示というところがどうしていいか分かりません。
ランダム関数を使って16個のうちどこか1つだけ1とする
↓
なんらかの方法で対応するマトリクスLEDの場所を光らせる(ここが分かりません)
↓
タッチしてもらう
↓
判定
もし何かいい解決法(無理にランダム関数を使わなくても良いです)があったらご教授願います。
タッチセンサのはんだつけと動作確認をした。タッチセンサはruBuf[0]と書いたら0番目のセンサ(横に書いてある数字-1)の数字を読み込み、値を記憶するというのでプログラム中で操作するというもの。タッチしたときの値がどの程度のものか調べるために、ruBufに入る0〜255までの数字に応じて段階的にLEDが光るというものを作ろうとしたけれどうまくいかなかった。どうやら値を読み込むという段階でうまくいってない模様…なかなか難しいです^^;
来週からは全体の部品もそろったところで、少しずつゲームの中身を作っていきたいと思う。
とりあえずランダムに(できるか分からないけど…)いくつかの値を表示→LEDをタッチ→正誤の判定みたいな流れのものを作れたらいいなと思います。
ただいきなりランダムだと難しそうなので、まずは光るLEDを決めておいてタッチした順番を正しく判定するかどうか…とかからやろうかなと思います。
今日はマトリクスLEDをひたすらダイナミック駆動させて光らせた。
まずタイマ割り込みという関数を用意することで、メイン関数の中に光らせたい模様をいくつか書くだけで順番に光らせてくれるというもの。
自分の配線したマトリクスLEDは左下にでっぱりがあるように置くと、メイン内のarray配列は右に90度回転。つまり右側縦1列が実際に表示されるマトリクスLEDでは下になるように書かなくてはならないということが判明。。。。
多分回転する方法があるっぽいけれど、ちょっと頭がごちゃごちゃになってしまったのでごり押しで右縦1列を下とみて模様を書いた……
今回は、”判定は?”→(正誤の判定)”○or×”と表示させたいと思ったので、それぞれの文字を作った。
来週はタッチセンサを基板につけて、タッチしたデータを記憶する…みたいなことがやれたらいいなと思いました。
配線終了。とりあえずマトリクスLEDをちゃんとつなげたか簡単に光らせてみた。
マトリクスLEDの光らせ方は、自分の場合はカソード側につなげたPort2[i]を0にして、アノード側につなげたPort1[j]を1にすれば、j行i列のLEDが光る……はず。
先週決めた作るものを実際に作り始めた。まずは配線から…
8×8LEDは各行の先に抵抗をつけたので光らせたい行をLOWにして光らせたい列をHighにすれば良い。
そしてなんと9〜16番ピンの配置と実際の配線が逆になっていたことが判明……
とりあえず……次週は上のピンの配線しなおしからしたいと思います…
作りたいものを決めた。自分は8×8LEDを使って2×2を1マスとしてタッチセンサを用いた記憶ゲームを作ることになった。
その後前回作った基板にプログラムを書き込むことをした。
最初のモジュールの設定で、使用するマイコン(CY8C27443-24PX)にしないとプログラムが書き込めないことが分かった。
また、LEDをつけたところ。SWをつけたところをちゃんと考えてプログラムと配線をしないといけないことが分かった。これが意外と苦労したので、基板を作るときからちゃんとメモをとったりすれば良かったと反省……
先週に引き続きPSoCのFirstTouchでタッチセンサを使ってLEDを光らせるということをした。
その後、はんだ付けをしてスイッチとLEDがついた基盤を作った。
初めてのはんだつけだったので作るのにかなり時間がかかりました。いろいろコツがあるみたいなので徐々にできるようになりたいと思います。
来週は作りたいもの発表なので一週間でなんとかいくつか案を練りたいと思います。
PSoCを使ってLEDを光らせてみた。
最初は何をしているのか分からず回路図とプログラムをただ打ってるだけだったけれど、光センサによってLEDの色を変えたりしているうちに、少しだけ分かったような気がした。
マイコンの使い方みたいな本を読んで、いろいろな使い方があることが分かり、無線みたいなのを使ってやれたら面白そうだなーと思った。
先輩方の作品を見てただ凄いの一言でした。
自分は何を作ろうか来週以降からちゃんと考え始めないと…