標(biāo)題: Arduino連接RS485觸摸屏 附程序 [打印本頁]

作者: lamyauhoi    時(shí)間: 2019-5-12 22:50
標(biāo)題: Arduino連接RS485觸摸屏 附程序

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

制作出來的實(shí)物圖如下:


電路原理圖如下:


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創(chuàng)建實(shí)例
  23. Modbus slave(ID, 0, 0); //ID del nodo. 0para el master, 1-247 para esclavo
  24.                         //節(jié)點(diǎn)的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.                         //串行協(xié)議。 0表示RS-232 + USB(默認(rèn)),任何大于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保存當(dāng)前時(shí)間+ 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參數(shù):信息交換的記錄表
  49.                                      //            Tamaño de la tabla de registros記錄表的大小
  50.                                      //Devuelve0 si no hay pedido de datos如果沒有數(shù)據(jù)請求,則返回0
  51.                                      //Devuelve1 al 4 si hubo error de comunicación如果存在通信錯(cuò)誤,則返回1到4
  52.                                      //Devuelvemas de 4 si se procesó correctamente el pedido如果訂單成功處理,則返回4個(gè)以上
  53.   if(state > 4) { //Si es mayor a 4 = el pedido fué correcto如果大于4 =訂單是正確的
  54.    tempus = millis() + 50; //Tiempo actual + 50ms當(dāng)前時(shí)間+ 50ms
  55.    digitalWrite(13, HIGH);//Prende el led打開LED
  56.   }
  57.   if(millis() > tempus) digitalWrite(13, LOW );//Apaga el led 50ms después之后關(guān)掉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保留用于查看通信狀態(tài)
  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讀取數(shù)字輸入并將其保存在向量的第一個(gè)變量的位中
  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讀取第二個(gè)變量的位并將它們放入數(shù)字輸出中
  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上讀取的模擬值存儲(chǔ)在au16data [4]中。 (0 = 0v和1023 = 5v)
  144.   //Diagnóstico de la comunicación (para debug)通信診斷(用于調(diào)試)
  145. au16data[6] = slave.getInCnt(); //Devuelve cuantos mensajes se recibieron返回收到的消息數(shù)
  146. au16data[7] = slave.getOutCnt(); //Devuelve cuantos mensajes setransmitieron返回傳輸?shù)南?shù)
  147. au16data[8] = slave.getErrCnt(); //Devuelve cuantos errores hubieron返回有多少錯(cuò)誤
  148. }
復(fù)制代碼

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

作者: cuixiaodong    時(shí)間: 2019-7-6 14:39
樓主有聯(lián)系方式嗎?關(guān)于觸摸屏和arduino,可以指點(diǎn)一下嗎?有償。。!
作者: cuixiaodong    時(shí)間: 2019-7-6 18:37
樓主大大,想請教一下你用arduino nano和電腦是怎么連線測試的?
作者: lamyauhoi    時(shí)間: 2019-7-9 11:02
cuixiaodong 發(fā)表于 2019-7-6 18:37
樓主大大,想請教一下你用arduino nano和電腦是怎么連線測試的?

下載Arduino Modbus 程式庫, 下載到Arduino nano用QModbus試機(jī)。

然后在Arduino加上RS485小板,接到觸摸屏RS485試調(diào)0x,1x,3x,4x。

作者: weidoit    時(shí)間: 2019-8-23 16:34
Kinco HMIware + Proteus ,純軟件仿真通過。
作者: weidoit    時(shí)間: 2019-8-23 22:18
一、HMI仿真畫面
二、AD采集電路


三、PWM信號(hào)輸出波形

四、數(shù)字輸入、數(shù)字輸出、DHT11傳感器電路






