CharacterAnalysis

はじめに

文字の種別を判別します。

プログラム

定義等

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
/*
  Character analysis operators

  Examples using the character analysis operators.
  Send any byte and the sketch will tell you about it.

  created 29 Nov 2010
  modified 2 Apr 2012
  by Tom Igoe

  This example code is in the public domain.

  https://www.arduino.cc/en/Tutorial/BuiltInExamples/CharacterAnalysis
*/
 

特に何もしていません。

setup()

16
17
18
19
20
21
22
23
24
25
26
27
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // send an intro:
  Serial.println("send any byte and I'll tell you everything I can about it");
  Serial.println();
}
 

Serial.begin()を使いシリアルポートを初期化します。Serial.println()でシリアルポートに文字列を書き出します。Leonardo向けに、シリアル接続が確立するのを待っています。

loop()

28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
void loop() {
  // get any incoming bytes:
  if (Serial.available() > 0) {
    int thisChar = Serial.read();

    // say what was sent:
    Serial.print("You sent me: \'");
    Serial.write(thisChar);
    Serial.print("\'  ASCII Value: ");
    Serial.println(thisChar);

    // analyze what was sent:
    if (isAlphaNumeric(thisChar)) {
      Serial.println("it's alphanumeric");
    }
    if (isAlpha(thisChar)) {
      Serial.println("it's alphabetic");
    }
    if (isAscii(thisChar)) {
      Serial.println("it's ASCII");
    }
    if (isWhitespace(thisChar)) {
      Serial.println("it's whitespace");
    }
    if (isControl(thisChar)) {
      Serial.println("it's a control character");
    }
    if (isDigit(thisChar)) {
      Serial.println("it's a numeric digit");
    }
    if (isGraph(thisChar)) {
      Serial.println("it's a printable character that's not whitespace");
    }
    if (isLowerCase(thisChar)) {
      Serial.println("it's lower case");
    }
    if (isPrintable(thisChar)) {
      Serial.println("it's printable");
    }
    if (isPunct(thisChar)) {
      Serial.println("it's punctuation");
    }
    if (isSpace(thisChar)) {
      Serial.println("it's a space character");
    }
    if (isUpperCase(thisChar)) {
      Serial.println("it's upper case");
    }
    if (isHexadecimalDigit(thisChar)) {
      Serial.println("it's a valid hexadecimaldigit (i.e. 0 - 9, a - F, or A - F)");
    }

    // add some space and ask for another byte:
    Serial.println();
    Serial.println("Give me another byte:");
    Serial.println();
  }
}

Serial.available()で、シリアルポートに読み取るべき文字があるかを確認し、あれば、Serial.read()でその文字を読み、thisCharに代入します。thisCharはint型です。

数値をSerial.write()で表示すると、数値に対応する文字が表示されます。Serial.print()で表示すると、数値のまま表示されます。

文字を判定する関数を利用し、どのような文字種かを判断します。対応する文字種を表示します(下の表は、上記プログラムを少し変更して、0から255までの値を与えた結果です)。

コード 文字 isAlphaNumeric isAlpha isAscii isWhitespace isControl isDigit isGraph isLowerCase isPrintable isPunct isSpace isUpperCase isHexadecimalDigit
0-8 制御コード - - - - - - - - - - -
9 水平タブ - - - - - - - - -
10-13 改行コード等 - - - - - - - - - -
14-31 制御コード - - - - - - - - - - -
32 空白 - - - - - - - - -
33-47 記号 - - - - - - - - -
48-57 数字 - - - - - - -
58-64 記号 - - - - - - - - -
65-70 ABCDEF - - - - - -
71-90 GからZ - - - - - - -
91-96 記号 - - - - - - - - -
97-102 abcdef - - - - - -
103-122 gからz - - - - - -
123-126 記号 - - - - - - - - -
127 DEL - - - - - - - - - - -
128-255 - - - - - - - - - - - - -

バージョン

Hardware:Arduino Uno
Software:Arduino 1.8.16

最終更新日

September 11, 2021

inserted by FC2 system