voraches
(วรเชษฐ สะแหละ)
1
UV254-COD-with-wiper.pdf (1.3 MB)
สวัสดีครับ ขออนุญาติสอบถามเกี่ยวกับการใช้ Arduino อ่านค่าด้วย RS485 รายละเอียดตาม PDF ที่แนบครับ ปัญหาคือไม่สามารถดึงค่าได้ ผมเขียนโปรแกรมโดยก๊อปปี้ตัวอย่างเซ็นเซอร์ XY-MD02 มาเป็นตัวอย่าง เนื่องจากมีให้ดูเยอะบนอินเตอร์เน็ต ผมมีเซ็นเซนเซอร์ XY-MD02 ซึ่งทำแล้วได้ผล แต่พอแก้ไปอ่านเซนเซอร์ COD ดังไฟล์ PDF ที่แนบมา มันทำไม่ได้ครับ รบกวนชวยแนะนำทีครับ ด้านล่างคือโค๊ดที่ผมลองแก้มาครับ
#include <SoftwareSerial.h>
#include <ModbusMaster.h>
SoftwareSerial mySerial(2, 3); // RX, TX
#define MAX485_DE 4
#define MAX485_RE_NEG 5
ModbusMaster node;
void preTransmission()
{
digitalWrite(MAX485_RE_NEG, 1);
digitalWrite(MAX485_DE, 1);
}
void postTransmission()
{
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
}
void setup()
{
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
// Init in receive mode
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
Serial.println("start init serial 0");
Serial.begin(9600);
while (!Serial) {
Serial.println("loop for init serial 0"); // wait for serial port to connect. Needed for Native USB only
}
Serial.println("start init software serial");
mySerial.begin(9600);
while (!mySerial) {
Serial.println("loop for init software serial");
}
node.begin(0x01, mySerial);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
bool state = true;
void loop()
{
uint32_t result;
uint16_t data[2];
// // Toggle the coil at address 0x0002 (Manual Load Control)
// result = node.writeSingleCoil(0x0002, state);
// state = !state;
Serial.println("get data");
result = node.readInputRegisters(0x0040,2);
if (result == node.ku8MBSuccess)
{
Serial.print("COD: ");
Serial.println(node.getResponseBuffer(0x0002)/10.00f);
Serial.print("TOC: ");
Serial.println(node.getResponseBuffer(0x0004)/10.00f);
Serial.println();
}
delay(3000);
}
voraches
(วรเชษฐ สะแหละ)
3
#include <SoftwareSerial.h>
#include <ModbusMaster.h>
SoftwareSerial mySerial(17, 16); // RX, TX
#define MAX485_DE 7
#define MAX485_RE_NEG 7
ModbusMaster node;
void preTransmission()
{
digitalWrite(MAX485_RE_NEG, 1);
digitalWrite(MAX485_DE, 1);
}
void postTransmission()
{
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
}
void setup()
{
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
// Init in receive mode
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
Serial.println("start init serial 0");
Serial.begin(9600);
while (!Serial) {
Serial.println("loop for init serial 0"); // wait for serial port to connect. Needed for Native USB only
}
Serial.println("start init software serial");
mySerial.begin(9600);
while (!mySerial) {
Serial.println("loop for init software serial"); // wait for serial port to connect. Needed for Native USB only
}
// Modbus slave ID 1
node.begin(1, mySerial);
// Callbacks allow us to configure the RS485 transceiver correctly
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop()
{
uint8_t result;
uint16_t data[1]; // prepare variable of storage data from sensor
Serial.println("get data");
result = node.readInputRegisters(1, 2); // Read 2 registers starting at 1)
if (result == node.ku8MBSuccess)
{
Serial.print("Temp: ");
Serial.println(node.getResponseBuffer(0)/10.0f);
Serial.print("Humi: ");
Serial.println(node.getResponseBuffer(1)/10.0f);
}
delay(1000);
}
Remy_Martin
(Permpol Thanapunnamas)
4
จะอ่านเซ็นเซอร์พร้อมกัน 2 ตัว หรอ
voraches
(วรเชษฐ สะแหละ)
5
อ่านจาก COD sensor แค่ตัวเดียวครับ XY-MD02 ผมนำมาเป็นตัวอย่าง และลองเขียนตาม แต่ดึงค่าออกมาไม่ได้คับผม
Remy_Martin
(Permpol Thanapunnamas)
6
ผมดูจากตรงนี้ลองกำหนด address ให้ตรงและตัวเลขด้วย น่าจะใช้ทั้ง 2 อย่าง เพื่อดึงค่า อุณหภูมิมาอ่าน
#include <SoftwareSerial.h>
#include <ModbusMaster.h>
SoftwareSerial mySerial(2, 3); // RX, TX
#define MAX485_DE 4
#define MAX485_RE_NEG 5
ModbusMaster node;
void preTransmission()
{
digitalWrite(MAX485_RE_NEG, 1);
digitalWrite(MAX485_DE, 1);
}
void postTransmission()
{
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
}
void setup()
{
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
// Init in receive mode
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
Serial.println("start init serial 0");
Serial.begin(9600);
while (!Serial) {
Serial.println("loop for init serial 0"); // wait for serial port to connect. Needed for Native USB only
}
Serial.println("start init software serial");
mySerial.begin(9600);
while (!mySerial) {
Serial.println("loop for init software serial");
}
node.begin(0x01, mySerial);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
bool state = true;
void loop()
{
uint32_t result;
uint16_t data[2];
// // Toggle the coil at address 0x0002 (Manual Load Control)
// result = node.writeSingleCoil(0x0002, state);
// state = !state;
Serial.println("get data");
result = node.readInputRegisters(0x0030,2); //แก้ตรงนี้
if (result == node.ku8MBSuccess)
{
Serial.print("COD: ");
Serial.println(node.getResponseBuffer(0x0002)/10.00f);
Serial.print("TOC: ");
Serial.println(node.getResponseBuffer(0x0004)/10.00f);
Serial.println();
}
delay(3000);
}
ลองดูผลหน่อยเป็นไงบ้าง
Remy_Martin
(Permpol Thanapunnamas)
7
สวัสดีครับผม เป็นไงบ้างเคสนี้อัพเดทกันหน่อยนะครับ