tag:blogger.com,1999:blog-4877487320781767952.post6302980524844814311..comments2024-02-29T08:16:28.620+08:00Comments on 小狐狸事務所: Arduino 串列埠測試 (UART)小狐狸事務所http://www.blogger.com/profile/09435160519044041137noreply@blogger.comBlogger51125tag:blogger.com,1999:blog-4877487320781767952.post-52370666825598423622022-01-24T18:30:03.259+08:002022-01-24T18:30:03.259+08:00請問原因是甚麼呢?請問原因是甚麼呢?小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-54170772077669527432022-01-24T12:12:59.996+08:002022-01-24T12:12:59.996+08:00我解決這個問題了,感謝Tony老師٩( 'ω' )و我解決這個問題了,感謝Tony老師٩( 'ω' )وKestrelhttps://www.blogger.com/profile/04823452721564553212noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-55553390855800675442022-01-20T18:51:56.706+08:002022-01-20T18:51:56.706+08:00Hi, Kestrel! 從您的描述來看, 應該跟您的程式碼無關, 有可能是 Arduino 串列埠...Hi, Kestrel! 從您的描述來看, 應該跟您的程式碼無關, 有可能是 Arduino 串列埠 buffer size 的問題, 請問您使用哪一款 Arduino? 一般 UNO 好像預設是 64 個 byte, 如果使用 SoftwareSerial.h 的話試試看用 #define SERIAL_RX_BUFFER_SIZE 421 可不可以, 若是使用 HardwareSerial.h 則要去修改其中的 SERIAL_RX_BUFFER_SIZE 常數設定, 但這是我以前玩 Arduino 的印象, 因為我沒玩過 MODBUSRTU, 所以不知道它是否有自己的設定, 請見諒. 小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-63659997951053183602022-01-20T17:29:34.087+08:002022-01-20T17:29:34.087+08:00Tony老師您好
我用ModbusRtu.h寫了一個程式,但是我沒辦法讀寫255以上的陣列元素,可以...Tony老師您好<br />我用ModbusRtu.h寫了一個程式,但是我沒辦法讀寫255以上的陣列元素,可以請老師幫我看一下錯在哪裡嗎?感謝<br />這是我用的modbus測試軟體<br />https://ebook.yourplc.net/modules/wfdownloads/singlefile.php?cid=11&lid=103<br /><br />以下是我的程式碼,255以前的讀寫都很順利,超過就不行了TVT(我想要利用421元素來點亮LED)<br /><br /><br />#define ledPin 51<br />#include <br />// data array for modbus network sharing<br />uint16_t au16data[500] = {3, 1415, 9265, 4, 2, 7182, 28182, 8, 65535, 1, 0, 1, 0, 0, 1, -1 };<br />Modbus slave(1,Serial,0); // this is slave @1 and RS-232 or USB-FTDI<br />void setup() {<br /> pinMode(ledPin, OUTPUT);<br /> Serial.begin( 19200, SERIAL_8E1 ); // 19200 baud, 8-bits, even, 1-bit stop<br /> slave.start();<br />}<br />void loop() {<br /> slave.poll( au16data,500);<br /> switch(au16data[10])//HEX_0A<br /> {<br /> case 0:<br /> {<br /> int DMXCH_high_low = 2;<br /> if(au16data[421] == 1)//HEX_1A5 (01 06 01 A5 00 01) (01 03 01 A5 00 01)<br /> {<br /> digitalWrite(ledPin, HIGH);<br /> }<br /> else if(au16data[421] == 0)<br /> {<br /> digitalWrite(ledPin, LOW);<br /> }<br /> else{<br /> }<br /> break;<br /> }<br /> case 1:<br /> {<br /> break;}<br /> <br /> }<br />}Kestrelhttps://www.blogger.com/profile/04823452721564553212noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-74610380706746157342021-03-10T09:22:21.470+08:002021-03-10T09:22:21.470+08:00不是耶, 主要是設定本身程式功能的參數開關,
目前是將 config.ini 文字檔案放在 SD 卡...不是耶, 主要是設定本身程式功能的參數開關,<br />目前是將 config.ini 文字檔案放在 SD 卡,<br />只是突然有個想法,<br />是否可以直接透過 RS232 讀取此設定檔來省去 SD 卡?<br />也有實做透過編碼將參數由 RS232 傳入,<br />缺點就是需要各別一個個傳入,<br />且不直觀, 需要編碼對照表來看相對應的參數設定...Unknownhttps://www.blogger.com/profile/18429676363939568715noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-77572190103277230832021-03-09T22:46:54.273+08:002021-03-09T22:46:54.273+08:00您是要用來設定 Arduino 本身的 Baud rate 嗎?您是要用來設定 Arduino 本身的 Baud rate 嗎?小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-73210499543802565932021-03-09T12:21:01.064+08:002021-03-09T12:21:01.064+08:00是, 只是簡單的設定, 檔案內容舉例: UART1=ON, BAUD1=9600 開關/設定之類的
...是, 只是簡單的設定, 檔案內容舉例: UART1=ON, BAUD1=9600 開關/設定之類的<br />但目前針對從 RS232 接收與解析 TXT 檔案部分尚無概念...<br />(目前資訊大都是將資料存成 TXT 檔案於 SD 卡, 或讀取 SD 卡檔案)<br /><br />或是先了解第一步, 如何從 RS232 接收 TXT 檔案並存在 SD 卡... Thanks.<br />PC 端部分, 目前是想用 Tera Term 的 File\Send fileUnknownhttps://www.blogger.com/profile/18429676363939568715noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-23612107494734605502021-03-08T21:49:49.412+08:002021-03-08T21:49:49.412+08:00您的意思是把要 Arduino 做的事寫在 txt 檔, 然後一次傳給 Arduino 去執行是嗎?...您的意思是把要 Arduino 做的事寫在 txt 檔, 然後一次傳給 Arduino 去執行是嗎? 似乎可行, 但您可能需將傳遞之參數 (操作碼) 做個對應編碼, Arduino 讀取後進行解碼取出參數後執行, 但 Arduino ATMEGA328P 的緩衝器只有 64 byte 而已, 指令編碼越精簡越好. 小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-79586839839697624252021-03-08T15:12:08.538+08:002021-03-08T15:12:08.538+08:00時常拜讀您的文章, 有個應用想請教一下,
如果想用電腦透過 RS232 傳送文字檔給 Arduino...時常拜讀您的文章, 有個應用想請教一下,<br />如果想用電腦透過 RS232 傳送文字檔給 Arduino 接收與處理, 有這方面的經驗或想法嗎? 感謝!<br />(想把設定參數直接寫在 TXT 檔案, 而不需要傳輸參數的每個字元)Unknownhttps://www.blogger.com/profile/18429676363939568715noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-356361087153822562021-01-13T16:56:18.224+08:002021-01-13T16:56:18.224+08:00我在arduino v1.8.13,試過了,下面兩行改成512 byte,要在您說的arduino-...我在arduino v1.8.13,試過了,下面兩行改成512 byte,要在您說的arduino-1.6.1\hardware\arduino\avr\cores\arduino\HardwareSerial.h,位置去修改,而不是在自己編輯的檔案上寫,不然牠會出現重複定義。<br /><br />#define SERIAL_TX_BUFFER_SIZE 512<br />#define SERIAL_RX_BUFFER_SIZE 512<br /><br />剛好我也遇到這個問題,感謝您的教學。東海林將司https://www.blogger.com/profile/14110133779048155903noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-55743972537941130292020-01-25T22:25:55.112+08:002020-01-25T22:25:55.112+08:00你好诶最近在玩 藍芽hm10 但我要arduino 每隔一段時間就發除一次at 指令
但不知道是...你好诶最近在玩 藍芽hm10 但我要arduino 每隔一段時間就發除一次at 指令 <br />但不知道是板子問題還是藍芽模組問題 我舞法使我的at指令自動閥送並回傳顯示<br />(可能表達的不是很好 請見諒nickhttps://www.blogger.com/profile/12766664114592432357noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-50659941580765778132019-08-17T19:33:25.610+08:002019-08-17T19:33:25.610+08:00Hi, 其實我還沒時間對 LoRa 做仔細測試, 只做了初步的 SPI 介面測試, 參考 :
ht...Hi, 其實我還沒時間對 LoRa 做仔細測試, 只做了初步的 SPI 介面測試, 參考 :<br /><br />https://yhhuang1966.blogspot.com/2018/01/arduino-lora.html小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-25996478762047017082019-08-16T16:10:09.813+08:002019-08-16T16:10:09.813+08:00你好,
最近再做通訊的測試,如果兩塊Arduino nano用線對接,Arduino發送和接收內容都...你好,<br />最近再做通訊的測試,如果兩塊Arduino nano用線對接,Arduino發送和接收內容都正確,但是當使用LORA433做無線傳輸時,收到的資料就會錯誤,後來沒有使用LORA433而直接Arduino發給PC的Com Port, UartAssist看接收的內容,一樣也是錯誤的,我用過Serial.print()和Serial.write()結果都一樣,不知道是那裡出問題?<br /><br />發送端程式如下:<br /><br />#include <br /><br />String KeyinString;<br />String SendString;<br /><br />const byte ROWS = 4; <br />const byte COLS = 4; <br /><br />char hexaKeys[COLS][ROWS] = {<br /> {'1','4','7','*'},<br /> {'2','5','8','0'},<br /> {'3','6','9','#'},<br /> {'A','B','C','D'}<br />};<br /><br />byte rowPins[ROWS] = {8, 7, 6, 5}; <br />byte colPins[COLS] = {12, 11, 10, 9}; <br /><br />Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); <br /><br />void setup()<br />{<br /> Serial.begin(9600); //初始化COM Port<br />}<br /><br /><br />void loop()<br />{<br /> char customKey = customKeypad.getKey(); <br /> <br /> if (customKey)<br /> {<br /> KeyinString = KeyinString + customKey;<br /> <br /> if (customKey == 'A')<br /> {<br /> SendString = KeyinString.substring(0 , KeyinString.length()-1);<br /> <br /> Serial.print(SendString);<br /> KeyinString = "";<br /> SendString = "";<br /> }<br /> }<br />}<br /><br />接收端程式如下:<br /><br />#include <br />#include <br /><br />LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); <br /><br />String RecMessage;<br /><br />void setup()<br />{<br /> Serial.begin(9600); <br /> Serial.setTimeout(50);<br /><br /> lcd.begin(16, 2); <br /> <br /> for(int i = 0; i < 3; i++) <br /> {<br /> lcd.backlight(); <br /> delay(250);<br /> lcd.noBacklight(); <br /> delay(250);<br /> }<br /> lcd.backlight();<br /><br /> lcd.setCursor(0, 0); <br /> lcd.print("<>");<br /> delay(1000);<br /><br /> lcd.clear();<br /> lcd.setCursor(0, 0);<br /> lcd.print("Form to TX MSG:");<br />}<br /><br /><br />void loop()<br />{<br /> String RecMSG;<br /> String DisplayMSG;<br /> char RecChar;<br /> <br /> lcd.setCursor(0, 1);<br /> lcd.print("No Message!");<br /> <br /> if (Serial.available() > 0)<br /> {<br /> RecMSG = Serial.readString();<br /><br /> DisplayMSG = RecMSG.substring(0 , RecMSG.length()-1);<br /><br /> Serial.println(DisplayMSG);<br /> <br /> lcd.clear();<br /> lcd.setCursor(0, 0);<br /> lcd.print("Form to TX MSG:");<br /> <br /> lcd.setCursor(0, 1);<br /> lcd.print("MSG:");<br /> <br /> lcd.setCursor(4, 1);<br /> lcd.print(DisplayMSG);<br /> <br /> delay(5000);<br /> <br /> }<br />}<br />Anonymoushttps://www.blogger.com/profile/15863042178577126086noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-77606066220431572932018-12-23T13:28:38.339+08:002018-12-23T13:28:38.339+08:00您是否使用 Arduino IDE 1.6.1 或以前版本呢? 請改用 1.6.2 或之後的版本試試...您是否使用 Arduino IDE 1.6.1 或以前版本呢? 請改用 1.6.2 或之後的版本試試看.小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-44502172180308013672018-12-18T19:43:56.838+08:002018-12-18T19:43:56.838+08:00您好
一直被SERIAL_RX_BUFFER_SIZE困擾
不論是在標頭檔更改 #define SE...您好<br />一直被SERIAL_RX_BUFFER_SIZE困擾<br />不論是在標頭檔更改 #define SERIAL_RX_BUFFER_SIZE 512<br />或是在程式碼內定義 <br />接收仍就維持64 byte <br /><br />傳輸00~40 共80 byte,僅會輸出00~32 (64 byte)<br />請問我到底錯在哪呢 謝謝。 <br /><br />#define SERIAL_TX_BUFFER_SIZE 512<br />#define SERIAL_RX_BUFFER_SIZE 512<br />void setup() <br />{<br /> Serial.begin(115200);<br /><br />}<br />int i=0;<br />int Data_count=0;<br />char Data[300];<br /><br />void loop()<br />{ <br /> if(Serial.available()> 0)<br /> {<br /> while (Serial.available() ) <br /> {<br /> Data[Data_count]= Serial.read();<br /> Data_count++;<br /> delay(20); <br /> } <br /> Serial.println(Data_count); //查看收到資料數量<br /> for(i=0;i<Data_count;i++){Serial.print(Data[i]);} //輸出 <br /> Data_count=0; <br /> }<br /> <br />}阿倫巴巴https://www.blogger.com/profile/17159116482478477474noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-51271291344313511442018-08-11T09:50:08.414+08:002018-08-11T09:50:08.414+08:00作者已經移除這則留言。Anonymoushttps://www.blogger.com/profile/18224899000477080594noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-63267871604513770132018-06-24T13:13:33.472+08:002018-06-24T13:13:33.472+08:00只要執行一次的就放在 setup() 中, 重複執行的放 loop() 裡只要執行一次的就放在 setup() 中, 重複執行的放 loop() 裡小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-55175545825790147792018-06-24T13:07:42.203+08:002018-06-24T13:07:42.203+08:00Hi, 您可以試試看這樣寫 :
int aa, cc;
void setup(){
Seria...Hi, 您可以試試看這樣寫 :<br /><br />int aa, cc;<br />void setup(){<br /> Serial.begin(9600);<br /> aa=analongRead(A0)'<br /> if (aa < 100) {Serial.println(aa);}<br /> else {Serial.println("aa:NG");}<br /> }<br /><br />void loop(){<br /> int cc=analongRead(A0);<br /> If (cc < 100){Serial.println(cc);} <br /> else {Serial.println("cc:NG");}<br /> delay(1000);<br /> }小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-51202898148294624792018-06-20T22:49:55.491+08:002018-06-20T22:49:55.491+08:00不好意思,在此補充,希望是變數aa 讀到第一次值後
就為固定值不要被刷新,而變數cc是analogR...不好意思,在此補充,希望是變數aa 讀到第一次值後<br />就為固定值不要被刷新,而變數cc是analogRead(A0)需要一直讀值進來及刷新。Anonymoushttps://www.blogger.com/profile/08670206190942067746noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-2962295345868892202018-06-20T22:28:27.229+08:002018-06-20T22:28:27.229+08:00您好,可否再請教:
void setup(){
Serial.begin(9600);
}...您好,可否再請教:<br />void setup(){<br /> Serial.begin(9600);<br />}<br /><br />void loop(){<br /> Int aa;<br /> Int cc=analongRead(A0);<br /> If (cc<100){<br /><br /> aa=cc;<br /> Serial.println(aa);<br />} else {<br /><br /> Serial.println("NG");<br />}<br />delay(1000);<br />}<br /><br /><br /><br />請教 當變數cc 值小於100 ,變數aa=cc<br />假設讀到cc值為 95,當下aa值也會等於95。<br />當下一秒讀到cc值為86,aa值也變為86。<br />又在下一秒aa值又被刷新.<br />我想請教有什麼方法或程式語法,<br />讓變數aa第一次讀到cc值後(小於100時),<br />就固定為第一次讀到的值95,<br />而不再讀下一秒及刷新數值。Anonymoushttps://www.blogger.com/profile/08670206190942067746noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-37153061504567775212018-06-19T14:56:46.209+08:002018-06-19T14:56:46.209+08:00非常感謝!非常感謝!Anonymoushttps://www.blogger.com/profile/08670206190942067746noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-22518077052696417172018-06-19T08:37:50.565+08:002018-06-19T08:37:50.565+08:00試試看這麼寫 (未測試) :
int sensor; //類比輸入讀取值
int button=...試試看這麼寫 (未測試) :<br /><br />int sensor; //類比輸入讀取值<br />int button=2; //按鈕輸入 <br />void setup() {<br /> pinMode(button, INPUT_PULLUP); //啟用提升電阻<br /> Serial.begin(9600); <br /> }<br /><br />void loop() {<br /> boolean buttonState=digitalRead(button);<br /> if (digitalRead(button)==HIGH) {<br /> Serial.println(analogRead(A0));<br /> }<br /> else {Serial.println(buttonState);}<br /> delay(1000); //每秒讀取一次<br /> }小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-81739806211801049672018-06-18T00:20:27.253+08:002018-06-18T00:20:27.253+08:00您好,可否請教一下,我用analogread()讀取感測器輸出(0~1023),但電路加入一個but...您好,可否請教一下,我用analogread()讀取感測器輸出(0~1023),但電路加入一個button,使得button被按下後,輸出的讀值是零(如tare/zero)功能。可否請較程式段該如何架構!<br />Anonymoushttps://www.blogger.com/profile/08670206190942067746noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-45657913944921807162018-05-20T16:04:22.110+08:002018-05-20T16:04:22.110+08:00不太理解您的意思, 送出字元只要如上文寫入 UART 埠即可. 不太理解您的意思, 送出字元只要如上文寫入 UART 埠即可. 小狐狸事務所https://www.blogger.com/profile/09435160519044041137noreply@blogger.comtag:blogger.com,1999:blog-4877487320781767952.post-41715075010687738612018-05-19T09:09:41.856+08:002018-05-19T09:09:41.856+08:00你好,該UARTt串列程式寫很久了,可否指導一下要如何寫?! 謝謝!!你好,該UARTt串列程式寫很久了,可否指導一下要如何寫?! 謝謝!!Anonymoushttps://www.blogger.com/profile/06540648258085315892noreply@blogger.com