データグローブ試作 その2

手袋の指先にポッケを作りセンサーをぶっさして多少見栄えはよくなった
センサーがよくずれるけどなんとかならんもんか・・・
今はマジックテープで縛って両面テープでくっつけている、でもよくずれる

ソフト側はC言語ならかじったことあるのでめちゃ簡単に作ったった
一言でいうとザ・手抜き
動いたのでHello Worldしてみた
www.youtube.com
実は10回以上リテイクしている、20回から先は数えてない
撮影用に手を挙げて入力するのしんどい


手をぶらりとさせれば入力できるけど、キーアサインまだ覚えきれない
キーアサインはなんかのソースコードをアルファベットの出現頻度見て折り曲げやすい配置から順に設定していった
数字やモデファイヤキーはまだない、つか指がたらん

#define A0_LIMIT 833 // 親指
#define A1_LIMIT 880 // 人差し指
#define A2_LIMIT 858 // 中指
#define A3_LIMIT 870 // 薬指
#define A4_LIMIT 890 // 小指

#define NOP B0000 // パー

uint8_t KeyStroke = NOP;
uint8_t KeyAssign[32] = {
  NOP, // ○○○○ ○
  'e', // ○○○○ ●
  'a', // ○○○● ○
  'd', // ○○○● ●
  'o', // ○○●○ ○
  'w', // ○○●○ ●
  'k', // ○○●● ○
  NOP, // ○○●● ●
  'u', // ○●○○ ○
  'x', // ○●○○ ●
  'g', // ○●○● ○
  NOP, // ○●○● ●
  'c', // ○●●○ ○
  'p', // ○●●○ ●
  't', // ○●●● ○
  'r', // ○●●● ●
  'i', // ●○○○ ○
  'n', // ●○○○ ●
  'b', // ●○○● ○
  'v', // ●○○● ●
  'j', // ●○●○ ○
  'q', // ●○●○ ●
  'y', // ●○●● ○
  NOP, // ●○●● ●
  'h', // ●●○○ ○
  'm', // ●●○○ ●
  'z', // ●●○● ○
  'f', // ●●○● ●
  's', // ●●●○ ○
  'l', // ●●●○ ●
  ' ', // ●●●● ○
  KEY_RETURN, // ●●●● ●
};

void setup()
{
  Serial.begin(9600);
  Keyboard.begin();
}

void loop()
{
  int a0 = analogRead(A0);
  int a1 = analogRead(A1);
  int a2 = analogRead(A2);
  int a3 = analogRead(A3);
  int a4 = analogRead(A4);

  int now_stroke =
    (a0 >= A0_LIMIT) |
    (a1 >= A1_LIMIT) << 1 |
    (a2 >= A2_LIMIT) << 2 |
    (a3 >= A3_LIMIT) << 3 |
    (a4 >= A4_LIMIT) << 4;

  KeyStroke |= now_stroke;
  if (now_stroke == NOP && KeyAssign[KeyStroke] != NOP)
  {
    Keyboard.press(KeyAssign[KeyStroke]);
    delay(100);
    Keyboard.releaseAll();
    KeyStroke = NOP;
  }
  else
  {
    print_finger_state(a0, a1, a2, a3, a4);
    delay(100);
  }
}

void print_finger_state(int a0, int a1, int a2, int a3, int a4)
{
  Serial.print(a4, DEC);
  Serial.write(" ");
  Serial.print(a3, DEC);
  Serial.write(" ");
  Serial.print(a2, DEC);
  Serial.write(" ");
  Serial.print(a1, DEC);
  Serial.write(" ");
  Serial.print(a0, DEC);
  Serial.write(" ");
  Serial.println(KeyStroke, BIN);
}