2016-12-07 1 views
0

J'essaie de lire les données binaires d'une image d'une carte SD sur un blindage Ethernet avec un Arduino Uno, puis d'envoyer les données binaires via un câble Ethernet à mon ordinateur. Je reçois un message d'erreur bizarre lorsque j'essaie d'exécuter le code, et je n'arrive pas à comprendre pourquoi.Lecture de fichier à partir du blindage Ethernet 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; 
    } 
    } 
} 

L'erreur que je reçois est:

SDTestHost: 36: Erreur: valeur vide non ignorée car elle devrait être omble chevalier new_msg = msg.toCharArray (bufSize, sizeof (bufSize)); état sortie 1 valeur vide non ignorée car elle devrait être

Je veux envoyer plus d'un octet de données à la fois, ce qui est la valeur par défaut pour client.write (file.read()); et je ne peux pas comprendre comment changer la taille de la mémoire tampon

Répondre

0

La méthode toCharArray() ne renvoie PAS de valeur. La valeur est renvoyée dans les paramètres. Vous voulez quelque chose comme:

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

client.write(buffer, 1024); 

Vous devriez probablement déclarer le tampon en dehors de la fonction, sinon il sera attribué sur la pile.