2016-12-07 21 views
0

Arduino Unoを使用してイーサネットシールドのSDカードから画像のバイナリデータを読み取り、イーサネットケーブルを介してコンピュータに送信しようとしています。コードを実行しようとすると奇妙なエラーメッセージが表示され、その理由がわかりません。 Arduinoイーサネットシールドからファイルを読み取る

#include<SD.h> 
#include <SPI.h> 
#include <String.h> 
#include <Ethernet2.h> 
byte mac[]={0xB0,0xCD,0xAE,0x0F,0xDE,0x10}; 
IPAddress ip(169,254,95,37); //client ip for Andrew-Laptop 
//IPAddress ip(169,254,155,102); //client ip for school laptop 
IPAddress server(169,254,95,36); //server ip for Andrew-Laptop 
//IPAddress server(169,254,155,101); //server ip for school laptop 
EthernetClient client; 
int whatToDo=0; 
void setup(){ 
    for(int a=3;a<=7;a++){ 
    pinMode(a,OUTPUT); 
    digitalWrite(a,LOW); 
    } 
    Serial.begin(9600); 
    pinMode(10,OUTPUT); 
    digitalWrite(10,HIGH); 
    if(SD.begin(4)) digitalWrite(7,HIGH); 
    Ethernet.begin(mac,ip); 
    delay(1000); 
    digitalWrite(6,HIGH); 
    delay(1000); 
    if(client.connect(server, 12345)){ 
    digitalWrite(5,HIGH); 
    } 
} 
char bufSize[1024]; 
void loop(){ 
    if(whatToDo==0){ 
    File myFile=SD.open("Img.png",FILE_READ); 
    while(myFile.available()){ 
     String msg=myFile.readString(); 
     int buf=1024; 
     char new_msg=msg.toCharArray(bufSize,sizeof(bufSize)); //ERROR LINE 
     //client.write(myFile.read()); 
     client.write(new_msg); 
    } 
    //client.write(msg); 
    whatToDo=1; 
    }else{ 
    digitalWrite(3,HIGH); 
    delay(500); 
    digitalWrite(3,LOW); 
    delay(500); 
    if(whatToDo==1){ 
     client.write(""); 
     client.write("Done"); 
     whatToDo+=1; 
    } 
    } 
} 

私は取得していますエラーは次のとおりです。

SDTestHost:36:エラー:それはあるべきとして無視ではない空値 文字new_msg = msg.toCharArray(BUFSIZE、はsizeof(BUFSIZE)); 終了ステータス、それは私がclient.writeのデフォルト(file.read())である時、で、複数のデータバイトを送信したい

であるべきだと無視されない1 無効値。バッファサイズを変更する方法がわかりません

答えて

0

toCharArray()メソッドは値を返しません。値はパラメータで返されます。

char buffer[1024]; 
msg.toCharArray(buffer, 1024); 

client.write(buffer, 1024); 

おそらく関数外にバッファを宣言する必要があります。そうでない場合は、スタックに割り当てられます。

関連する問題