標題: Arduino連接RS485觸摸屏 附程序 [打印本頁]
作者: lamyauhoi 時間: 2019-5-12 22:50
標題: Arduino連接RS485觸摸屏 附程序
從網上下載Arduino Modbus 程式庫, 下載到Arduino nano用QModbus試機正常。
然后在Arduino加上RS485小板,接到觸摸屏RS485試調0x,1x,3x,4x。
觸摸屏連接Arduino正常送數據了。
然后又加上一個DHT11,觸摸屏顯示溫度濕度。
分享給大家玩嚇!
制作出來的實物圖如下:
HMI_Arduino.jpg (61.83 KB, 下載次數: 168)
下載附件
2019-5-12 22:42 上傳
電路原理圖如下:
arduino_rs485.jpg (37.79 KB, 下載次數: 179)
下載附件
2019-5-12 22:35 上傳
HMI_PLC.JPG (22.53 KB, 下載次數: 179)
下載附件
2019-5-12 22:34 上傳
Arduino源程序如下:
- /**
- * Modbus slave example 2:
- * Thepurpose of this example is to link the Arduino digital and analog
- * pins to an external device.
- *
- * Recommended Modbus Master: QModbus
- *
- * Editado al español por LuxARTS由LuxARTS編輯為西班牙語
- */
- //-------------------------------------------------------------------------
- unsigned long previousMillis = 0; // will store last temp was read
- unsigned long currentMillis = 0;
- const long interval = 7000; // interval at which to readsensor
- #include <DHT.h>
- #define DHTPIN 12
- #define DHTTYPE DHT11
- DHT dht(DHTPIN,DHTTYPE);
- //-----------------------------------------------------------------------------
- //Incluye la librería del protocolo Modbus
- #include <ModbusRtu.h>
- #define ID 1
- //Crear instancia創建實例
- Modbus slave(ID, 0, 0); //ID del nodo. 0para el master, 1-247 para esclavo
- //節點的ID。 0表示主站,1-247表示從站
- //Puerto serie (0 = TX:1 - RX: 0)
- //串口(0 = TX:1 - RX:0)
- //Protocolo serie. 0para RS-232 + USB (default), cualquier pin mayor a 1 para RS-485
- //串行協議。 0表示RS-232 + USB(默認),任何大于1的引腳用于RS-485
- boolean led;
- int8_t state = 0;
- unsigned long tempus;
- uint16_t au16data[15]; //La tabla deregistros que se desea compartir por la red 要在共享的記錄表
- /*********************************************************
- Configuración del programa
- *********************************************************/
- void setup() {
- dht.begin();
- io_setup(); //configura las entradas y salidas配置輸入和輸出
- slave.begin(19200); //Abre la comunicación como esclavo作為奴通信
- tempus = millis() + 100; //Guarda el tiempo actual + 100ms保存當前時間+ 100ms
- digitalWrite(13, HIGH ); //Prende el led del pin 13 (el de la placa)打開引腳13的引腳(板上的引腳)
- }
- /*********************************************************
- Inicio del programa
- *********************************************************/
- void loop() {
- //Comprueba el buffer de entrada
- state = slave.poll( au16data, 15 ); //Parámetros: Tabla de registrospara el intercambio de info參數:信息交換的記錄表
- // Tamaño de la tabla de registros記錄表的大小
- //Devuelve0 si no hay pedido de datos如果沒有數據請求,則返回0
- //Devuelve1 al 4 si hubo error de comunicación如果存在通信錯誤,則返回1到4
- //Devuelvemas de 4 si se procesó correctamente el pedido如果訂單成功處理,則返回4個以上
- if(state > 4) { //Si es mayor a 4 = el pedido fué correcto如果大于4 =訂單是正確的
- tempus = millis() + 50; //Tiempo actual + 50ms當前時間+ 50ms
- digitalWrite(13, HIGH);//Prende el led打開LED
- }
- if(millis() > tempus) digitalWrite(13, LOW );//Apaga el led 50ms después之后關掉led 50ms
-
- //Actualizalos pines de Arduino con la tabla de Modbus使用Modbus表更新Arduino引腳
- io_poll();
- //----------------------------------------------------------------------
- currentMillis = millis();
- if(currentMillis - previousMillis >= interval)
- {
- previousMillis = currentMillis;
-
- int h = dht.readTemperature();
- int t = dht.readHumidity();
- if (isnan(t) || isnan(h))
- {
- delay(1);
- }
- else
- {
- au16data[11] = h;
- au16data[10] = t;
- delay(1);
- }
- }
- //--------------------------------------------------------------------
-
- }
- /**
- *pin maping:
- * 2- digital input
- * 3- digital input
- * 4- digital input
- * 5- digital input
- * 6- digital output
- * 7- digital output
- * 8- digital output
- * 9- digital output
- * 10- analog output
- * 11- analog output
- * 14- analog input
- * 15- analog input
- *
- *pin 13 reservado para ver el estado de la comunicación引腳13保留用于查看通信狀態
- */
- void io_setup() {
-
- pinMode(2, INPUT_PULLUP);
- pinMode(3, INPUT_PULLUP);
- pinMode(4, INPUT_PULLUP);
- pinMode(5, INPUT_PULLUP);
- pinMode(6, OUTPUT);
- pinMode(7,OUTPUT);
- pinMode(8, OUTPUT);
- pinMode(9, OUTPUT);
- pinMode(10, OUTPUT);
- pinMode(11, OUTPUT);
- pinMode(13, OUTPUT);
- digitalWrite(6, LOW );
- digitalWrite(7, LOW );
- digitalWrite(8, LOW );
- digitalWrite(9, LOW );
- digitalWrite(13, HIGH ); //Led del pin 13 de la placa板的引腳13的LED
- analogWrite(10, 0 ); //PWM 0%
- analogWrite(11, 0 ); //PWM 0%
- }
- /*********************************************************
- Enlaza la tabla de registros con los pines將記錄表與引腳鏈接
- *********************************************************/
- void io_poll() {
- //digital inputs -> au16data[0]
- //Lee las entradas digitales y las guarda en bits de la primera variable delvector讀取數字輸入并將其保存在向量的第一個變量的位中
- //(es lo mismo que hacer una máscara)(這和制作面具一樣)
- bitWrite( au16data[0], 0, digitalRead( 2 )); //Lee el pin 2 de Arduino ylo guarda en el bit 0 de la variable au16data[0]
- bitWrite( au16data[0], 1, digitalRead( 3 )); //讀取Arduino的引腳2并將其保存在變量au16data [0]的第0位
- bitWrite( au16data[0], 2, digitalRead( 4 ));
- bitWrite(au16data[0], 3, digitalRead( 5 ));
- //digital outputs -> au16data[1]
- //Lee los bits de la segunda variable y los pone en las salidas digitales讀取第二個變量的位并將它們放入數字輸出中
- digitalWrite( 6, bitRead( au16data[1], 0 )); //Lee el bit 0 de lavariable au16data[1] y lo pone en el pin 6 de Arduino
- digitalWrite( 7, bitRead( au16data[1], 1 )); //讀取變量au16data [1]的第0位并將其放在Arduino的第6引腳上
- digitalWrite( 8, bitRead( au16data[1], 2 ));
- digitalWrite( 9, bitRead( au16data[1], 3 ));
- //Cambia el valor del PWM更改PWM的值
- 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%)
- analogWrite( 11, au16data[3] ); //au16data [2]的值寫入Arduino引腳10的PWM輸出。 (0 = 0%,255 = 100%)
- //Lee las entradas analógicas (ADC)讀取模擬輸入(ADC)
- au16data[4] = analogRead( 0 ); //El valor analógico leido en el pin A0se guarda en au16data[4]. (siendo 0=0v y 1023=5v)
- au16data[5] = analogRead( 1 ); //在引腳A0上讀取的模擬值存儲在au16data [4]中。 (0 = 0v和1023 = 5v)
- //Diagnóstico de la comunicación (para debug)通信診斷(用于調試)
- au16data[6] = slave.getInCnt(); //Devuelve cuantos mensajes se recibieron返回收到的消息數
- au16data[7] = slave.getOutCnt(); //Devuelve cuantos mensajes setransmitieron返回傳輸的消息數
- au16data[8] = slave.getErrCnt(); //Devuelve cuantos errores hubieron返回有多少錯誤
- }
復制代碼
全部資料51hei下載地址:
Modbus-Master-Slave-for-Arduino-master.zip
(200.82 KB, 下載次數: 199)
2019-5-12 23:17 上傳
點擊文件名下載附件
Arduino_Modbus
下載積分: 黑幣 -5
作者: cuixiaodong 時間: 2019-7-6 14:39
樓主有聯系方式嗎?關于觸摸屏和arduino,可以指點一下嗎?有償!!!!
作者: cuixiaodong 時間: 2019-7-6 18:37
樓主大大,想請教一下你用arduino nano和電腦是怎么連線測試的?
作者: lamyauhoi 時間: 2019-7-9 11:02
下載Arduino Modbus 程式庫, 下載到Arduino nano用QModbus試機。
然后在Arduino加上RS485小板,接到觸摸屏RS485試調0x,1x,3x,4x。
作者: weidoit 時間: 2019-8-23 16:34
Kinco HMIware + Proteus ,純軟件仿真通過。
作者: weidoit 時間: 2019-8-23 22:18
一、HMI仿真畫面
001.png (190.15 KB, 下載次數: 461)
下載附件
2019-8-23 22:15 上傳
二、AD采集電路
002.png (7.55 KB, 下載次數: 176)
下載附件
2019-8-23 22:15 上傳
三、PWM信號輸出波形
003.png (129.58 KB, 下載次數: 172)
下載附件
2019-8-23 22:15 上傳
四、數字輸入、數字輸出、DHT11傳感器電路
004.png (16.55 KB, 下載次數: 164)
下載附件
2019-8-23 22:15 上傳
作者: lamyauhoi 時間: 2019-8-26 15:40
GOOOOOD!!!!!
51黑有你更精彩!!!
作者: pyramidlei 時間: 2019-9-17 08:40
非常好!!看到這篇文章的時候,我感覺51黑電子論壇真是太強大了!!arduino好多人都是拿它來玩玩或者練手,而HMI和PLC的結合才是運用到工業上的。去年的時候,我要做一個輥軸表面溫度檢測的項目,最后選擇了非接觸紅外傳感器MLX90614,但它與PLC的連接卻比較麻煩,而和ARDUINO的連接卻非常方便。用arduinor編寫PID算法也很好用(感覺比PLC自帶的PID好用得多)。當時就想著要是arduino如果能直接跟HMI通訊就更完美了!
作者: 難得糊涂2018 時間: 2019-9-17 19:33
可以和觸摸屏通訊?z真的可以?
作者: 難得糊涂2018 時間: 2019-9-19 20:23
這個好,有空也試一下
作者: pyramidlei 時間: 2019-9-22 09:04
前輩你好,觸摸屏上的寄存器如何定義?我想把arduino上獲得的溫度顯示到屏上。謝謝
作者: lamyauhoi 時間: 2019-9-25 09:32
有觸摸屏資料。
-
-
Modbus_Kinco_Arduino.rar
2019-9-25 09:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
6.03 MB, 下載次數: 76, 下載積分: 黑幣 -5
作者: HGQ21102 時間: 2019-11-10 12:06
樓主,好像地址號,不能從0號開始了,如16功能號,digitalWrite( 6, bitRead( au16data[1], 0 ));這個,就得從地址號16號開始的,不能修改嗎?
作者: 難得糊涂2018 時間: 2019-11-27 18:48
學習了。謝謝分享@
作者: 拿起遺落的時光 時間: 2019-11-28 12:22
樓主這個好
作者: tainyankeji 時間: 2019-11-29 03:28
不錯不錯
作者: djr1667 時間: 2019-12-4 11:01
給力!謝謝大佬!
作者: slsd 時間: 2019-12-4 18:53
真的太好了!非常感謝。
作者: saek10010 時間: 2020-1-3 10:00
感謝樓主
作者: xinfan 時間: 2020-1-5 08:31
真的太好了!非常感謝。
作者: 112537642 時間: 2020-3-15 17:05
想用ARUDUINO獲取幾個溫度然后用力控通過rtu訪問
作者: dlct 時間: 2020-7-7 18:43
UNO的板子可以通用程序嗎?新手小白,求助
作者: phoony 時間: 2020-7-18 09:21
大家有modbus庫么?麻煩發一份給,我從軟件上下載的相關庫都報錯了,謝謝哦!
-
搜狗截圖20200718092007.jpg
(67.21 KB, 下載次數: 208)
下載附件
2020-7-18 09:20 上傳
報錯內容
作者: lamyauhoi 時間: 2020-7-23 11:56
在這里有!!!
全部資料51hei下載地址:
Modbus-Master-Slave-for-Arduino-master.zip (200.82 KB,下載次數:73)
作者: gxw846 時間: 2022-7-1 15:42
你好 最近在弄步科觸摸屏和Arduino通訊 可以交流一下嗎
作者: 奇怪的書 時間: 2022-7-14 09:35
樓主厲害啊
作者: 1978296499 時間: 2022-11-17 11:38
應該可以移植到non esp8266上面的
作者: xo37 時間: 2024-7-9 08:15
Arduino 還是可以的,就是移植的時候,得把底層庫搞一下
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
日本中出视频
|
日韩欧美在线一区二区
|
日韩精品一区二区三区中文字幕
|
一区二区中文字幕
|
国产一区二区精品在线
|
国产福利二区
|
性国产丰满麻豆videosex
|
久久涩涩
|
男女羞羞视频在线看
|
欧美亚洲国产日韩
|
91中文字幕在线观看
|
一区二区三区在线免费观看视频
|
天天爱爱网
|
午夜男人的天堂
|
天堂一区在线观看
|
91精品久久久久久久
|
成人欧美一区二区三区1314
|
91视频大全
|
在线观看亚洲一区二区
|
国产精品日韩欧美一区二区三区
|
日本欧美在线观看视频
|
日韩精品一区二区三区
|
天堂免费看片
|
国产精品久久久久久久久久久免费看
|
羞羞网站在线观看
|
国产一区二区三区久久久久久久久
|
在线国产一区
|
www.一区二区三区.com
|
日本一区二区高清视频
|
日韩视频免费看
|
日韩免费视频一区二区
|
成年免费大片黄在线观看岛国
|
在线看av的网址
|
亚洲国产精品久久
|
伊人操|
中文字幕在线观看www
|
久久网一区二区
|
成人性视频免费网站
|
伊人色综合久久天天五月婷
|
激情欧美一区二区三区中文字幕
|
精品一区二区电影
|