投稿

ラベル(Arduino)が付いた投稿を表示しています

ArduinoでLCD制御(QAPASS1602)と、c++のお話。

イメージ
ArduinoでLCDを制御する++ いまで、このサイトでは使用するLCDとしてとして AQM1602Y-RN-GBW を使ってきました。  ・ Arduinoを使ってみよう  ・ Arduinoでタイマー割り込み これらの記事でも触れていますが、このLCDモジュールは3.3Vで動作しますがレベル変換など入れず、モジュールの実力で動作しています。 ソフト屋は、こういったトコロがいいかんげんで電気屋が怒るポイントです。 (:P) そこで、今回はArduinoで動作する5VのLCDモジュール、QAPASS1602を手に入れ、マトモな5Vの回路で動作させてみました。 今回は、デバイスを動かすだけ? で、終わらないのがLightning Brains。 そこで、今回はArduino開発環境(c++)についてちょいとばかし 掘ってみました。  目次:            ・ QAPASS 1602とは?  ・ さっそくLCDモジュールを使ってみよう  ・ まずは、”Hello World.”を表示させてみよう   ・ Arduino IDEを掘ってみる!  ・ Arduino IDEって、c++じゃん?  ・ main.cppからいじってみる  ・ Arduino IDEを使ったc++開発は可能か? QAPASS 1602とは? Amazonでも入手できるので、Arduinoな世界では標準的なデバイスなんでしょうか? 価格も500円前後、ずいぶん安いトコロもありますがソコは各自で判断して購入ください。 モジュールの仕様も、バックライトあり・ナシなど違いがあるので気をつけてください。     このLCDモジュールですが、コントローラーは HD44780 という日立が大昔に作ったモノが今でも標準として使われています。これらのモジュールはその互換品が使われているようです。 このコントローラーの特徴としては、データ線を4本して通信できるところです。その他に制御線が2本必要なので、全部で6本のデジタル出力が必要になります。 データ線が4本なので、実際にデータを1バイト送る際には、上位4ビットと下位4ビットに分けて送る必要があります...

Arduinoでタイマー割り込み

イメージ
Arduinoでタイマー割り込み 前回の記事( Arduinoを使ってみよう )で簡単な時間計測プログラムを作成しましたが実は正確ではありません。 なぜならば、デッドラインを意識したリアルタイム設計が成されていないからです。 そこで、今回は、Arduinoのタイマー割り込みを使ってより正確な時刻計測を行うプログラムを作成してみましょう。  目次:            ・ デッドラインとは?  ・ タイマーで1秒間隔の割り込みを作るには?   ・ 正確なストップウォッチを作ってみる! デッドラインとは? なぜ、前回のタイマー処理では正確な時間計測ができないのでしょうか? 処理を時間で見てみると下記のようになっています。 LCDへの表示を行い、その後1ミリ秒のディレイを行っています。 1回の処理時間は下記のようになります。  処理時間 = LCD表示処理時間 + 1ミリ秒ディレイ LCDの表示にかかる処理時間は短いものですが、使い続けると誤差が大きくなってしまいます。 組み込み機器は、電源を入れられるとそのまま動き続けることが多いため、このような誤差も問題になってきます。 或いは、実際の競技計測のように厳密な計測を求められるような場合も同様です。 そこで、下記のように1秒の間隔の間でLCDの表示処理を行うようにする方法が考えられます。 このような処理形態とした場合、 必ず1秒以内に処理を完了しなければなりません 。 この1秒という時間が『 デッドライン 』になります。 上記の図では、2つ目の1秒の間隔で処理が終わることができませんでした。 このような場合、次の1秒の処理に影響が出てしまうため、このような状況は避けなければなりません。  だから、『 デッドライン 』といいます。 また、このデッドラインを意識した設計は、組み込み機器のリアルタイム性能に大きく影響を及ぼします。 さて、ではどうやって1秒の間隔を作り出せばよいのか? このブログの以前の記事「 STM32F3 Discovery、タイマーと割り込みのキホン 」ではタイマーで割り込み駆動してLEDをソフトPWMで制御しました。 Arduinoでも同様に、タイマーによる割り込みが可能です。 ...

Arduinoで割り込み処理

イメージ
Arduinoで割り込み処理 Arduinoだって割り込み処理、できるもん。 今回は、Arduinoを使った割り込み処理についてです。 さて、今回もArduino Microを使ってのコードです。  目次:            ・ スイッチ状態を読み取る  ・ スイッチの状態変化を割り込みで受け取る   スイッチ状態を読み取る まずは、外部にタクトスイッチを取り付けてArduinoで受け取るプログラムを作成してみましょう。 回路図は、下記のようになります。 この回路では、電源電圧5Vを220Ωの抵抗を挟んでデジタル入力の12とスイッチに接続しています。スイッチのもう1方はGNDに接続としています。 このような接続方法を”プルアップ接続”といいます。 この接続方法では、ボタンを押さない状態ではデジタル入力ピンに電圧がかかっているため、HIGHとして認識され、ボタンを押すとGND側に電流が流れるためLOWなることでボタンが押されたことを検出できます。 実際に使うスイッチはタクトスイッチです。 ブレッドボード上ではこんな感じになります。 まずは、簡単なプログラムとしてスイッチが押された状態ならば、ボード上のLEDを点灯し、離された状態ならばLEDを消灯するプログラムを作成してみましょう。 プログラムは、下記のようになります。 スイッチの状態を検出するプログラム const byte LED_PIN = 13; const byte INPUT_PIN = 12; void setup() { // Digital Pin設定 pinMode(LED_PIN, OUTPUT); // On-Board LED pinMode(INPUT_PIN, INPUT); } void loop() { if(digitalRead(INPUT_PIN) == LOW) { digitalWrite(LED_PIN, HIGH); } else { digitalWrite(LED_PIN, LOW); } } デジタル入出力12番を入力に設定し、ボード上のLEDを点灯するためデジタル入出力13番を出力に設定...

Arduinoを使ってみよう

イメージ
今回は、小学生でもプログラミングしてロボットなどを制御できるArduinoです。 ええい!俺はコテコテの組み込み屋だ!! などと仰る方も、プロト作成なんかには便利此上ありません。 今日は、そんなArduinoの使い方の基本についてです。  目次:            ・ Arduinoとは?  ・ Arduinoのライセンス  ・ Arduinoの開発環境  ・ Arduinoのプログラミング  ・ まずは、「Hello World」  ・ LEDを点滅させる(Lチカ!)  ・ 別のシリアルも使ってみる  ・ I2Cのデバイスを使ってみる(LCD) なお、この記事では開発用のPCには、Windows 10 (1903) 使用するArduinoボードは、Microを使っています。 Arduinoとは? 「Arduino:アルデュイーノ」と読みます。 イタリアンな感じの発音、そう思った方は正解です。 それは2005年、北イタリアのイヴレーアという街のインタラクションデザイン工科大学(IIDI)から始まりました。 5人の人物たちが学生でも気軽に使えるような安価で、かつ、簡単に使えるコントローラー、つまりワンボードマイコンを作って販売する「Arduinoプロジェクト」から始まりました。 そして、彼らは、シンプルな設計のボードだけではなく技術者ではなくても開発が可能な開発環境の開発に成功し、ハードウェア・ソフトウェアともにオープンとなものとして公...