被宣告擺了一道

其實ATtiny85的睡眠程式改好第一版了,但在實驗時,發現只能在一分鐘內可以使用。找了一天,一直找不到原因。

最後,使用Arduino Nano,一樣發生跟ATtiny85一樣問題,不過Nano可以開Serial port去看資料之間的變化。終於發現是自己在最一開始的宣告,用了錯誤的方法!!!

unsigned long sleep_t = 60000;      //60秒
unsigned long sleep_t = 60*1000;
unsigned long sleep_t = 60.0*1000;

同樣宣告,三種方法,最後是誰可以用呢?

第1行跟第3行是可以用的。我就是用了第二行的方法,會得到4294961760。看來就是溢位了~~~

那改下面這樣可以嗎???

unsigned long sleep_t = 1000; 
sleep_t *= 60;

這樣是可以的唷~~~

想看看到底是怎麼回事,做了一個小實驗,理應這結果會是32768

long i=16384*2;  //32768
long k=32768;

可是,結果i輸出是 -32768。也就是說Arduino計算時,會先用int計算,在付予到變數,而int的範圍是 -32768~32767。

k是正常32768喔。

一行搞了一天!!!!!

好啦~ 我是程式小白~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *