久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 26694|回復: 27
打印 上一主題 下一主題
收起左側

Arduino連接RS485觸摸屏 附程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:330820 發表于 2019-5-12 22:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

從網上下載
Arduino Modbus 程式庫, 下載到Arduino nanoQModbus試機正常。
然后在Arduino加上RS485小板,接到觸摸屏RS485試調0x,1x,3x,4x
觸摸屏連接Arduino正常送數據了。
然后又加上一個DHT11,觸摸屏顯示度濕度。
分享給大家玩嚇!

制作出來的實物圖如下:


電路原理圖如下:


Arduino源程序如下:
  1. /**
  2. * Modbus slave example 2:
  3. *  Thepurpose of this example is to link the Arduino digital and analog
  4. *    pins to an external device.
  5. *
  6. * Recommended Modbus Master: QModbus
  7. *
  8. * Editado al español por LuxARTS由LuxARTS編輯為西班牙語
  9. */
  10. //-------------------------------------------------------------------------
  11. unsigned long previousMillis = 0;        // will store last temp was read
  12. unsigned long currentMillis = 0;
  13. const long interval = 7000;              // interval at which to readsensor
  14. #include <DHT.h>
  15. #define DHTPIN 12   
  16. #define DHTTYPE DHT11
  17. DHT dht(DHTPIN,DHTTYPE);
  18. //-----------------------------------------------------------------------------
  19. //Incluye la librería del protocolo Modbus
  20. #include <ModbusRtu.h>
  21. #define ID  1
  22. //Crear instancia創建實例
  23. Modbus slave(ID, 0, 0); //ID del nodo. 0para el master, 1-247 para esclavo
  24.                         //節點的ID。 0表示主站,1-247表示從站
  25.                         //Puerto serie (0 = TX:1 - RX: 0)
  26.                         //串口(0 = TX:1 -  RX:0)
  27.                         //Protocolo serie. 0para RS-232 + USB (default), cualquier pin mayor a 1 para RS-485
  28.                         //串行協議。 0表示RS-232 + USB(默認),任何大于1的引腳用于RS-485
  29. boolean led;
  30. int8_t state = 0;
  31. unsigned long tempus;
  32. uint16_t au16data[15]; //La tabla deregistros que se desea compartir por la red 要在共享的記錄表
  33. /*********************************************************
  34. Configuración del programa
  35. *********************************************************/
  36. void setup() {
  37.   dht.begin();
  38. io_setup(); //configura las entradas y salidas配置輸入和輸出
  39. slave.begin(19200); //Abre la comunicación como esclavo作為奴通信
  40. tempus = millis() + 100; //Guarda el tiempo actual + 100ms保存當前時間+ 100ms
  41. digitalWrite(13, HIGH ); //Prende el led del pin 13 (el de la placa)打開引腳13的引腳(板上的引腳)
  42. }
  43. /*********************************************************
  44. Inicio del programa
  45. *********************************************************/
  46. void loop() {
  47. //Comprueba el buffer de entrada
  48. state = slave.poll( au16data, 15 ); //Parámetros: Tabla de registrospara el intercambio de info參數:信息交換的記錄表
  49.                                      //            Tamaño de la tabla de registros記錄表的大小
  50.                                      //Devuelve0 si no hay pedido de datos如果沒有數據請求,則返回0
  51.                                      //Devuelve1 al 4 si hubo error de comunicación如果存在通信錯誤,則返回1到4
  52.                                      //Devuelvemas de 4 si se procesó correctamente el pedido如果訂單成功處理,則返回4個以上
  53.   if(state > 4) { //Si es mayor a 4 = el pedido fué correcto如果大于4 =訂單是正確的
  54.    tempus = millis() + 50; //Tiempo actual + 50ms當前時間+ 50ms
  55.    digitalWrite(13, HIGH);//Prende el led打開LED
  56.   }
  57.   if(millis() > tempus) digitalWrite(13, LOW );//Apaga el led 50ms después之后關掉led 50ms
  58.   
  59.   //Actualizalos pines de Arduino con la tabla de Modbus使用Modbus表更新Arduino引腳
  60. io_poll();
  61. //----------------------------------------------------------------------
  62.         currentMillis = millis();
  63.          if(currentMillis - previousMillis >= interval)
  64.          {                                             
  65.          previousMillis = currentMillis;   
  66.         
  67.       int h = dht.readTemperature();
  68.       int t = dht.readHumidity();
  69.          if (isnan(t) || isnan(h))
  70.             {
  71.            delay(1);
  72.               }
  73.           else
  74.            {
  75.             au16data[11] = h;
  76.             au16data[10] = t;
  77.            delay(1);
  78.             }
  79.          }      
  80. //--------------------------------------------------------------------
  81.   
  82. }
  83. /**
  84. *pin maping:
  85. * 2- digital input
  86. * 3- digital input
  87. * 4- digital input
  88. * 5- digital input
  89. * 6- digital output
  90. * 7- digital output
  91. * 8- digital output
  92. * 9- digital output
  93. * 10- analog output
  94. * 11- analog output
  95. * 14- analog input
  96. * 15- analog input
  97. *
  98. *pin 13 reservado para ver el estado de la comunicación引腳13保留用于查看通信狀態
  99. */
  100. void io_setup() {
  101.   
  102. pinMode(2, INPUT_PULLUP);
  103. pinMode(3, INPUT_PULLUP);
  104. pinMode(4, INPUT_PULLUP);
  105. pinMode(5, INPUT_PULLUP);
  106. pinMode(6, OUTPUT);
  107.   pinMode(7,OUTPUT);
  108. pinMode(8, OUTPUT);
  109. pinMode(9, OUTPUT);
  110. pinMode(10, OUTPUT);
  111. pinMode(11, OUTPUT);
  112. pinMode(13, OUTPUT);
  113. digitalWrite(6, LOW );
  114. digitalWrite(7, LOW );
  115. digitalWrite(8, LOW );
  116. digitalWrite(9, LOW );
  117. digitalWrite(13, HIGH ); //Led del pin 13 de la placa板的引腳13的LED
  118. analogWrite(10, 0 ); //PWM 0%
  119. analogWrite(11, 0 ); //PWM 0%
  120. }
  121. /*********************************************************
  122. Enlaza la tabla de registros con los pines將記錄表與引腳鏈接
  123. *********************************************************/
  124. void io_poll() {
  125.   //digital inputs -> au16data[0]
  126.   //Lee las entradas digitales y las guarda en bits de la primera variable delvector讀取數字輸入并將其保存在向量的第一個變量的位中
  127.   //(es lo mismo que hacer una máscara)(這和制作面具一樣)
  128. bitWrite( au16data[0], 0, digitalRead( 2 )); //Lee el pin 2 de Arduino ylo guarda en el bit 0 de la variable au16data[0]
  129. bitWrite( au16data[0], 1, digitalRead( 3 )); //讀取Arduino的引腳2并將其保存在變量au16data [0]的第0位
  130. bitWrite( au16data[0], 2, digitalRead( 4 ));
  131.   bitWrite(au16data[0], 3, digitalRead( 5 ));
  132.   //digital outputs -> au16data[1]
  133.   //Lee los bits de la segunda variable y los pone en las salidas digitales讀取第二個變量的位并將它們放入數字輸出中
  134. digitalWrite( 6, bitRead( au16data[1], 0 )); //Lee el bit 0 de lavariable au16data[1] y lo pone en el pin 6 de Arduino
  135. digitalWrite( 7, bitRead( au16data[1], 1 )); //讀取變量au16data [1]的第0位并將其放在Arduino的第6引腳上
  136. digitalWrite( 8, bitRead( au16data[1], 2 ));
  137. digitalWrite( 9, bitRead( au16data[1], 3 ));
  138.   //Cambia el valor del PWM更改PWM的值
  139. analogWrite( 10, au16data[2] ); //El valor de au16data[2] se escribe enla salida de PWM del pin 10 de Arduino. (siendo 0=0% y 255=100%)
  140. analogWrite( 11, au16data[3] ); //au16data [2]的值寫入Arduino引腳10的PWM輸出。 (0 = 0%,255 = 100%)
  141.   //Lee las entradas analógicas (ADC)讀取模擬輸入(ADC)
  142. au16data[4] = analogRead( 0 ); //El valor analógico leido en el pin A0se guarda en au16data[4]. (siendo 0=0v y 1023=5v)
  143. au16data[5] = analogRead( 1 ); //在引腳A0上讀取的模擬值存儲在au16data [4]中。 (0 = 0v和1023 = 5v)
  144.   //Diagnóstico de la comunicación (para debug)通信診斷(用于調試)
  145. au16data[6] = slave.getInCnt(); //Devuelve cuantos mensajes se recibieron返回收到的消息數
  146. au16data[7] = slave.getOutCnt(); //Devuelve cuantos mensajes setransmitieron返回傳輸的消息數
  147. au16data[8] = slave.getErrCnt(); //Devuelve cuantos errores hubieron返回有多少錯誤
  148. }
