单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:22937|回复:26
打印上一主题下一主题

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, 下载次数: 190)

评分

黑币 +75
收起理由
+ 15
+ 10
很给力!
+ 50
共享资料的黑币奖励!

查看全部评分

沙发
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, 下载次数: 72, 下载积分: 黑币 -5

13#
ID:50830发表于 2019-11-10 12:06|只看该作者
楼主,好像地址号,不能从0号开始了,如16功能号,digitalWrite( 6, bitRead( au16data[1], 0 ));这个,就得从地址号16号开始的,不能修改吗?
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, 下载次数: 142)

报错内容

报错内容
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上面的

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网