投稿

Arduinoでのアナログジョイスティックの使い方

イメージ
Arduinoのアナログジョイスティックについてまとめておこうと思う。 秋月電子→ http://akizukidenshi.com/catalog/g/gK-10263/ ゲーム機に使われている操作機器なので、簡単にプログラミングすることが出来る。 アナログジョイスティックの回路を作る 上から見た感じはこんな風にしてみた。 これだとどうつないでいるのかわからないので、アナログジョイスティックを外した画像もはっておく。 CN1と書かれたほうが電源のつながっているピン側になる。 10kΩの抵抗を挟んでおくとよい。 ブレッドボードの下側を通るようにつないだので、LCDディスプレイを見やすくなる。 なるべくブレッドボードの端に置いたので、ほかのものをつなぎやすくなる。 ブレッドボードで回路を作るときの参考にしてほしい。 ArduinoIDEのプログラム // ------------------------------------------------------------ // インクルード // ------------------------------------------------------------ #include <Wire.h> #define PIN_AX (A0) #define PIN_AY (A1) void setup() { Wire.begin(); lcdInit(); pinMode(PIN_AX,INPUT); pinMode(PIN_AY,INPUT); lcdDisp1("Hello"); delay(1000); } void loop() { int aj; aj=ajoyget(); if(aj&0x08){ lcdDisp1("up"); } if(aj&0x04){ lcdDisp1("down"); } if(aj&0x02){ lcdDisp1("left"); } if(aj&0x01){ lcdDisp...

STM32F401でのLCDモジュール(AQM0802)の使い方

イメージ
マイコンボードなので、LCDディスプレイをつないで表示を行っていこうと思う。 今回使うLCDモジュールはAQM0802である。 秋月で買えるモジュールキットがあるので、それを使っていく。 秋月電子→ http://akizukidenshi.com/catalog/g/gK-06795/ CubeMXでピンの設定を行う STM32F401-NucleoでI2C通信を行えるピンは「D14」と「D15」がSDAとSCLに対応している。 調べるとD14は「PB9」、D15が「PB8」になる。 最初にピンの設定で、「PB8」は「I2C1_SCL」を選択、「PB9」は「I2C1_SDA」を選択する。 選択すると黄色の状態になる。 左側のタブから「Connectivity」→「I2C1」をクリックする。 「Disable」を「I2C」に変更する。 変更すると、黄色になっていた状態から緑色の状態になるので設定の完了である。 「ファイル(F)」→「保存(S)」でソースコードにピンの設定を自動反映させる。 main.cでプログラムを書いていく まずは「USER CODE BIGEN Includes」に「<string.h>」をインクルードする。 /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include <string.h> /* USER CODE END Includes */ 「Private user code」にこれらのコードを記述する。 /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ //instructionの送信 in...

ArduinoでLCDモジュールの使い方(AQM0802)

