質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

4回答

10692閲覧

unsigned char で const char * に変換させる方法を教えてください。

Hiroyadesu

総合スコア14

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2018/05/15 08:45

編集2018/05/15 09:16

Arduinoで16進数(82)を10進数(130)に進数変換したいです。

Arduino

1unsigned char num = 82; 2const char *str = num; 3long num = stratal(str, NULL, 16); 4Serial.println(num);

上記のプログラムで、unsigned char を const char * に変換させなければいいのはわかってるのですが、方法がわかりません。(事情により、必ずunsigned char 型 で宣言する必要があります)

コードの追記します。Arduinoでひらがな、アルファベットを判別し、その文字に対応してLEDを点滅させようと考えています。ひらがなが3バイトの16進数でそれを受け取るために、str[]はunsigned char 型を使用しています。

ライブラリの方で、送信した16進数のstr2のみを10進数変換し、その値により、処理を分岐させようと考えています。見辛いとは思いますが、どなたか教えていただければ幸いです。

Arduino

1#include "NTP.h" 2 3//extern const BRAILLE[10][7]; 4extern const short int BRAILLE[10][7]; 5unsigned char str[6] = {}; 6unsigned char get_char; 7int flag = 0; 8int flag_func = 0; 9 10void setup() { 11 12 // put your setup code here, to run once: 13 Serial.begin(9600); 14 pinMode(13,OUTPUT); 15 pinMode(12,OUTPUT); 16 pinMode(11,OUTPUT); 17 pinMode(10,OUTPUT); 18 pinMode(9,OUTPUT); 19 pinMode(8,OUTPUT); 20} 21 22void loop() { 23 24 //ここでtest関数の動作確認を今はしています。 25 if(flag_func<1){ 26 str[1] = 81; 27 str[2] = 82; 28 test(str[0], str[1], str[2], str[3], str[4], str[5]); 29 flag_func++; 30 } 31 32 // put your main code here, to run repeatedly: 33 if(Serial.available() > 0){ //値が送信されて来た場合 34 flag++; 35 get_char = Serial.read(); 36 Serial.println(get_char,HEX); 37 38 39 if(str[0] == 0 && get_char == 0xE3){ //受け取り文字がひらがな(3バイト)の場合 40 str[0] = get_char; 41 get_char = 0; 42 } else if(str[0] == 0 && str[1] == 0 && str[2] == 0 && get_char != 0xE3){ //受け取り文字がアルファベット(1バイト)の場合 43 str[0] = 1; 44 str[1] = 1; 45 str[2] = get_char; 46 } 47 48 else if(str[0] != 0 && str[2] != 0 && get_char == 0xE3){ 49 str[3] = get_char; 50 get_char = 0; 51 }else if(str[0] != 0 && str[2] != 0 && str[3] == 0 && str[4] == 0 && get_char != 0xE3){ 52 str[3] = 1; 53 str[4] = 1; 54 str[5] = get_char; 55 } 56 57 if(str[0] == 0xE3){ //ひらがなを受け取っている場合 58 if(str[1] == 0){ 59 str[1] = get_char; 60 }else if(str[2] == 0){ 61 str[2] = get_char; 62 } 63 } 64 65 66 if(str[3] == 0xE3){ //ひらがなを受け取っている場合 67 if(str[4] == 0){ 68 str[4] = get_char; 69 }else if(str[5] == 0){ 70 str[5] = get_char; 71 } 72 } 73 74 Serial.println("================"); 75 Serial.println("途中経過です"); 76 for(int i=0;i<6;i++){ 77 Serial.print("str"); 78 Serial.print(i); 79 Serial.print(" = "); 80 Serial.println(str[i],HEX); 81 } 82 Serial.println("================"); 83 84if(str[0] != 0 && str[5] != 0){ //str配列に2文字以上格納された場合 85 if( //小文字ならば 86 ( str[4] == 0x82 && str[5] == 0x83) //「ゃ」の文字コード 87 || ( str[4] == 0x82 && str[5] == 0x85) //「ゅ」の文字コード 88 || ( str[4] == 0x82 && str[5] == 0x87) //「ょ」の文字コード 89 ){ 90 Serial.println("小文字です。str[0]~str[5]の文字コードを比較して出力します"); 91 digitalWrite(12,HIGH); 92 digitalWrite(9,HIGH); 93 delay(2000); 94 digitalWrite(12,LOW); 95 digitalWrite(9,LOW); 96 delay(1000); 97 98 //文字参照 99 //test(); 100 //test(str[0], str[1], str[2], str[3], str[4], str[5]); 101 102 for(int i=0;i<6;i++){ 103 str[i] = 0; 104 } 105 } else if(str[0] == 1 && str[1] == 1 ) { //アルファベット(1バイト)ならば 106 Serial.println("アルファベット(1バイト)文字です"); 107 digitalWrite(12,HIGH); 108 digitalWrite(11,HIGH); 109 digitalWrite(9,HIGH); 110 digitalWrite(8,HIGH); 111 delay(2000); 112 digitalWrite(12,LOW); 113 digitalWrite(11,LOW); 114 digitalWrite(9,LOW); 115 digitalWrite(8,LOW); 116 delay(1000); 117 str[0] = str[3]; 118 str[1] = str[4]; 119 str[2] = str[5]; 120 str[3] = 0; 121 str[4] = 0; 122 str[5] = 0; 123 } else { 124 Serial.println("大文字です"); 125 digitalWrite(13,HIGH); 126 digitalWrite(10,HIGH); 127 delay(2000); 128 digitalWrite(13,LOW); 129 digitalWrite(10,LOW); 130 delay(1000); 131 str[0] = str[3]; 132 str[1] = str[4]; 133 str[2] = str[5]; 134 str[3] = 0; 135 str[4] = 0; 136 str[5] = 0; 137 } 138} 139 140 } else if(str[0] != 0 && str[1] != 0 && str[2] != 0 && str[3] == 0 && flag > 0){ //最後の文字出力 141digitalWrite(11,HIGH); 142digitalWrite(12,HIGH); 143digitalWrite(13,5); 144digitalWrite(8,HIGH); 145digitalWrite(9,HIGH); 146digitalWrite(10,HIGH); 147delay(2000); 148digitalWrite(11,LOW); 149digitalWrite(12,LOW); 150digitalWrite(13,LOW); 151digitalWrite(8,LOW); 152digitalWrite(9,LOW); 153digitalWrite(10,LOW); 154delay(1000); 155 Serial.println("================"); 156 Serial.println("最後の文字です!おめでとう!"); 157 for(int i=0;i<6;i++){ 158 Serial.print("str"); 159 Serial.print(i); 160 Serial.print(" = "); 161 Serial.println(str[i],HEX); 162 } 163 Serial.println("================"); 164 165 Serial.println("1文字出力です"); 166 Serial.print("flag = "); 167 Serial.println(flag); 168 flag = 0; 169 str[0] = 0; 170 str[1] = 0; 171 str[2] = 0; 172 str[3] = 0; 173 str[4] = 0; 174 str[5] = 0; 175 } 176 177//バッファに溜まった値をクリア 178Serial.flush(); 179} 180