作者: lamyauhoi    時(shí)間: 2019-8-26 15:40
GOOOOOD!!!!!
51黑有你更精彩!!!
作者: pyramidlei    時(shí)間: 2019-9-17 08:40
非常好。】吹竭@篇文章的時(shí)候,我感覺51黑電子論壇真是太強(qiáng)大了。rduino好多人都是拿它來玩玩或者練手,而HMI和PLC的結(jié)合才是運(yùn)用到工業(yè)上的。去年的時(shí)候,我要做一個(gè)輥軸表面溫度檢測的項(xiàng)目,最后選擇了非接觸紅外傳感器MLX90614,但它與PLC的連接卻比較麻煩,而和ARDUINO的連接卻非常方便。用arduinor編寫PID算法也很好用(感覺比PLC自帶的PID好用得多)。當(dāng)時(shí)就想著要是arduino如果能直接跟HMI通訊就更完美了!
作者: 難得糊涂2018    時(shí)間: 2019-9-17 19:33
可以和觸摸屏通訊?z真的可以?
作者: 難得糊涂2018    時(shí)間: 2019-9-19 20:23
這個(gè)好,有空也試一下
作者: pyramidlei    時(shí)間: 2019-9-22 09:04
前輩你好,觸摸屏上的寄存器如何定義?我想把a(bǔ)rduino上獲得的溫度顯示到屏上。謝謝
作者: lamyauhoi    時(shí)間: 2019-9-25 09:32
pyramidlei 發(fā)表于 2019-9-22 09:04
前輩你好,觸摸屏上的寄存器如何定義?我想把a(bǔ)rduino上獲得的溫度顯示到屏上。謝謝

有觸摸屏資料。

Modbus_Kinco_Arduino.rar

6.03 MB, 下載次數(shù): 76, 下載積分: 黑幣 -5


作者: HGQ21102    時(shí)間: 2019-11-10 12:06
樓主,好像地址號(hào),不能從0號(hào)開始了,如16功能號(hào),digitalWrite( 6, bitRead( au16data[1], 0 ));這個(gè),就得從地址號(hào)16號(hào)開始的,不能修改嗎?
作者: 難得糊涂2018    時(shí)間: 2019-11-27 18:48
學(xué)習(xí)了。謝謝分享@
作者: 拿起遺落的時(shí)光    時(shí)間: 2019-11-28 12:22
樓主這個(gè)好
作者: tainyankeji    時(shí)間: 2019-11-29 03:28
不錯(cuò)不錯(cuò)
作者: djr1667    時(shí)間: 2019-12-4 11:01
給力!謝謝大佬!
作者: slsd    時(shí)間: 2019-12-4 18:53
真的太好了!非常感謝。
作者: saek10010    時(shí)間: 2020-1-3 10:00
感謝樓主
作者: xinfan    時(shí)間: 2020-1-5 08:31
真的太好了!非常感謝。
作者: 112537642    時(shí)間: 2020-3-15 17:05
想用ARUDUINO獲取幾個(gè)溫度然后用力控通過rtu訪問
作者: dlct    時(shí)間: 2020-7-7 18:43
UNO的板子可以通用程序嗎?新手小白,求助
作者: phoony    時(shí)間: 2020-7-18 09:21
大家有modbus庫么?麻煩發(fā)一份給,我從軟件上下載的相關(guān)庫都報(bào)錯(cuò)了,謝謝哦!

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

報(bào)錯(cuò)內(nèi)容

報(bào)錯(cuò)內(nèi)容

作者: lamyauhoi    時(shí)間: 2020-7-23 11:56
在這里有!!!
全部資料51hei下載地址:
Modbus-Master-Slave-for-Arduino-master.zip (200.82 KB,下載次數(shù):73)
作者: gxw846    時(shí)間: 2022-7-1 15:42
weidoit 發(fā)表于 2019-8-23 22:18
一、HMI仿真畫面
二、AD采集電路

你好 最近在弄步科觸摸屏和Arduino通訊 可以交流一下嗎
作者: 奇怪的書    時(shí)間: 2022-7-14 09:35
樓主厲害啊
作者: 1978296499    時(shí)間: 2022-11-17 11:38
應(yīng)該可以移植到non esp8266上面的
作者: xo37    時(shí)間: 2024-7-9 08:15
Arduino 還是可以的,就是移植的時(shí)候,得把底層庫搞一下




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1