質問編集履歴
2
プログラム追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -9,4 +9,266 @@
|
|
9
9
|
|
10
10
|
上記のプログラムで、unsigned char を const char * に変換させなければいいのはわかってるのですが、方法がわかりません。(事情により、必ずunsigned char 型 で宣言する必要があります)
|
11
11
|
|
12
|
+
|
13
|
+
|
14
|
+
コードの追記します。Arduinoでひらがな、アルファベットを判別し、その文字に対応してLEDを点滅させようと考えています。ひらがなが3バイトの16進数でそれを受け取るために、str[]はunsigned char 型を使用しています。
|
15
|
+
|
16
|
+
ライブラリの方で、送信した16進数のstr2のみを10進数変換し、その値により、処理を分岐させようと考えています。見辛いとは思いますが、どなたか教えていただければ幸いです。
|
17
|
+
|
18
|
+
```Arduino
|
19
|
+
#include "NTP.h"
|
20
|
+
|
21
|
+
//extern const BRAILLE[10][7];
|
22
|
+
extern const short int BRAILLE[10][7];
|
23
|
+
unsigned char str[6] = {};
|
24
|
+
unsigned char get_char;
|
25
|
+
int flag = 0;
|
26
|
+
int flag_func = 0;
|
27
|
+
|
28
|
+
void setup() {
|
29
|
+
|
30
|
+
// put your setup code here, to run once:
|
31
|
+
Serial.begin(9600);
|
32
|
+
pinMode(13,OUTPUT);
|
33
|
+
pinMode(12,OUTPUT);
|
34
|
+
pinMode(11,OUTPUT);
|
35
|
+
pinMode(10,OUTPUT);
|
36
|
+
pinMode(9,OUTPUT);
|
37
|
+
pinMode(8,OUTPUT);
|
38
|
+
}
|
39
|
+
|
40
|
+
void loop() {
|
41
|
+
|
42
|
+
//ここでtest関数の動作確認を今はしています。
|
43
|
+
if(flag_func<1){
|
44
|
+
str[1] = 81;
|
45
|
+
str[2] = 82;
|
46
|
+
test(str[0], str[1], str[2], str[3], str[4], str[5]);
|
47
|
+
flag_func++;
|
48
|
+
}
|
49
|
+
|
50
|
+
// put your main code here, to run repeatedly:
|
51
|
+
if(Serial.available() > 0){ //値が送信されて来た場合
|
52
|
+
flag++;
|
53
|
+
get_char = Serial.read();
|
54
|
+
Serial.println(get_char,HEX);
|
55
|
+
|
56
|
+
|
57
|
+
if(str[0] == 0 && get_char == 0xE3){ //受け取り文字がひらがな(3バイト)の場合
|
58
|
+
str[0] = get_char;
|
59
|
+
get_char = 0;
|
60
|
+
} else if(str[0] == 0 && str[1] == 0 && str[2] == 0 && get_char != 0xE3){ //受け取り文字がアルファベット(1バイト)の場合
|
61
|
+
str[0] = 1;
|
62
|
+
str[1] = 1;
|
63
|
+
str[2] = get_char;
|
64
|
+
}
|
65
|
+
|
66
|
+
else if(str[0] != 0 && str[2] != 0 && get_char == 0xE3){
|
67
|
+
str[3] = get_char;
|
68
|
+
get_char = 0;
|
69
|
+
}else if(str[0] != 0 && str[2] != 0 && str[3] == 0 && str[4] == 0 && get_char != 0xE3){
|
70
|
+
str[3] = 1;
|
71
|
+
str[4] = 1;
|
72
|
+
str[5] = get_char;
|
73
|
+
}
|
74
|
+
|
75
|
+
if(str[0] == 0xE3){ //ひらがなを受け取っている場合
|
76
|
+
if(str[1] == 0){
|
77
|
+
str[1] = get_char;
|
78
|
+
}else if(str[2] == 0){
|
79
|
+
str[2] = get_char;
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
|
84
|
+
if(str[3] == 0xE3){ //ひらがなを受け取っている場合
|
85
|
+
if(str[4] == 0){
|
86
|
+
str[4] = get_char;
|
87
|
+
}else if(str[5] == 0){
|
88
|
+
str[5] = get_char;
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
Serial.println("================");
|
93
|
+
Serial.println("途中経過です");
|
12
|
-
|
94
|
+
for(int i=0;i<6;i++){
|
95
|
+
Serial.print("str");
|
96
|
+
Serial.print(i);
|
97
|
+
Serial.print(" = ");
|
98
|
+
Serial.println(str[i],HEX);
|
99
|
+
}
|
100
|
+
Serial.println("================");
|
101
|
+
|
102
|
+
if(str[0] != 0 && str[5] != 0){ //str配列に2文字以上格納された場合
|
103
|
+
if( //小文字ならば
|
104
|
+
( str[4] == 0x82 && str[5] == 0x83) //「ゃ」の文字コード
|
105
|
+
|| ( str[4] == 0x82 && str[5] == 0x85) //「ゅ」の文字コード
|
106
|
+
|| ( str[4] == 0x82 && str[5] == 0x87) //「ょ」の文字コード
|
107
|
+
){
|
108
|
+
Serial.println("小文字です。str[0]~str[5]の文字コードを比較して出力します");
|
109
|
+
digitalWrite(12,HIGH);
|
110
|
+
digitalWrite(9,HIGH);
|
111
|
+
delay(2000);
|
112
|
+
digitalWrite(12,LOW);
|
113
|
+
digitalWrite(9,LOW);
|
114
|
+
delay(1000);
|
115
|
+
|
116
|
+
//文字参照
|
117
|
+
//test();
|
118
|
+
//test(str[0], str[1], str[2], str[3], str[4], str[5]);
|
119
|
+
|
120
|
+
for(int i=0;i<6;i++){
|
121
|
+
str[i] = 0;
|
122
|
+
}
|
123
|
+
} else if(str[0] == 1 && str[1] == 1 ) { //アルファベット(1バイト)ならば
|
124
|
+
Serial.println("アルファベット(1バイト)文字です");
|
125
|
+
digitalWrite(12,HIGH);
|
126
|
+
digitalWrite(11,HIGH);
|
127
|
+
digitalWrite(9,HIGH);
|
128
|
+
digitalWrite(8,HIGH);
|
129
|
+
delay(2000);
|
130
|
+
digitalWrite(12,LOW);
|
131
|
+
digitalWrite(11,LOW);
|
132
|
+
digitalWrite(9,LOW);
|
133
|
+
digitalWrite(8,LOW);
|
134
|
+
delay(1000);
|
135
|
+
str[0] = str[3];
|
136
|
+
str[1] = str[4];
|
137
|
+
str[2] = str[5];
|
138
|
+
str[3] = 0;
|
139
|
+
str[4] = 0;
|
140
|
+
str[5] = 0;
|
141
|
+
} else {
|
142
|
+
Serial.println("大文字です");
|
143
|
+
digitalWrite(13,HIGH);
|
144
|
+
digitalWrite(10,HIGH);
|
145
|
+
delay(2000);
|
146
|
+
digitalWrite(13,LOW);
|
147
|
+
digitalWrite(10,LOW);
|
148
|
+
delay(1000);
|
149
|
+
str[0] = str[3];
|
150
|
+
str[1] = str[4];
|
151
|
+
str[2] = str[5];
|
152
|
+
str[3] = 0;
|
153
|
+
str[4] = 0;
|
154
|
+
str[5] = 0;
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
158
|
+
} else if(str[0] != 0 && str[1] != 0 && str[2] != 0 && str[3] == 0 && flag > 0){ //最後の文字出力
|
159
|
+
digitalWrite(11,HIGH);
|
160
|
+
digitalWrite(12,HIGH);
|
161
|
+
digitalWrite(13,5);
|
162
|
+
digitalWrite(8,HIGH);
|
163
|
+
digitalWrite(9,HIGH);
|
164
|
+
digitalWrite(10,HIGH);
|
165
|
+
delay(2000);
|
166
|
+
digitalWrite(11,LOW);
|
167
|
+
digitalWrite(12,LOW);
|
168
|
+
digitalWrite(13,LOW);
|
169
|
+
digitalWrite(8,LOW);
|
170
|
+
digitalWrite(9,LOW);
|
171
|
+
digitalWrite(10,LOW);
|
172
|
+
delay(1000);
|
173
|
+
Serial.println("================");
|
174
|
+
Serial.println("最後の文字です!おめでとう!");
|
175
|
+
for(int i=0;i<6;i++){
|
176
|
+
Serial.print("str");
|
177
|
+
Serial.print(i);
|
178
|
+
Serial.print(" = ");
|
179
|
+
Serial.println(str[i],HEX);
|
180
|
+
}
|
181
|
+
Serial.println("================");
|
182
|
+
|
183
|
+
Serial.println("1文字出力です");
|
184
|
+
Serial.print("flag = ");
|
185
|
+
Serial.println(flag);
|
186
|
+
flag = 0;
|
187
|
+
str[0] = 0;
|
188
|
+
str[1] = 0;
|
189
|
+
str[2] = 0;
|
190
|
+
str[3] = 0;
|
191
|
+
str[4] = 0;
|
192
|
+
str[5] = 0;
|
193
|
+
}
|
194
|
+
|
195
|
+
//バッファに溜まった値をクリア
|
196
|
+
Serial.flush();
|
197
|
+
}
|
198
|
+
|
199
|
+
```
|
200
|
+
|
201
|
+
以下ライブラリです。
|
202
|
+
```Arduino
|
203
|
+
#include "NTP.h"
|
204
|
+
|
205
|
+
const short int BRAILLE[400][7] = {
|
206
|
+
{0,0,0,0,0,0,0},
|
207
|
+
{0,0,0,0,0,0,1},
|
208
|
+
{0,0,0,0,0,1,1},
|
209
|
+
{0,0,0,0,1,1,1}
|
210
|
+
};
|
211
|
+
|
212
|
+
const short int TEST[10][20] = {
|
213
|
+
{0xE3,81,82,0,0,0,100,1,1,0,0,0,0,0,0,0,0,0,0,0}, //「あ」
|
214
|
+
{0xE3,81,84,0,0,0,101,1,1,1,0,0,0,0,0,0,0,0,0,0}, //「い」
|
215
|
+
{0xE3,82,80,0,0,0,102,1,1,0,1,1,1,1,0,0,0,0,0,0}, //「む」
|
216
|
+
{0xE3,82,84,0,0,0,103,1,0,0,1,1,0,0,0,0,0,0,0,0}, //「や」
|
217
|
+
{0xE3,83,86,0,0,0,104,1,1,1,1,1,1,0,0,0,0,0,0,0}, //「テ」
|
218
|
+
{0xE3,83,88,0,0,0,105,1,0,1,1,1,1,0,0,0,0,0,0,0}, //「ト」
|
219
|
+
{1,1,61,0,0,0,200,2,0,0,0,0,1,1,1,0,0,0,0,0}, //「a」
|
220
|
+
{1,1,62,0,0,0,201,2,0,0,0,0,1,1,1,1,0,0,0,0}, //「b」
|
221
|
+
{0xE3,81,0x8d,0,82,85,300,2,0,0,0,1,0,0,1,0,0,1,0,1}, //「きゅ」
|
222
|
+
{0xE3,81,0x8d,0,82,87,301,2,0,0,0,1,0,0,0,1,0,1,0,1} //「きょ」
|
223
|
+
};
|
224
|
+
|
225
|
+
//以下テスト関数です。ここで受け取った16進数のstr2のみを10進数に変換したいです。
|
226
|
+
int test(unsigned char str0, unsigned char str1, unsigned char str2, unsigned char str3, unsigned char str4, unsigned char str5){
|
227
|
+
|
228
|
+
if(str1 == 81 ){
|
229
|
+
Serial.println("str1 = 81 です");
|
230
|
+
|
231
|
+
const char *str = "82";
|
232
|
+
|
233
|
+
|
234
|
+
//str[2]を10進数変換したものをnumに代入(http://marycore.jp/prog/c-lang/convert-binary-octal-decimal-hex-string-to-number/)
|
235
|
+
//long n = strtol("82", NULL, 16); //82が16進数ならば 10進数に変換した値をnに代入
|
236
|
+
long num = strtol(str, NULL, 16);
|
237
|
+
Serial.println(num);
|
238
|
+
|
239
|
+
|
240
|
+
/*
|
241
|
+
BRAILLE[num][0]; //打点数
|
242
|
+
BRAILLE[num][1];
|
243
|
+
BRAILLE[num][2];
|
244
|
+
BRAILLE[num][3];
|
245
|
+
BRAILLE[num][4];
|
246
|
+
BRAILLE[num][5];
|
247
|
+
BRAILLE[num][6];
|
248
|
+
*/
|
249
|
+
|
250
|
+
}
|
251
|
+
|
252
|
+
if(str1 == 82){
|
253
|
+
Serial.println("str1 = 82 です");
|
254
|
+
}
|
255
|
+
|
256
|
+
if(str1 == 83){
|
257
|
+
Serial.println("str1 = 83 です");
|
258
|
+
}
|
259
|
+
|
260
|
+
if(str1 == 1){
|
261
|
+
Serial.println("str = 1 です");
|
262
|
+
}
|
263
|
+
|
264
|
+
}
|
265
|
+
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
int bra(){
|
270
|
+
//BRAILLE[0][7];
|
271
|
+
Serial.println(BRAILLE[1][6]);
|
272
|
+
}
|
273
|
+
|
274
|
+
```
|
1
文章を多少変更しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -7,6 +7,6 @@
|
|
7
7
|
Serial.println(num);
|
8
8
|
```
|
9
9
|
|
10
|
-
上記のプログラムで、unsigned char を const char * に変換させなければいいのはわかってるのですが、方法がわかりません。
|
10
|
+
上記のプログラムで、unsigned char を const char * に変換させなければいいのはわかってるのですが、方法がわかりません。(事情により、必ずunsigned char 型 で宣言する必要があります)
|
11
11
|
|
12
12
|
どなたか詳しい方がいればお教えいただけませんか。
|