以下ライブラリです。

Arduino

1#include "NTP.h" 2 3const short int BRAILLE[400][7] = { 4 {0,0,0,0,0,0,0}, 5 {0,0,0,0,0,0,1}, 6 {0,0,0,0,0,1,1}, 7 {0,0,0,0,1,1,1} 8 }; 9 10 const short int TEST[10][20] = { 11 {0xE3,81,82,0,0,0,100,1,1,0,0,0,0,0,0,0,0,0,0,0}, //「あ」 12 {0xE3,81,84,0,0,0,101,1,1,1,0,0,0,0,0,0,0,0,0,0}, //「い」 13 {0xE3,82,80,0,0,0,102,1,1,0,1,1,1,1,0,0,0,0,0,0}, //「む」 14 {0xE3,82,84,0,0,0,103,1,0,0,1,1,0,0,0,0,0,0,0,0}, //「や」 15 {0xE3,83,86,0,0,0,104,1,1,1,1,1,1,0,0,0,0,0,0,0}, //「テ」 16 {0xE3,83,88,0,0,0,105,1,0,1,1,1,1,0,0,0,0,0,0,0}, //「ト」 17 {1,1,61,0,0,0,200,2,0,0,0,0,1,1,1,0,0,0,0,0}, //「a」 18 {1,1,62,0,0,0,201,2,0,0,0,0,1,1,1,1,0,0,0,0}, //「b」 19 {0xE3,81,0x8d,0,82,85,300,2,0,0,0,1,0,0,1,0,0,1,0,1}, //「きゅ」 20 {0xE3,81,0x8d,0,82,87,301,2,0,0,0,1,0,0,0,1,0,1,0,1} //「きょ」 21 }; 22 23//以下テスト関数です。ここで受け取った16進数のstr2のみを10進数に変換したいです。 24int test(unsigned char str0, unsigned char str1, unsigned char str2, unsigned char str3, unsigned char str4, unsigned char str5){ 25 26 if(str1 == 81 ){ 27 Serial.println("str1 = 81 です"); 28 29 const char *str = "82"; 30 31 32 //str[2]を10進数変換したものをnumに代入(http://marycore.jp/prog/c-lang/convert-binary-octal-decimal-hex-string-to-number/) 33 //long n = strtol("82", NULL, 16); //82が16進数ならば 10進数に変換した値をnに代入 34 long num = strtol(str, NULL, 16); 35 Serial.println(num); 36 37 38 /* 39 BRAILLE[num][0]; //打点数 40 BRAILLE[num][1]; 41 BRAILLE[num][2]; 42 BRAILLE[num][3]; 43 BRAILLE[num][4]; 44 BRAILLE[num][5]; 45 BRAILLE[num][6]; 46 */ 47 48 } 49 50 if(str1 == 82){ 51 Serial.println("str1 = 82 です"); 52 } 53 54 if(str1 == 83){ 55 Serial.println("str1 = 83 です"); 56 } 57 58 if(str1 == 1){ 59 Serial.println("str = 1 です"); 60 } 61 62 } 63 64 65 66 67int bra(){ 68 //BRAILLE[0][7]; 69 Serial.println(BRAILLE[1][6]); 70} 71

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazto

