LoginSignup
0
0

AtsEXを使用してスイッチで扉の開閉を行おう2(CH552編)

Posted at

AtsEXを使用してスイッチで扉の開閉を行おう の続きとしてCH552でドア開閉を行ってみましょう。

CH552とは

CH552 は約1ドル程度で購入可能な格安マイコンボードになります。
image.png
CH552Arduino での開発も可能です。
ただし、書込み回数に制限があり 100回程度 で書込みできなくなるので注意してください。
また、ピン数についても、前回使用した Raspberry Pi Pico に比べると少ないです。
今回は、このCH552ボードを使って、ATSexのスイッチを作ってみましょう。

CH55x系ボード WeActStudio CH552CoreBoardをArduinoで使う

HID キーボードを作る

最初にHIDキーボードを試しましょう。
ファイル⇒スケッチ例⇒Generic_Example⇒05USB⇒HidKeyboard
をコンパイルしましょう。

image.png

設定

ツール⇒USB Settingsを変更します。
USBコードのサイズを 0B以上 を選択します。
これは、文字列を入力するプログラムのためです。
今回は USB CODE w/256B USB ram を選択しました。
image.png

プログラム

上記プログラムをもとにほかのポートを追加しました。
今回は、 Keyboard_press,Keyboard_release で構成されています。
前回のように、 write,press,release ではないので、わかりやすいプログラムになっていると思います。

/*
  HID Keyboard example
  created 2020
  by Deqing Sun for use with CH55xduino
  This example code is in the public domain.
  cli board options: usb_settings=user148
*/

//For windows user, if you ever played with other HID device with the same PID C55D
//You may need to uninstall the previous driver completely

#ifndef USER_USB_RAM
#error "This example needs to be compiled with a USER USB setting"
#endif

#include "src/userUsbHidKeyboard/USBHIDKeyboard.h"

#define BUTTON0_PIN 10
#define BUTTON1_PIN 11

#define BUTTON4_PIN 14
#define BUTTON5_PIN 15
#define BUTTON6_PIN 16
#define BUTTON7_PIN 17

#define LED_BUILTIN 30
#define BUTTON31_PIN 31
#define BUTTON32_PIN 32
#define BUTTON33_PIN 33
#define BUTTON34_PIN 34
#define BUTTON35_PIN 35

bool button0PressPrev = false;
bool button1PressPrev = false;
bool button4PressPrev = false;
bool button5PressPrev = false;
bool button6PressPrev = false;
bool button7PressPrev = false;
bool button31PressPrev = false;
bool button32PressPrev = false;
bool button33PressPrev = false;
bool button34PressPrev = false;
bool button35PressPrev = false;

void setup() {
  USBInit();
  pinMode(BUTTON0_PIN, INPUT_PULLUP);
  pinMode(BUTTON1_PIN, INPUT_PULLUP);
  pinMode(BUTTON4_PIN, INPUT_PULLUP);
  pinMode(BUTTON5_PIN, INPUT_PULLUP);
  pinMode(BUTTON6_PIN, INPUT_PULLUP);
  pinMode(BUTTON7_PIN, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
  pinMode(BUTTON31_PIN, INPUT_PULLUP);
  pinMode(BUTTON32_PIN, INPUT_PULLUP);
  pinMode(BUTTON33_PIN, INPUT_PULLUP);
  pinMode(BUTTON34_PIN, INPUT_PULLUP);
  pinMode(BUTTON35_PIN, INPUT_PULLUP);
}

void loop() {
  //button 0 is mapped to letter 'w'
  bool button0Press = !digitalRead(BUTTON0_PIN);
  if (button0PressPrev != button0Press) {
    button0PressPrev = button0Press;
    if (button0Press) {
      Keyboard_press('e');
    } else {
      Keyboard_release('e');
    }
  }


  //button 1 is mapped to letter 'e'
  bool button1Press = !digitalRead(BUTTON1_PIN);
  if (button1PressPrev != button1Press) {
    button1PressPrev = button1Press;
    if (button1Press) {
      Keyboard_press('r');
    } else {
      Keyboard_release('r');
    }
  }

  //button 4 is mapped to letter 'r'
  bool button4Press = !digitalRead(BUTTON4_PIN);
  if (button4PressPrev != button4Press) {
    button4PressPrev = button4Press;
    if (button4Press) {
      Keyboard_press('t');
    } else {
      Keyboard_release('t');
    }
  }

  //button 5 is mapped to Capslock
  bool button5Press = !digitalRead(BUTTON5_PIN);
  if (button5PressPrev != button5Press) {
    button5PressPrev = button5Press;
    if (button5Press) {
      Keyboard_press(KEY_RETURN);
    } else {
      Keyboard_release(KEY_RETURN);
    }
  }

  //button 6 is mapped to Capslock
  bool button6Press = !digitalRead(BUTTON6_PIN);
  if (button6PressPrev != button6Press) {
    button6PressPrev = button6Press;
    if (button6Press) {
      Keyboard_press(0xDE);
    } else {
      Keyboard_release(0xDE);
    }
  }

  //button 7 is mapped to Capslock
  bool button7Press = !digitalRead(BUTTON7_PIN);
  if (button7PressPrev != button7Press) {
    button7PressPrev = button7Press;
    if (button7Press) {
      Keyboard_press(0xDF);
    } else {
      Keyboard_release(0xDF);
    }
  }


  //button 31 is mapped to letter 's'
  bool button31Press = !digitalRead(BUTTON31_PIN);
  if (button31PressPrev != button31Press) {
    button31PressPrev = button31Press;
    if (button31Press) {
      Keyboard_press('o');
    } else {
      Keyboard_release('o');
    }
  }

  //button 32 is mapped to letter 'd'
  bool button32Press = !digitalRead(BUTTON32_PIN);
  if (button32PressPrev != button32Press) {
    button32PressPrev = button32Press;
    if (button32Press) {
      Keyboard_press('i');
    } else {
      Keyboard_release('i');
    }
  }

  //button 33 is mapped to letter 'd'
  bool button33Press = !digitalRead(BUTTON33_PIN);
  if (button33PressPrev != button33Press) {
    button33PressPrev = button33Press;
    if (button33Press) {
      Keyboard_press('u');
    } else {
      Keyboard_release('u');
    }
  }

  //button 34 is mapped to letter 'd'
  bool button34Press = !digitalRead(BUTTON34_PIN);
  if (button34PressPrev != button34Press) {
    button34PressPrev = button34Press;
    if (button34Press) {
      Keyboard_press('g');
    } else {
      Keyboard_release('g');
    }
  }

  //button 35 is mapped to letter 'd'
  bool button35Press = !digitalRead(BUTTON35_PIN);
  if (button35PressPrev != button35Press) {
    button35PressPrev = button35Press;
    if (button35Press) {
      Keyboard_press('h');
    } else {
      Keyboard_release('h');
    }
  }

  //map capsLock to LED
  //Bit 0: NUM lock, Bit 1: CAPS lock, Bit 2: SCROLL lock, Bit 3: Compose, Bit 4: Kana,
  if (Keyboard_getLEDStatus() & 2) {
    digitalWrite(LED_BUILTIN, HIGH);
  } else {
    digitalWrite(LED_BUILTIN, LOW);
  }

  delay(50);  //naive debouncing
}

動作の様子

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0