0

私はEclipseでArduinoを使用しています。構成ファイルから double を読み取りたい。私はこれらの機能を作りました:

void Settings::readDouble(char buff, String data, bool flag, double dataToStore) {
    data = "";
    int intPart = 0;
    int probablyFloatPart = 0;

    while(buff != '\n') {
        if(isdigit(buff)) {
            data.concat(buff);
            Serial.println(data);
        }
        else if (buff == '.') {
            char charBuf[data.length()+1];
            data.toCharArray(charBuf,data.length()+1);
            // Convert chars to int
            intPart = atoi(charBuf);
            Serial.println(intPart);
            data="";
            flag = false;
        }
        buff = theSettings.read();
    };

    // Convert string to array of chars
    char charBuf[data.length()+1];
    data.toCharArray(charBuf,data.length()+1);

    // Convert chars to integer
    probablyFloatPart = atoi(charBuf);
    Serial.println(probablyFloatPart);
    if (!flag) {
        dataToStore = intPart + (probablyFloatPart/pow(10, data.length()));
    }
    else {
        dataToStore = probablyFloatPart;
    }
    flag = true;
    //Serial.println(dataToStore, 5);
}

serial.printing から、読み取りたい数値の int または小数部分が 4 桁を超えると、エラーが発生することに気付きました。基本的に、4 バイトを超える文字列を int に変換することはできません。これどうやってするの?

4

2 に答える 2

0

結果をフロートに保存しようとします。以下のコードは私が試したものです。

float result = 0;
float scale = 10;
bool pastDecPoint = false;
while(buff != '\n') {
    if(isdigit(buff){
          if(pastDecPoint) 
          {
             result = result + (buff / scale);
             scale = scale * 10;

           }
           else
           {
             result = (result * 10.0) + atoi(buff);
           } 
    } else if (buff == '.') {

        pastDecPoint = true;
    }
    buff = theSettings.read();
};
Serial.println(result);

}

また、ピーターソンが戻ってきたものを見たいです。ピーターソンによく似ている

于 2013-07-09T16:04:12.690 に答える