2018/05/15 08:56

整数の16進数から、整数の10進数へ変換したいという意図で間違いないでしょうか。
kazto

2018/05/15 08:57

またその場合、0xAから0xFまでの数は入力できませんが、その部分は無視する、という認識で間違いないでしょうか。
Hiroyadesu

2018/05/15 09:01

はい、間違いありません。16進数特有の0xは無しでプログラムを組み立てています。
maisumakun

2018/05/15 09:04

変換したいデータは、どこから入ってくるものでしょうか(コードにリテラルとして書いてあるのは、テストのためだけのものなのか、実際に動かすためのコードでもそうなるのか、そこが知りたいです)。
Hiroyadesu

2018/05/15 09:06

申し訳ありません。コードの全体像を質問に追記します。
guest

回答4

0

前の回答にも書きましたが、unsigned char num = 82;と書いた時点で、それは10進法の82という意味にしかなりません。本当にしたいことは、「10進数の整数を16進数だと無理やり解釈させる」ことで間違いないのでしょうか。

  • ただ16進数の値をコードで使いたいだけであれば、0x82と書くだけでCコンパイラが適切に処理してくれます。
  • strtolの引数がchar *であることからわかるように、この関数は文字列を必要としています。「strtolを使う」事自体が目的なのであれば、"82"と文字列で与えるのが適切で、コードに82と整数として書くことが不適切です。

投稿2018/05/15 09:02

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hiroyadesu

2018/05/15 09:19

お待たせしてしまい、申し訳有りません。コードを追記しました。 今現在、自分で16進数を10進数に変換するプログラムを作成しようかとも考えています。
maisumakun

2018/05/15 09:24

呼ぶ側と使う側が両方とも自分のコードなのであれば、正しい方策は「両側を書き換えて、そんな変な形式での値のやり取りを排除する」ことです。 「整数だけど16進数として再解釈しないといけない」というようなイレギュラーなルールの付いた引数は、あとあとバグの原因にしかなりません。
guest

0

まず、Hiroyadesuさんの意図を尊重しますと、strtolは使用しません。
したがって、変換後の型もchar *ではありません。

今回の場合、自分でそのような変換するプログラムを書く必要があります。

