#include #include #define READY 4 #define LED 13 int redPin = 9; int bluePin = 10; int greenPin = 11; int sw = 3; int sel; int previousR = LOW; long debounce = 20; long timeR = 0; // UTF-8をShift JISへ変換 // Micro Talkで使用する文字のみ int utf82sjis (char *dest, char *src) { int i, j; unsigned char c; unsigned int s, d; j = 0; for (i = 0; i < strlen(src); i ++) { c = src[i]; if (c >= 0xe0 && c <= 0xef) { // UTF-8 3バイトエリア s = ((unsigned int)src[i + 1] << 8) | ((unsigned int)src[i + 2] & 0xff); i = i + 2; d = 0; if (c = 0xe3) if (s >= 0x8181 && s <= 0x81bf) { // ひらがな1 d = 0x829f + (s - 0x8181); } else if (s >= 0x8280 && s <= 0x8293) { // ひらがな2 d = 0x82de + (s - 0x8280); } else if (s >= 0x82a1 && s <= 0x82bf) { // カタカナ1 d = 0x8340 + (s - 0x82a1); } else if (s >= 0x8380 && s <= 0x839f) { // カタカナ2 d = 0x835f + (s - 0x8380); } else if (s >= 0x83a0 && s <= 0x83b6) { // カタカナ3 d = 0x8380 + (s - 0x83a0); } else if (s >= 0x8080 && s <= 0x8082) { //  、。(スペース・句読点) d = 0x8140 + (s - 0x8080); } else if (s >= 0x829b && s <= 0x829c) { // ゛゜(濁点・半濁点) d = 0x814a + (s - 0x829b); } else if (s == 0x83bc) { // ー d = 0x815b; } if (c = 0xef) if (s == 0xbc9f) { // ? d = 0x8148; } if (d) { dest[j] = (d >> 8) & 0xff; j ++; dest[j] = d & 0xff; j ++; } } else { // 無変換 dest[j] = c; j ++; } } dest[j] = 0; return j; } void setup () { // シリアル設定 Serial.begin(9600); // I/O設定 pinMode(READY, INPUT); pinMode(sw, INPUT); pinMode(LED, OUTPUT); digitalWrite(READY, HIGH); digitalWrite(LED, HIGH); } void loop () { if(digitalRead(sw) == HIGH && previousR == LOW && millis() - timeR > debounce){ sel = random(5); timeR = millis(); } previousR = digitalRead(sw); char buf[256]; if (sel == 0 && digitalRead(sw) == HIGH) { if (digitalRead(READY) == HIGH) { strcpy_P(buf, PSTR("MSGそ'ちゃ/ですが/ど'うぞ。/\r")); utf82sjis(buf, buf); Serial.print(buf); analogWrite(greenPin, 250); analogWrite(bluePin, 250); delay(100); analogWrite(redPin, 0); analogWrite(greenPin, 0); } while (digitalRead(sw) == HIGH) delay(300); // 入力がなくなるまで待つ sel = random(5); } if (sel == 1 && digitalRead(sw) == HIGH) { if (digitalRead(READY) == HIGH) { strcpy_P(buf, PSTR("MSGきょうも、/おてんき、/すぐれませ'んねー。\r")); utf82sjis(buf, buf); Serial.print(buf); analogWrite(greenPin, 250); delay(500); analogWrite(greenPin, 0); delay(200); } while (digitalRead(sw) == HIGH) delay(300); // 入力がなくなるまで待つ sel = random(5); } if (sel == 2 && digitalRead(sw) == HIGH) { if (digitalRead(READY) == HIGH) { strcpy_P(buf, PSTR("MSG/じゃぱに'ーの/しょってます。\r")); utf82sjis(buf, buf); Serial.print(buf); analogWrite(bluePin, 250); delay(500); analogWrite(bluePin, 0); delay(200); } while (digitalRead(sw) == HIGH) delay(300); // 入力がなくなるまで待つ sel = random(5); } }