Hayato Kikuchi
/
XBee3-test
!
Controller.cpp
- Committer:
- kikuchi8810
- Date:
- 2021-04-16
- Revision:
- 3:c751c9e54791
- Parent:
- 1:cb2c4d733c1b
File content as of revision 3:c751c9e54791:
#include "Controller.h" #include "mbed.h" #include "RawSerial.h" DigitalOut myled4(LED4); Controller::Controller(PinName tx,PinName rx,int baudrate):XBee3(tx,rx) { XBee3.baud(baudrate); XBee3.attach(this,&Controller::update,Serial::RxIrq); ButtonState = 0; LJoyX = 128; LJoyY = 128; RJoyX = 128; RJoyY = 128; myled4 = 0; } void Controller::update() { unsigned int checksum; //uint8_t tmp; char c; char recv_msgs[10]; c = XBee3.getc(); if (c == '\n') { if (recv_num == 10) { checksum = 0; for (int i = 0; i < 9; i++) { recv_msgs[i] = recv_msgs[i] - 0x20; checksum += (unsigned int)recv_msgs[i]; } if ((checksum & 0x3F) == (recv_msgs[9] - 0x20)) { //digitalWrite(PIN_LED_1, !digitalRead(PIN_LED_1)); myled4 = !myled4; ButtonState = 0;//, LJoyX = 0, LJoyY = 0, RJoyX = 0, RJoyY = 0; ButtonState |= recv_msgs[0] & 0x3F; ButtonState |= (recv_msgs[1] & 0x3F) << 6; ButtonState |= (recv_msgs[2] & 0x0F) << 12; LJoyX = recv_msgs[3]; LJoyX |= (recv_msgs[4] & 0x03) << 6; LJoyY = (recv_msgs[4] & 0x3C) >> 2; LJoyY |= (recv_msgs[5] & 0x0F) << 4; RJoyX = (recv_msgs[5] & 0x30) >> 4; RJoyX |= (recv_msgs[6] & 0x3F) << 2; RJoyY = recv_msgs[7]; RJoyY |= (recv_msgs[8] & 0x03) << 6; } } recv_num = 0; } else { recv_msgs[recv_num++] = c; } } /*void Controller::DRbegin() { XBee3.attach(this,&Controller::update,Serial::RxIrq); } */ int8_t Controller::readButton(int buttonNum) const { int8_t ret = 0; if ((ButtonState >> (buttonNum - 1)) & 0x01) { ret += 1; } if (preButtonState >> (buttonNum - 1) & 0x01) { ret -= 1; } return ret; } unsigned int Controller::getButtonState() const { return ButtonState; } /**コントローラの入力に変化があったらtrueを返す**/ bool Controller::getButtonChanged() const { return buttonChanged; } /**ジョイスティックの値を-1.0~1.0の範囲で返す関数**/ double Controller::readJoyLX() const { return -((double)LJoyX - 127.0) / 127.0; } double Controller::readJoyLY() const { return -((double)LJoyY - 127.0) / 127.0; } double Controller::readJoyRX() const { return -((double)RJoyX - 127.0) / 127.0; } double Controller::readJoyRY() const { return -((double)RJoyY - 127.0) / 127.0; } /**ジョイスティックの値を0~255の範囲で返す関数**/ unsigned int Controller::readJoyLXbyte() const { return LJoyX; } unsigned int Controller::readJoyLYbyte() const { return LJoyY; } unsigned int Controller::readJoyRXbyte() const { return RJoyX; } unsigned int Controller::readJoyRYbyte() const { return RJoyY; }