復制代碼

全部資料51hei下載地址:
Modbus-Master-Slave-for-Arduino-master.zip (200.82 KB, 下載次數: 199)

評分

參與人數 3黑幣 +75 收起 理由
luliang02003 + 15
weidoit + 10 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏15 分享淘帖 頂3 踩
回復

使用道具 舉報

沙發
ID:340816 發表于 2019-7-6 14:39 | 只看該作者
樓主有聯系方式嗎?關于觸摸屏和arduino,可以指點一下嗎?有償!!!!
回復

使用道具 舉報

板凳
ID:340816 發表于 2019-7-6 18:37 | 只看該作者
樓主大大,想請教一下你用arduino nano和電腦是怎么連線測試的?
回復

使用道具 舉報

地板
ID:330820 發表于 2019-7-9 11:02 | 只看該作者
cuixiaodong 發表于 2019-7-6 18:37
樓主大大,想請教一下你用arduino nano和電腦是怎么連線測試的?

下載Arduino Modbus 程式庫, 下載到Arduino nano用QModbus試機。

然后在Arduino加上RS485小板,接到觸摸屏RS485試調0x,1x,3x,4x。
回復

使用道具 舉報

5#
ID:149389 發表于 2019-8-23 16:34 | 只看該作者
Kinco HMIware + Proteus ,純軟件仿真通過。
回復

