(8# 已解決)Arduino(ESP8266) 的 while 問題
本帖最後由 C_Law 於 2021-7-25 00:11 編輯
以下的一段 Code,我係想從 server.arg(1) 搵出 19200 至 808100 的一段數值變做一條 Link http://192.168.1.4:8081。
由19200 到 808100,一共 5 個數值,理應由 i=0 做到 4 就做完。但執行時,while 似乎無理到 (i<=4) 的要求一直做落去。究竟錯了什麼?
ps.
GetOneValue() 係從 server.arg(1) 的 iStartPos 位置起抽一組數值出來,並傳會下一個 space 之後的位置做 iStartPos
TrueValue() 可視作將 GetOneValue/fScale- bool myRedirect(float fScale, int iStartPos) {
- /*
- server.arg(1): 0 100000 0 99000 19200 16800 4300 9800 8500 12000 23000 34000;
- iStartPos begins at 17, position of the 1 of 19200 in server.arg(1);
- fScale = 100.00;
- */
- if (myDebug) Serial.println("\n\r\n\rEntering myRedirect()");
- bool Result = true;
- int i = 0;
- unsigned int uiTemp[4];
- while ((iStartPos < server.arg(1).length()) && (i <= 4) && Result) {
- uiTemp[i] = TrueValue(fScale, GetOneValue(server.arg(1), &iStartPos));
- if ((i < 4) && (uiTemp[i] > 255)) Result = false;
- else if ((i == 4) && (uiTemp[i] > 65535)) Result = false;
- if (myDebug) {
- Serial.print("i=");
- Serial.print(i);
- Serial.print(" uiTemp[");
- Serial.print(i);
- Serial.print("]=");
- Serial.print(uiTemp[i]);
- Serial.print(" Result=");
- if (Result) Serial.println("true");
- else Serial.println("false");
- }
- i = i + 1;
- }
- Serial.print("Final i=");
- Serial.println(i);
- /*
- Do something else
- */
- if (myDebug) Serial.println("Quit myRedirect()");
- return Result;
- }
複製代碼 執行時,即使 i >=5,只要 Result 係 True,server.arg(1) 有幾長就一直的做落去,例如:- Entering myRedirect()
- i=0 uiTemp[0]=192 Result=true
- i=1 uiTemp[1]=168 Result=true
- i=2 uiTemp[2]=1 Result=true
- i=3 uiTemp[3]=4 Result=true
- i=4 uiTemp[4]=8081 Result=true
- i=5 uiTemp[5]=123 Result=true
- i=6 uiTemp[6]=234 Result=true
- i=7 uiTemp[7]=345 Result=false
- Final i=8
- Quit myRedirect()
複製代碼 如果我將 server.arg(1) 入面的 16800 改為 26800(將會出現 Result = false),個 while 係識得停:- Entering myRedirect()
- i=0 uiTemp[0]=192 Result=true
- i=1 uiTemp[1]=268 Result=false
- Final i=2
- Quit myRedirect()
複製代碼 為何個 while 會忽略了 i<=4? |
|
|