arm マイコンに組み込むプログラムについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ts

arm マイコンに組み込むプログラムについて

#1

投稿記事 by ts » 9年前

arm のLPC1114FN28/102を使ったプログラムについてです。
当方完全にC言語初心者です。
現在課題でスイッチを押し続けてる間押したときに光っていたLEDを点滅させ、スイッチを離したらもう一方のLEDを点灯するという動作のプログラムを作ろうとしているのですが、条件がカウンターを用いてスイッチを離したことを検出し、点灯LEDの切り替えをしろというものです。
この条件がないものであれば作れたのですが、この条件をどのようにクリアしたらいいかわからないのでどなたかお力添え願えないでしょうか?
現在考えてるコードが以下になります。
コメントなどを入れていないためわかりづらいかと思います。。。
現在点滅中消灯状態になるたびにインクリースでカウントしようと考えています。

コード:

#include "mbed.h"
#define SW_A D2

DigitalOut led1(LED1);
DigitalOut led2(LED2);
int8_t SW1;


int main()
{    
    int a = 0;
    int b = 0;
    int cnt;

    // LED initialize
    led1 = 1;
    led2 = 1; 

    for(;;)
    {
        SW1 = LPC_GPIO0->MASKED_ACCESS[(1 << 1)] >> 1; 
        if( SW1 == 0 )
        {
            if( a == 0 )
            {
                //a = 1;
                    if( b == 0 )
                    {
                        led2 = 0;
                        cnt++;
                        wait( 0.2 );
                        led2 = 1;
                        wait( 0.2 );
                    }
                    else
                    {
                        led1 = 1;
                        cnt++;
                        wait( 0.2 );
                        led1 = 0;
                        wait( 0.2 );
                    }
            }
        }
        else
        {
            if( a == 1 )
            {
                if( b == 0 )
                {
                    led1 = 0;
                    led2 = 0; 
                    b = 1;
                }
                else
                {
                    led1 = 1;
                    led2 = 1;
                    b = 0; 
                }
                
                a = 0;
            }
        }
        
        wait( 0.2 );
    }
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: arm マイコンに組み込むプログラムについて

#2

投稿記事 by みけCAT » 9年前

カウンターを用いてスイッチを離したことを検出というのはよくわからないですが(チャタリング/バウンシング対策?)、
少なくとも今のコードはcntを初期化せずに使用しているのでやばそうですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ts

Re: arm マイコンに組み込むプログラムについて

#3

投稿記事 by ts » 9年前

口下手(文字下手?)ですみません。。。
ヒントをもらい書き換えを行いましたがそれでもうまいこと動かず。。。
カウンターを部分を教えてもらって書き換えたのが以下です。
回りくどいif文をやってる部分でledを反転させたいのですが押しっぱなしで反転してくれないのはなぜでしょうか。。。
すみません元の質問と違う内容になってしまって。。。

コード:

int main()
{    
    int a = 0;
    int b = 0;
    int c = 0;

    // LED initialize
    led1 = 1;
    led2 = 1; 

    for(;;)
    {
        SW1 = LPC_GPIO0->MASKED_ACCESS[(1 << 1)] >> 1; 
        if( SW1 == 0 )
        {
            if( a == 0 )
            {
                a = 1;
                c++;
                    if(c > 4)
                    {
                        if( led1 == 0 )
                        {
                            led1 = 1; 
                        }
                        else if( led1 == 1)
                        {
                            led1 = 0;
                        }
                        else if (led2 == 0)
                        {
                            led2 = 1;
                        }
                        else if (led2 == 1)
                        {
                            led2 = 0;
                        }
                    c = 0;
                    }
            }
        }
        else
        {
            c = 0;
            if( a == 1 )
            {
                if( b == 0 )
                {
                    led1 = 0;
                    led2 = 0; 
                    b = 1;
                }
                else
                {
                    led1 = 1;
                    led2 = 1;
                    b = 0; 
                }
                
                a = 0;
            }
        }
        wait( 0.2 );
    }
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: arm マイコンに組み込むプログラムについて

#4

投稿記事 by みけCAT » 9年前

このプログラムでは変数の以上な書き換わりが起きなければ常にled1 == 0またはled1 == 1が成り立つので、SW1 == 0のときled2は書き換わりません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: arm マイコンに組み込むプログラムについて

#5

投稿記事 by みけCAT » 9年前

ts さんが書きました:スイッチを押し続けてる間押したときに光っていたLEDを点滅させ、スイッチを離したらもう一方のLEDを点灯するという動作のプログラムを作ろうとしているのですが
やりたいのはこういうことですか?
switch-led-20160603.png
スイッチに応じてLEDを制御する
switch-led-20160603.png (4.05 KiB) 閲覧数: 1923 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る