我一直在研究僞隨機生成命令句的程序。該程序結合了隨機選擇的動詞,所有格形容詞和名詞,以顯示最後一句。我最近一直試圖將Processing的代碼翻譯成Arduino,而今天我遇到了一些奇怪的行爲。這裏是我的代碼至今:Arduino:從SD卡中檢索字符時出現奇怪的行爲
#include <SD.h>
int ByteReceived;
int stepToLoad = 1;
int endOfLineNumber = 0;
int stringIndex = 0;
int fileNumber = 0;
File configFile;
char inputString [20];
char inputChar;
String file [3] = {
"verb.txt","adject.txt","noun.txt"};
void setup() {
Serial.begin(9600);
char randSteps[3] = {
random(1,1041),random(1,7),random(1,979)};
pinMode(10, OUTPUT);
SD.begin(10);
for(fileNumber = 0; fileNumber < 3; fileNumber++){
char filename[file[fileNumber].length()+1];
file[fileNumber].toCharArray(filename, sizeof(filename));
if(!SD.exists('\''+filename+'\''))
{
stepToLoad = randSteps[fileNumber];
configFile = SD.open(filename);
getStepData();
Serial.print(inputString);
Serial.print(" ");
endOfLineNumber = 0;
stringIndex = 0;
inputString[0] = '\0';
configFile.close();
}
}
}
void loop() {
if (Serial.available() > 0)
{
ByteReceived = Serial.read();
if(ByteReceived == '1')
{
setup();
}
}
}
void getStepData(){
if (configFile) {
while (configFile.available()) {
inputChar = configFile.read();
if (inputChar != ' '){
inputString[stringIndex] = inputChar;
stringIndex++;
}
else {
endOfLineNumber++;
if (endOfLineNumber == stepToLoad){
inputString[stringIndex] = '\0';
break;
}
else {
stringIndex = 0;
}
}
}
}
}
我目前實施到位的最大單詞的幾個幻數計數文本文件: char randSteps[3] = {random(1,1041/*Total words in verb.txt*/),random(1,7/*Total words in adject.txt*/),random(1,979/*total words in noun.txt*/)};
這僅僅是當我調試,加快啓動時間碼。 至於奇怪的行爲,程序有時會打印出完整的短語,如:
"abide my arithmetic"
其他時候它打印一樣的東西:
"1oomylenddotde his 1oopergesstive"
這種行爲會影響只是動詞,只是名詞,或兩者。當它影響動詞時,它總是讀取「1oomylenddotde」,當它影響名詞時,它讀作「1oopergesstive」。只有當我強制程序嘗試讀取文本文件中的單詞總數時,所有格形容詞才受到影響: char randSteps[3] = {1,9,1};
此時形容詞的內容爲「1heir」。但是,當程序試圖讀取「verb.txt」或「noun.txt」中的兩百個單詞時,通常會出現這個問題: char randSteps[3] = {200,1,200};
即使我在「verb.txt」和「noun 。文本」。這與SRAM有關,與endOfLineNumber
的大小有關,還是與某種緩衝區有關?