Controller Class for Mbed.

main.cpp

Committer:
kikuchi8810
Date:
2021-12-17
Revision:
1:ab1c94d6f4fb
Parent:
0:4f5b9889cbc4

File content as of revision 1:ab1c94d6f4fb:

#include "mbed.h"
#include "platform/mbed_thread.h"
#include "Controller.h"

#define INT_TIME 0.001
#define INT_TIME_MS INT_TIME*1000

Serial pc(USBTX, USBRX);
Controller con(P7_4,P7_5, 115200); //TXpin, RXpin, baudrateを設定

DigitalOut led_user(LED_USER);
DigitalOut led_red(LED_RED);
DigitalOut pin_emergency(D0); //非常停止信号

Ticker interrupt;
bool flag_10ms = false;
bool flag_1s = false;

void interrupt_func()
{
    static int count_10ms = 0;
    if(count_10ms++ > (INT_TIME_MS*10 - 1))
    {
        flag_10ms = true;
        count_10ms = 0;
        
        static int count_1s = 0;
        if(count_1s++ > (INT_TIME_MS*100 -1))
        {
            flag_1s = true;
            count_1s = 0;
        }
    }
}

int main()
{   
    pc.baud(115200);
    
    /* 第一引数はタイムアウト時間[ms],第二引数はupdate関数の呼び出し周期[ms] */
    con.init(1000, INT_TIME_MS*10); //init関数を呼び出さなければタイムアウトの処理は行われない(available関数は常にtrueを返す)
    
    interrupt.attach(&interrupt_func, INT_TIME);
    
    while(1) 
    {
        if(flag_10ms)
        {
            con.update(); //main関数のflag内で呼び出す.
            if(con.available())
            {
                int buttonState = con.getButtonState();
                uint8_t joyRx = con.readJoyRXbyte();
                uint8_t joyRy = con.readJoyRYbyte();
                uint8_t joyLx = con.readJoyLXbyte();
                uint8_t joyLy = con.readJoyLYbyte();
                
                pc.printf("%d\t", buttonState);
                pc.printf("%d\t", joyRx);
                pc.printf("%d\t", joyRy);
                pc.printf("%d\t", joyLx);
                pc.printf("%d\r\n", joyLy);
                
                led_red.write(1);
                pin_emergency.write(1); //非常停止を解除する
            }
            else
            {
                pc.printf("disconnected\r\n");
                led_red.write(0);
                pin_emergency.write(0); //非常停止を作動させる
            }
            
            flag_10ms = false;
        }
        
        if(flag_1s)
        {
            led_user.write(!led_user.read());
            flag_1s = false;
        }
        
        thread_sleep_for(1);
    }
}