イメージ
AQM0802とは AQM0802は、I2C接続の小型液晶モジュールと呼ばれるものになる。 8文字×2行の文字を表示することが出来る。 基本的に秋月電子で購入できる、ピッチ変換キットを使うことが多い。 秋月電子商品ページより ブレッドボードに簡単に挿して使えるようになるので、非常に便利。 I2C通信 AQM0802はI2C通信というもので、Arduinoとデータの通信を行う。 I2C通信はフィリップス社が開発したシリアル通信である。 Arduinoでは様々なセンサがこの通信規格を使ってデータのやりとりを行うことが出来る。 AQM0802を使う AQM0802モジュールのはんだ付け 秋月で購入したキットにはんだ付けを行っていく。 基板上のPUと書かれた部分をはんだ付けすると、基板内で10kΩのプルアップ抵抗を内蔵してくれる。 今回ははんだ付けせずに、ブレッドボード上でプルアップ抵抗をつけることにする。 ブレッドボードでの回路作成 AQM0802を使うには3.3Vの動作電圧で使うようにと秋月電子の商品ページには記載されている。 いろいろネットで調べてみるとAQM0802本体は5.5Vの電圧まで耐えることができるらしい。 だが、このブログでは3.3Vの動作電圧を守って動かしてみようと思う。 そのために必要になるのがレベル変換モジュールになる。 リンク このモジュールを使えば、5Vの電圧を安全に3.3Vに変換してくれる。 双方向なので、3.3Vを5Vに変換することもできる。 3.3Vの動作電圧のモジュールを扱うなら何個か持っておくと非常に便利。 こんな感じにブレッドボードに回路を組んでみた。 レベル変換モジュールはArduinoから5Vと3.3Vの電源を取っている。 Arduinoはピンから出力される電圧は5Vである。これをレベル変換モジュールで3.3Vに変換してAQM0802につなげている。 I2C通信はSCLとSDAという二つのピンにつなげる必要がある。Arduino nanoではA5がSCL、A4がSDAピンとして使える。 そして、AQM0802には3.3Vのプルアップ抵抗をブレッドボードで組んでおいた。 A...

C言語のおさらい 繰り返し処理 for文の使い方

イメージ
C言語で繰り返し処理を表すもう一つの方法として「 for文 」がある。 for文には繰り返し条件以外に 繰り返し処理前の初期値設定 と 繰り返し処理ごとに行う処理 を書くことができる。 for文の書式 for (式1; 式2; 式3) { 繰り返し処理する文1; 繰り返し処理する文2; } 式1には、繰り返し処理前に実行する処理(初期値の設定など)を書く。 式2には、繰り返しの条件式を書く。 式3には、{}内の処理を1回終了ごとに実行する処理を書く。 式2が成立している間、{}内の文を繰り返し処理する。(前判定型) 式1、式2、式3はそれぞれ省略できるが「;」は省略できない。 for文を書いてみる 何事も実践が大事。 #include <stdio.h> int main(void) { //変数の宣言 int loop; //処理 for (loop = 1; loop <= 3; loop = loop + 1) { printf("ループ回数:%d\n", loop); } return 0; } 実行結果がこちら。 while文と変わらない実行結果になるものを書いてみた。 繰り返し処理を書くなら、好きなほうを書いていっていいと思う。 インクリメントとデクリメント 繰り返し処理では「loop = loop + 1」のように、変数に1を足して同じ変数に代入する処理や逆に1を引いて同じ変数に代入する処理をよく使う。 C言語では、「+1」をインクリメント演算子(++)、「-1」をデクリメント演算子(--)で表せる。 今回はfor文で使ってみる。 #include <stdio.h> int main(void) { //変数の宣言 int loop; //処理 for (loop = 1; loop <= 3; loop++) { printf("ループ回数:%d\n", loop); } return 0; } 実行すると、上の画像と同じ結果が表示される。 ちょっとカッコよく書けるので使っていこう。

C言語のおさらい 繰り返し処理 while文の使い方

イメージ
  同じ処理をするデータが複数あるとき、それぞれ一つのデータごとに書いていくのはとても効率が悪い。そこで、処理を繰り返すことにより複数のデータの処理を1回で済ませられる繰り返し型の文を使えば、効率的である。 繰り返し型には「while文」と「for文」の二種類がある。 今回はwhile文についてまとめる。 while文の書式 while文には、前判定型の「while文」と後判定型の「do while文」がある。 while文の書式(前判定型) while(条件式){ 繰り返し処理したい文1; 繰り返し処理したい文1; } do while文の書式(後判定型) do { 繰り返し処理したい文1; 繰り返し処理したい文1; }while(条件式); while(条件式)の条件式には通常比較を行う式を書く。 条件式が成立している間、{}内の文を繰り返して処理を行う。 while文を書いてみる 実際に以下のプログラムを実行してみる。 #include <stdio.h> int main(void) { //変数の宣言 int loop; //入力 loop = 1; //処理 while (loop <= 3) { printf("ループ回数:%d\n", loop); loop = loop + 1; } return 0; } 実行結果がこうなる。 while文の注意点 前判定型と後判定型の違いは、繰り返し処理の最低実行回数が0回か1回かということ。 実際にそうなかプログラムを書いてみる。 #include <stdio.h> int main(void) { //変数の宣言 int loop; int doloop; //入力 loop = 1; doloop = 2; //処理 while (loop == doloop) { printf("前判定したよ\n", loop); } do { printf("後判定したよ\n"); } while (loop == doloop); ret...