使用道具 舉報

6#
ID:149389 發表于 2019-8-23 22:18 | 只看該作者
一、HMI仿真畫面
二、AD采集電路


三、PWM信號輸出波形

四、數字輸入、數字輸出、DHT11傳感器電路





回復

使用道具 舉報

7#
ID:330820 發表于 2019-8-26 15:40 | 只看該作者
GOOOOOD!!!!!
51黑有你更精彩!!!
回復

使用道具 舉報

8#
ID:405825 發表于 2019-9-17 08:40 | 只看該作者
非常好!!看到這篇文章的時候,我感覺51黑電子論壇真是太強大了!!arduino好多人都是拿它來玩玩或者練手,而HMI和PLC的結合才是運用到工業上的。去年的時候,我要做一個輥軸表面溫度檢測的項目,最后選擇了非接觸紅外傳感器MLX90614,但它與PLC的連接卻比較麻煩,而和ARDUINO的連接卻非常方便。用arduinor編寫PID算法也很好用(感覺比PLC自帶的PID好用得多)。當時就想著要是arduino如果能直接跟HMI通訊就更完美了!
回復

使用道具 舉報

9#
ID:428400 發表于 2019-9-17 19:33 | 只看該作者
可以和觸摸屏通訊?z真的可以?
回復

使用道具 舉報

10#
ID:428400 發表于 2019-9-19 20:23 | 只看該作者
這個好,有空也試一下
回復

使用道具 舉報

11#
ID:405825 發表于 2019-9-22 09:04 | 只看該作者
前輩你好,觸摸屏上的寄存器如何定義?我想把arduino上獲得的溫度顯示到屏上。謝謝
回復

使用道具 舉報

12#
ID:330820 發表于 2019-9-25 09:32 | 只看該作者
pyramidlei 發表于 2019-9-22 09:04
前輩你好,觸摸屏上的寄存器如何定義?我想把arduino上獲得的溫度顯示到屏上。謝謝

有觸摸屏資料。

Modbus_Kinco_Arduino.rar

6.03 MB, 下載次數: 76, 下載積分: 黑幣 -5