コードを書いてしまっては丸投げに答えてしまうことになりますので、流れだけ記載します。

  • 82を10の位、1の位に分離します
  • 10の位に変換後の基数を掛けます
  • 足し合わせます

・・・ほぼほぼ答えじゃないかorz

投稿2018/05/15 09:08

kazto

総合スコア7196

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hiroyadesu

2018/05/15 09:24

解答ありがとうございます。 はい、自分も既存の関数ではなく、16進数の原理から勉強し直してみようと思います。 本当にありがとうございます。
kazto

2018/05/15 09:25

const short int TEST[10][20] を16進数10進数まぜこぜで宣言してしまっているのが、問題作成者の質もイマイチ、という気がしますな。。。
guest

0

ムリクリするならこんな方法

C

1long num; 2char bff[10]; 3unsigned char num = 82; 4sprintf(bff,"%x",num); 5num = strtol(bff, NULL, 16); 6----

って、スペルミスしてまんがなw

投稿2018/05/15 09:07

編集2018/05/15 09:13
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hiroyadesu

2018/05/15 09:22

このようなやり方があるのですか。ありがとうございます。 本当にみなさんは様々な知識があり脱帽です。 もう少しだけやってみて、もしできそうになければy_waiwaiさんの方法で試してみます。
y_waiwai

2018/05/15 09:30

結局、sprintfで整数を16進文字列に変換して、strtolで整数に変換してるだけ、でその後の Serial.println(str[i],HEX); では整数を16進文字列に変換してる、というはなしですな。 しかし、、、イマドキはUTF8なのね。
guest

0

自己解決

遅くなってしまい大変申し訳ありません。
無事に処理することができました。みなさん本当にありがとうございます。
以下大幅に手直ししたライブラリです。

Arduino