C言語のおさらい 条件分岐 switch文の使い方

イメージ
switch 文の書式 条件により、選択する処理が複数になる「多分岐型」をC言語で表すときは、「switch 文」を使う。 書き方はこのような感じ switch (式) { case 値1: 値1が成立していたときに実行する文; break; case 値2: 値2が成立していたときに実行する文; break; case 値3: 値3が成立していたときに実行する文; break; default: すべてのcaseが成立しないときに実行する文; break; } switch (式) の()内には、通常整数型か文字型の変数名を指定する。 変数の値とcase 値が一致した時に「:」以下の文を実行する。 「:」以下の文が複数ある場合でも{}をつけなくてよい。 caseごとに処理の終わりに「break;」を書く。 defaultで実行する文がない場合、defaultは省略できる。 switch 文を書いてみる switch 文の特徴として、「変数の値とcase 値が一致した時に「:」以下の文を実行する。」があります。 なのでこのようなプログラムを実行すると、画像の結果になります。 #include <stdio.h> int main(void) { //変数の宣言 int x; //初期化 x = 0; //入力 printf("0から3の数値を入力してね→"); scanf("%d", &x); //処理 switch (x) { case 0: printf("あいうえお\n"); case 1: printf("かきくけこ\n"); case 2: printf("さしすせそ\n"); case 3: printf("たちつてと\n"); default: printf("なにぬねの\n"); } return 0; } 実行結果のように、case 0:以降の処理がすべて実行されていることがわかります。 なので、目的の処理だけを実行...

C言語のおさらい 条件分岐 if文の使い方

イメージ
if 文の書式 条件の真と偽により処理が二つに分岐する二分岐型をC言語で表すときは、「if 文」を使う。 書き方はこのような感じ if(条件式) { 条件が真のときに実行する文; } else { 条件が偽のときに実行する文; } if(条件式)の()内には、通常比較を行う式が入る。 条件が偽のときに実行するぶんがない場合は、else 以下を省略できる。 実行する文が一つしかない場合は、文のブロックの規則に従い{}を省略できる。 比較演算子 if 文などで使う条件式には、だいたい比較を行う式が使われる。 このときに、使われるのが「比較演算子」である。 比較演算子 <  ・・・左辺は右辺より小さい >  ・・・左辺は右辺より大きい <=  ・・・左辺は右辺以下 >=  ・・・左辺は右辺以上 ==  ・・・左辺と右辺は等しい !=   ・・・左辺と右辺は等しくない 比較演算子は数学などで使っているものと意味は同じ。ただし、「≧」「≦」という記号がキーボード上にはないため、「<=」「>=」のように分解して使っている。 C言語では「=」を代入演算子の意味で使っているため「==」のように「=」を二つならべて、「等しい」という意味を表す。 if 文の使い方 実際に以下のプログラムを実行してみる。 #include <stdio.h> int main(void) { //変数の宣言 int x; //入力 printf("入力された数値が10以上か判定する\n"); printf("数値を入力:"); scanf("%d", &x); if (x >= 10) { printf("そうです\n"); } else { printf("違います\n"); } return 0; } 実行結果がこの画面。 10という数値が入力されたので、「そうです」と表示がされる。 9とかを入力すれば「違います」と実行結果に表示されるので、試してほしい。 if 文のネスト構...