回復

使用道具 舉報

13#
ID:50830 發表于 2019-11-10 12:06 | 只看該作者
樓主,好像地址號,不能從0號開始了,如16功能號,digitalWrite( 6, bitRead( au16data[1], 0 ));這個,就得從地址號16號開始的,不能修改嗎?
回復

使用道具 舉報

14#
ID:428400 發表于 2019-11-27 18:48 | 只看該作者
學習了。謝謝分享@
回復

使用道具 舉報

15#
ID:650686 發表于 2019-11-28 12:22 | 只看該作者
樓主這個好
回復

使用道具 舉報

16#
ID:652081 發表于 2019-11-29 03:28 | 只看該作者
不錯不錯
回復

使用道具 舉報

17#
ID:655699 發表于 2019-12-4 11:01 | 只看該作者
給力!謝謝大佬!
回復

使用道具 舉報

18#
ID:656167 發表于 2019-12-4 18:53 | 只看該作者
真的太好了!非常感謝。
回復

使用道具 舉報

19#
ID:675398 發表于 2020-1-3 10:00 | 只看該作者
感謝樓主
回復

使用道具 舉報

20#
ID:557635 發表于 2020-1-5 08:31 | 只看該作者
真的太好了!非常感謝。
回復

使用道具 舉報

21#
ID:708939 發表于 2020-3-15 17:05 | 只看該作者
想用ARUDUINO獲取幾個溫度然后用力控通過rtu訪問
回復

使用道具 舉報

22#
ID:758541 發表于 2020-7-7 18:43 | 只看該作者
UNO的板子可以通用程序嗎?新手小白,求助
回復

使用道具 舉報

23#
ID:801109 發表于 2020-7-18 09:21 | 只看該作者
大家有modbus庫么?麻煩發一份給,我從軟件上下載的相關庫都報錯了,謝謝哦!

搜狗截圖20200718092007.jpg (67.21 KB, 下載次數: 208)

報錯內容

報錯內容
回復

使用道具 舉報

24#
ID:330820 發表于 2020-7-23 11:56 | 只看該作者
在這里有!!!
全部資料51hei下載地址:
Modbus-Master-Slave-for-Arduino-master.zip (200.82 KB,下載次數:73)
回復

使用道具 舉報

25#
ID:514042 發表于 2022-7-1 15:42 | 只看該作者
weidoit 發表于 2019-8-23 22:18
一、HMI仿真畫面
二、AD采集電路

你好 最近在弄步科觸摸屏和Arduino通訊 可以交流一下嗎
回復

使用道具 舉報

26#
ID:873592 發表于 2022-7-14 09:35 | 只看該作者
樓主厲害啊
回復

使用道具 舉報

27#
ID:865842 發表于 2022-11-17 11:38 | 只看該作者
應該可以移植到non esp8266上面的
回復

使用道具 舉報

28#
ID:280298 發表于 2024-7-9 08:15 | 只看該作者
Arduino 還是可以的,就是移植的時候,得把底層庫搞一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人精品国产 | 午夜视频一区二区三区 | 国产精品视频在线播放 | 午夜av一区二区 | www.日日操 | 国产一区二区影院 | 天堂男人av | 九九热精品在线 | 在线国产一区二区 | 久久伊人一区 | 色综合区| 伊人导航| 欧美成人精品一区二区三区 | 欧美精品在线观看 | 国产人久久人人人人爽 | 午夜视频一区二区 | 国产精品免费一区二区三区 | 久在草 | 国产精品毛片一区二区三区 | 欧美激情区 | 欧美国产一区二区 | 亚洲精品专区 | 超碰导航 | 国产精品xxxx| 久久精品福利视频 | av男人的天堂在线 | 国产精品久久久久久久久久久久 | 最新日韩在线 | 久久99精品久久久久婷婷 | 福利二区| 91av大全 | 网站国产 | 国产精品久久久久久一级毛片 | 午夜精品久久久久久久 | 婷婷久久综合 | 天天操夜夜拍 | 亚洲一区二区三区 | 99国产精品久久久久老师 | 亚洲精品www | 成人影视网址 | 久久国产精品免费一区二区三区 |