質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

1回答

3601閲覧

ArduinoのPORTBの下位4ビットのシフト演算

Yoshikun_0945

総合スコア224

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2016/11/15 01:28

編集2016/11/15 01:36

#分からないこと
Arduinoで、下位4ビットのみのシフト演算方法(上位4ビットの内容は無視)は、どのように記述すればよろしいでしょうか?

###作成しているプログラムの条件
条件1:PORTBの下位4ビット(D8~D11)を使用して、4つのLEDを点灯させる。
条件2:PORTBの上位4ビットは、改変を行わない。
条件3:点灯するLEDを変更するときは、シフト演算を使用すること。

###プログラムのLEDの動き
① 0001 → ② 0010 → ③ 0100 →④ 1000 → ⑤ 0001 → ⑥ 0010・・・を作成しています。
1がLEDの点灯で、0が消灯を示しています。

###求めている回答内容
どうすれば、LEDの点灯しているか比較ができて、どのシフト演算をすれば、次のLEDを点灯させて、現在のLEDを消灯できるかを教えていただきたいです。

#####Arduinoの開発環境
使用ソフト:Arduino 1.7.11
ボードのモデル:UNO R3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

シフトを使う事を前提に回答します。8ビットではなくて4ビットですので、また貴殿の過去からの質問に従ってコードを記載します。

arduino

1void loop() 2{ 3 unsigned char PORTB_W; 4 unsigned char PORTB4; 5 6 PORTB_W = PORTB; // PORTBの読み込み 7 PORTB4 = PORTB_W &0x0f; // 下位4ビット 8 PORTB_W &= 0xf0; // 上位4ビット 9 10 PORTB4 << 1; // 下位4ビットを左にシフト 11 if( PORTB4 & 0x10 ) // もし5ビット目にシフト(Carry処理) 12 { 13 PORTB4 = (PORTB4 & 0x0f) | 0x01; // 下位に1を移動 14 } 15 PORTB = PORTB_W | PORTB4; // 結果書き込み 16 17 sleep(500); // 0.5秒待ち 18}

こんな感じで良いですか?

投稿2016/11/15 01:40

MasahikoHirata

総合スコア3747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasahikoHirata

2016/11/15 01:43

この処理の前'void setup()'の中でPORTBの下位に'1'が設定されているのが前提です。
MasahikoHirata

2016/11/16 13:38

以前からの質問でLEDの点灯についてお悩みみたいですが、仕様が確定したら一気に解決しませんか?気になります。また基本的な部分だけでなく、外部からの信号などで点灯パターンに変化など、様々なバリエーションが期待できますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問