1#include "NTP.h" 2#include <avr/pgmspace.h> 3 4//int flag_RBI; 5 6const PROGMEM short int BRAILLE[4][7] = { 7 {1,2,3,4,5,6,7}, 8 {10,0,0,0,0,0,1}, 9 {20,0,0,0,0,1,1}, 10 {30,0,0,0,1,1,1} 11 }; 12 13 const PROGMEM short int TEST[600][19] = { //フラッシュメモリに配列を格納 14 15 {0,0,0,0,0,0,0,0,0,0,0,0,0}, //0 16 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 17 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 18 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 19 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 20 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 21 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 22 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 23 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 24 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 25 {0,0,0,0,0,0,0,0,0,0,0,0,0}, //10 26 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 27 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 28 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 29 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 30 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 31 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 32 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 33 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 34 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 35 {2,0,0,1,1,1,1,0,1,0,1,1,0}, //20 //数字の0 36 {2,0,0,1,1,1,1,1,0,0,0,0,0}, 37 {2,0,0,1,1,1,1,1,1,0,0,0,0}, 38 {2,0,0,1,1,1,1,1,0,0,1,0,0}, 39 {2,0,0,1,1,1,1,1,0,0,1,1,0}, 40 {2,0,0,1,1,1,1,1,0,0,0,1,0}, //数字の5 41 {2,0,0,1,1,1,1,1,1,0,1,0,0}, 42 {2,0,0,1,1,1,1,1,1,0,1,1,0}, 43 {2,0,0,1,1,1,1,1,1,0,0,1,0}, 44 {2,0,0,1,1,1,1,0,1,0,1,0,0}, //数字の9 45 {0,0,0,0,0,0,0,0,0,0,0,0,0}, //30 46 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 47 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 48 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 49 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 50 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 51 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 52 53 ・・・ 54 55 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 56 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 57 {1,0,1,1,0,1,0,0,0,0,0,0,0}, //500〜 //! 58 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 59 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 60 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 61 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 62 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 63 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 64 {1,0,1,1,0,1,1,0,0,0,0,0,0}, //( 65 {1,0,1,1,0,1,1,0,0,0,0,0,0}, // ) 66 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 67 {0,0,0,0,0,0,0,0,0,0,0,0,0}, //510〜 68 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 69 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 70 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 71 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 72 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 73 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 74 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 75 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 76 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 77 {0,0,0,0,0,0,0,0,0,0,0,0,0}, //520〜 78 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 79 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 80 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 81 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 82 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 83 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 84 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 85 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 86 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 87 {1,0,1,0,0,0,1,0,0,0,0,0,0}, //? //530〜 88 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 89 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 90 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 91 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 92 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 93 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 94 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 95 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 96 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 97 {1,0,0,0,0,1,0,0,0,0,0,0,0},//540〜 //・ 98 {2,0,1,0,0,1,0,0,1,0,0,1,0},//ー 99 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 100 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 101 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 102 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 103 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 104 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 105 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 106 {0,0,0,0,0,0,0,0,0,0,0,0,0}, 107 {0,0,0,0,0,0,0,0,0,0,0,0,0},//550〜 108 109 }; 110 111int test(unsigned char str0, unsigned char str1, unsigned char str2, unsigned char str3, unsigned char str4, unsigned char str5){ 112 113 114 if(str1 == 0x80){ 115 116 Serial.println("str1 = 80 です"); 117 int num = str2 + 331; //460〜 //特殊記号受け取りスタート位置 118 Refer_Array(num); 119 120 }else if(str1 == 0x81 ){ 121 122 Serial.println("str1 = 81 です"); 123 int num = str2 - 30; //100〜 124 Refer_Array(num); 125 126 }else if(str1 == 0x82){ 127 128 Serial.println("str1 = 82 です"); 129 int num = str2 + 42; //170〜 130 Refer_Array(num); 131 132 }else if(str1 == 0x83){ 133 134 if(str2 >= 187){ 135 Serial.println("str1 = 83 で str2 >= 187 以上です"); 136 int num = str2 + 273 + 80; //540〜 //特殊記号「・」「ー」の受け取り 137 Refer_Array(num); 138 }else { 139 Serial.println("str1 = 83 です"); 140 int num = str2 + 112; 141 Refer_Array(num); //240〜 142 } 143 144 }else if(str1 == 0xBC){ 145 146 Serial.println("str1 = BC です"); 147 int num = str2 + 291 + 80; //500〜 //特殊記号「(」「)」「?」「!」の受け取り 148 Refer_Array(num); 149 150 } 151 152} 153 154//拗音処理関数 155int Youon(unsigned char str0, unsigned char str1, unsigned char str2, unsigned char str3, unsigned char str4, unsigned char str5){ 156 157Serial.println("拗音です"); 158 if(str1 == 0x81 && str2 == 0xb4){ 159 int num = str2 + str5 + 54; //311〜 //「ぴゃ」「ぴゅ」「ぴょ」の受け取り 160 Refer_Array(num); 161 162 }else if(str1 == 0x81){ 163 164 int num = str2 + str5 + 28; //300〜 165 Refer_Array(num); 166 167 }else if(str1 == 0x82 && str2 == 0x8a){ 168 169 int num = str2 + str5 + 91; //360〜 //「りゃ」「りゅ」「りょ」の受け取り 170 Refer_Array(num); 171 172 }else if(str1 == 0x82){ 173 174 int num = str2 + str5 + 44; //380〜 //カタカナ拗音文字開始 175 Refer_Array(num); 176 177 }else if(str1 == 0x83 && str2 == 0x94){ 178 179 int num = str2 + str5 + 139; //450〜 //ぴゃぴゅぴょ 180 Refer_Array(num); 181 182 }else if(str1 == 0x83){ 183 184 int num = str2 + str5 + 108; //400〜 185 Refer_Array(num); 186 187 } 188 189} 190 191//1バイト文字処理関数 192int Byte_One(unsigned char str0, unsigned char str1, unsigned char str2, unsigned char str3, unsigned char str4, unsigned char str5, int FlagBigChar, int FlagSmallChar, int FlagNumChar){ 193 Serial.println("str1 = 1 です------------------------"); 194 int num = str2 - 28; //20〜 195 Serial.print("FlagNumChar = "); 196 Serial.println(FlagNumChar); 197 Serial.print("FlagBigChar = "); 198 Serial.println(FlagBigChar); 199 Serial.print("FlagSmallChar = "); 200 Serial.println(FlagSmallChar); 201 202 short int RBI; 203 int CycleNum; 204 205 RBI = pgm_read_word(&TEST[num][0]); //打点数取得 206 207 Serial.print("打点数: TEST = [num][0] = "); 208 Serial.println(RBI); 209 210 if(FlagNumChar > 1){ 211 RBI = 2; 212 CycleNum = 2; 213 Led_Flush_1Byte(num,RBI,CycleNum); 214 }else if(FlagBigChar > 1){ 215 RBI = 3; 216 CycleNum = 3; 217 Led_Flush_1Byte(num,RBI,CycleNum); 218 }else if(FlagSmallChar > 1){ 219 RBI = 2; 220 CycleNum = 2; 221 Led_Flush_1Byte(num,RBI,CycleNum); 222 }else { 223 Led_Flush(num,RBI); 224 } 225 226} 227 228 229int Refer_Array(int num){ //配列参照関数 230 231 Serial.print("num = "); 232 Serial.println(num); 233 234 short int RBI; 235 RBI = pgm_read_word(&TEST[num][0]); //打点数取得 236 237 Serial.print("打点数: TEST = [num][0] = "); 238 Serial.println(RBI); 239 240 Led_Flush(num,RBI); 241 242 } 243 244 245 246 247int Led_Flush(int num, int RBI){ // LED点灯関数 248 249 for(int i = 1; i<= RBI ; i++){ 250 /* 251 digitalWrite(13,TEST[num][1+(i-1)*6]*5); 252 digitalWrite(12,TEST[num][2+(i-1)*6]*5); 253 digitalWrite(11,TEST[num][3+(i-1)*6]*5); 254 255 digitalWrite(10,TEST[num][4+(i-1)*6]*5); 256 digitalWrite( 9,TEST[num][5+(i-1)*6]*5); 257 digitalWrite( 8,TEST[num][6+(i-1)*6]*5); 258 */ 259 260 Serial.println("LED 点灯"); 261 digitalWrite(13,(int)pgm_read_word(&TEST[num][1+(i-1)*6])*5); 262 digitalWrite(12,(int)pgm_read_word(&TEST[num][2+(i-1)*6])*5); 263 digitalWrite(11,(int)pgm_read_word(&TEST[num][3+(i-1)*6])*5); 264 265 digitalWrite(10,(int)pgm_read_word(&TEST[num][4+(i-1)*6])*5); 266 digitalWrite( 9,(int)pgm_read_word(&TEST[num][5+(i-1)*6])*5); 267 digitalWrite( 8,(int)pgm_read_word(&TEST[num][6+(i-1)*6])*5); 268 269 270 delay(600); 271 272 digitalWrite(13,LOW); 273 digitalWrite(12,LOW); 274 digitalWrite(11,LOW); 275 digitalWrite(10,LOW); 276 digitalWrite( 9,LOW); 277 digitalWrite( 8,LOW); 278 279 280 if(RBI > 1){ 281 delay(400); 282 }else{ 283 delay(1000); 284 } 285 286 } 287 288} 289 290 291 292int Led_Flush_1Byte(int num, int RBI, int CycleNum){ // LED点灯関数(1バイト文字) 293 294 for(int i = CycleNum; i<= RBI ; i++){ 295 Serial.println("LED 点灯"); 296 digitalWrite(13,(int)pgm_read_word(&TEST[num][1+(i-1)*6])*5); 297 digitalWrite(12,(int)pgm_read_word(&TEST[num][2+(i-1)*6])*5); 298 digitalWrite(11,(int)pgm_read_word(&TEST[num][3+(i-1)*6])*5); 299 300 digitalWrite(10,(int)pgm_read_word(&TEST[num][4+(i-1)*6])*5); 301 digitalWrite( 9,(int)pgm_read_word(&TEST[num][5+(i-1)*6])*5); 302 digitalWrite( 8,(int)pgm_read_word(&TEST[num][6+(i-1)*6])*5); 303 304 delay(600); 305 306 digitalWrite(13,LOW); 307 digitalWrite(12,LOW); 308 digitalWrite(11,LOW); 309 digitalWrite(10,LOW); 310 digitalWrite( 9,LOW); 311 digitalWrite( 8,LOW); 312 313 if(RBI > 1){ 314 delay(400); 315 }else{ 316 delay(1000); 317 } 318 } 319 320} 321 322

投稿2018/06/18 08:23

Hiroyadesu

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問