0

MSP430G2553 のオンボード ボタンを使用して、ボタンの押下を読み取り、モールス信号に変換したいと考えています。プログラムのバッファを正しい数字 (ドットは 0、ダッシュは 1) で埋めることができます。

ただし、バッファが送信されて変換されると、エラーが返されるだけです。現在、モールス信号から変換された数字のみを使用しています。これは、それぞれが 5 ビットしかなく、パスコードの作成に使用しているためです。

        int main(void) {
        WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer

        InitButtonLED();

        int c;

        while(1){

            c = MorseInOut();
            UARTTransmit(c);
        }
    }

    void InitButtonLED(){

    //P2.0 is the button input
    P1REN |= BIT3;

}

int MorseInOut(){

    int buttonPresses = 0; //number of times the button has been pressed
    int pressTime = 0; //how long the button was pressed
    int buffIt = 0; //buffer iterator
    int buffer[5]; //buffer for long and short characters
    bool current_button = false; // variable to hold the state of the button
    bool last_button_state = false; // state of the button the last time it was read
    int number;

    while(1){

        if(!(P1IN & BIT3)){
        current_button=true; // read button bit
        }

        if ((current_button==true) && last_button_state){ // did the button go down?
                        buttonPresses=buffIt;
        }

        if ((buttonPresses == 5) && (current_button==true)){

            //translates buffer
            number = MorseConvert(buffer);

            return number;

        }

        last_button_state=current_button;

        //determine how long the button was pressed
        if ((current_button==true)  && (buttonPresses >= 1)){

            pressTime=1;

        }

        if ((current_button==true)  && (buttonPresses < 1)){

            pressTime=1;

        }

        //determines if button was held for a long time or short time
        if ((pressTime >= 20000) && (current_button==true) && (buttonPresses >= 0)){

            buffer[buffIt] = 1;
            buffIt++;
            pressTime = 0;

        }

        if ((pressTime < 20000) && (pressTime > 0) && (current_button==true) && (buttonPresses >= 0)) {

            buffer[buffIt] = 0;
            buffIt++;
            pressTime = 0;

        }
    }
}

int MorseConvert(int buffer[]){

    //translates buffer values into integers
    if ((buffer[0] == 1) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 1) && (buffer[4] == 1)){
        return 0;
    }

    else if ((buffer[0] == 0) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 1) && (buffer[4] == 1)){
        return 1;
    }

    else if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 1) && (buffer[3] == 1) && (buffer[4] == 1)){
        return 2;
    }

    else if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 1) && (buffer[4] == 1)){
        return 3;
    }

    else if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 0) && (buffer[4] == 1)){
        return 4;
    }

    else if ((buffer[0] == 0) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 0) && (buffer[4] == 0)){
        return 5;
    }

    else if ((buffer[0] == 1) && (buffer[1] == 0) && (buffer[2] == 0) && (buffer[3] == 0) && (buffer[4] == 0)){
        return 6;
    }

    else if ((buffer[0] == 1) && (buffer[1] == 1) && (buffer[2] == 0) && (buffer[3] == 0) && (buffer[4] == 0)){
        return 7;
    }

    else if ((buffer[0] == 1) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 0) && (buffer[4] == 0)){
        return 8;
    }

    else if ((buffer[0] == 1) && (buffer[1] == 1) && (buffer[2] == 1) && (buffer[3] == 1) && (buffer[4] == 0)){
        return 9;
    }

    else{
        return 99;
    }

}

    #ifndef STATE_H_
#define STATE_H_

#include <stdint.h>
#include <stdbool.h>

void InitButtonLED();
int MorseInOut();
int MorseConvert(int buffer[]);


#endif /* STATE_H_ */
4

1 に答える 1