xser1998 (Xser1998) February 17, 2021, 6:23am #1
aduino mega2560 + xy-md02 Modbus RTU rs485 มีพี่ๆคนใหนเคยเล่นใหมครับ ผมติดอยู่นี่มาเป็นอาทิตย์ละ ช่วยแนะนำด้วยครับ (มือใหม่หัดเล่นครับ**ขอบคุณล้วงหน้าครับ)
xser1998 (Xser1998) February 17, 2021, 6:23am #1
aduino mega2560 + xy-md02 Modbus RTU rs485 มีพี่ๆคนใหนเคยเล่นใหมครับ ผมติดอยู่นี่มาเป็นอาทิตย์ละ ช่วยแนะนำด้วยครับ (มือใหม่หัดเล่นครับ**ขอบคุณล้วงหน้าครับ)
Remy_Martin (Permpol Thanapunnamas) February 17, 2021, 7:17am #2
หนึ่งอาทิตย์นี้
1.ได้อะไรไปบ้าง
2.ทำอะไรบ้าง
3.ติดปัญหาจุดไหน
อธิบายหน่อยครับ
xser1998 (Xser1998) February 19, 2021, 6:25am #3
โค้ดเสร็จแล้วครับแต่พออัพลงบอร์ดแล้วไม่มีค่าใดๆส่งมาเลยครับ และ[k’8iyh’ติดปัญหา error serial2 ด้วยครับ
#include <SoftwareSerial.h> #include <HardwareSerialRS485.h> #include <MessageReader.h> include <ArduinoModbus.h> เข้ามาแล้วก็ยัง error เหมือนเดิมครับ
Remy_Martin (Permpol Thanapunnamas) February 21, 2021, 12:00pm #4
copy error เต็มมาดูหน่อย
Remy_Martin (Permpol Thanapunnamas) February 21, 2021, 5:05pm #5
ที่เคยผ่านตา
xser1998 (Xser1998) February 22, 2021, 5:09pm #6
C:\Users\PY_art\Documents\Arduino\sketch_feb22a\sketch_feb22a.ino: In function 'void setup()':
sketch_feb22a:45:41: error: no matching function for call to 'HardwareSerial::begin(int, int, int, int)'
Serial2.begin(9600, SERIAL_8N1, 18, 19); // Rx, Tx
^
In file included from C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:233:0,
from sketch\sketch_feb22a.ino.cpp:1:
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/HardwareSerial.h:121:10: note: candidate: void HardwareSerial::begin(long unsigned int)
void begin(unsigned long baud) { begin(baud, SERIAL_8N1); }
^~~~~
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/HardwareSerial.h:121:10: note: candidate expects 1 argument, 4 provided
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/HardwareSerial.h:122:10: note: candidate: void HardwareSerial::begin(long unsigned int, uint8_t)
void begin(unsigned long, uint8_t);
^~~~~
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.42.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/HardwareSerial.h:122:10: note: candidate expects 2 arguments, 4 provided
exit status 1
no matching function for call to 'HardwareSerial::begin(int, int, int, int)'
Remy_Martin (Permpol Thanapunnamas) February 22, 2021, 5:16pm #7
ต้องวางโค้ตหลักมาดูจึงจะตอบได้ครับ
xser1998 (Xser1998) February 23, 2021, 4:33pm #8
#include <ModbusMaster.h>
#include <Arduino.h>
#include <SoftwareSerial.h>
#define DE_RE_PIN 7
#define MODE_SEND HIGH
#define MODE_RECV LOW
float temp = 0, humi = 0;
void readXY_MD02() {
uint8_t buff[] = {
0x01, // Devices Address
0x04, // Function code
0x00, // Start Address HIGH
0x01, // Start Address LOW
0x00, // Quantity HIGH
0x02, // Quantity LOW
0x20, // CRC LOW
0x0B // CRC HIGH
};
digitalWrite(DE_RE_PIN, MODE_SEND);
Serial2.write(buff, sizeof(buff));
Serial2.flush(); // wait send completed
digitalWrite(DE_RE_PIN, MODE_RECV);
if (Serial2.find("\x01\x04")) {
uint8_t n = Serial2.read();
if (n != 4) {
Serial.println("Error data size");
return;
}
temp = ((uint16_t)(Serial2.read() << 8) | Serial2.read()) / 10.0;
humi = ((uint16_t)(Serial2.read() << 8) | Serial2.read()) / 10.0;
} else {
Serial.println("ERROR Timeout");
return;
}
}
void setup() {
pinMode(DE_RE_PIN, OUTPUT);
digitalWrite(DE_RE_PIN, MODE_RECV);
Serial.begin(115200);
Serial2.begin(9600, SERIAL_8N1, 18, 19); // Rx, Tx
Serial2.setTimeout(200);
}
void loop() {
readXY_MD02();
Serial.print("Temperature: ");
Serial.print(temp);
Serial.println(" *C");
Serial.print("Humidity: ");
Serial.print(humi);
Serial.println(" *C");
delay(500);
}
Remy_Martin (Permpol Thanapunnamas) February 23, 2021, 4:39pm #9
โค้ตที่ใช้มันผิดรึป่าวครับ ตัวอย่างใช้กับ arduino อันนี้คือตัวอย่างที่อยู่ต้อง
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for Native USB only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(38400);
mySerial.println("Hello, world?");
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
Open-source electronic prototyping platform enabling users to create interactive electronic objects.
อันนี้ HardwareSerial ตัวอย่างนี้ใช้กับ esp32
ตัวส่ง
#include <HardwareSerial.h>
HardwareSerial SerialTFMini( 1 );
HardwareSerial SerialBrain( 2 );
////// serial(1) = pin27=RX green, pin26=TX white
////// serial(2) = pin16=RXgreen , pin17=TX white
#define SerialDataBits 115200
void setup()
{
SerialBrain.begin( SerialDataBits );
SerialTFMini.begin( SerialDataBits, SERIAL_8N1, 27, 26 );
}
void fSendLIDAR_InfoSerialToBrain( void *pvParameters )
{
struct stu_LIDAR_INFO pxLIDAR_INFO;
for ( ;; )
{
xEventGroupWaitBits (eg, evtGetIMU, pdTRUE, pdTRUE, portMAX_DELAY);
xSemaphoreTake( sema_LIDAR_FOR_ALARM, xSemaphoreTicksToWait );
xQueueReceive ( xQ_LIDAR_FOR_ALARM, &pxLIDAR_INFO, QueueReceiveDelayTime );
xSemaphoreGive( sema_LIDAR_FOR_ALARM );
int CellCount = 1 ;
// send LIDAR info for alarm
String sSerial = "";
sSerial.reserve ( 300 );
sSerial.concat( "<#," ); //sentence begin
sSerial.concat( String(ScanPoints) + "," );
sSerial.concat( String(pxLIDAR_INFO.ServoSweepUp) + "," ); // get direction of scan
for ( CellCount; CellCount <= ScanPoints; CellCount++ )
{
sSerial.concat( String(pxLIDAR_INFO.Range[CellCount]) + "," );
}
sSerial.concat( ">" ); //sentence end
vTaskDelay( 10 );
SerialBrain.println ( sSerial );
}
vTaskDelete( NULL );
} // void fSendLIDAAR_InfoSerialToBrain( void *pvParameters )
ตัวรับ
void fReceiveSerial_LIDAR( void * parameters )
{
bool BeginSentence = false;
sSerial.reserve ( StringBufferSize300 );
char OneChar;
for ( ;; )
{
EventBits_t xbit = xEventGroupWaitBits (eg, evtReceiveSerial_LIDAR, pdTRUE, pdTRUE, portMAX_DELAY);
// vTaskDelayUntil( &xLastWakeTime, xFrequency );
if ( LIDARSerial.available() >= 1 )
{
while ( LIDARSerial.available() )
{
OneChar = LIDARSerial.read();
if ( BeginSentence )
{
if ( OneChar == '>')
{
if ( xSemaphoreTake( sema_ParseLIDAR_ReceivedSerial, xSemaphoreTicksToWait10 ) == pdTRUE )
{
xQueueOverwrite( xQ_LIDAR_Display_INFO, ( void * ) &sSerial );
xEventGroupSetBits( eg, evtParseLIDAR_ReceivedSerial );
//
}
BeginSentence = false;
break;
}
sSerial.concat ( OneChar );
}
else
{
if ( OneChar == '<' )
{
sSerial = ""; // clear string buffer
BeginSentence = true; // found begining of sentence
}
}
} // while ( LIDARSerial.available() )
} //if ( LIDARSerial.available() >= 1 )
xSemaphoreGive( sema_ReceiveSerial_LIDAR );
// Serial.print( "fReceiveSerial_LIDAR " );
// Serial.print(uxTaskGetStackHighWaterMark( NULL ));
// Serial.println();
// Serial.flush();
}
vTaskDelete( NULL );
} //void fParseSerial( void * parameters )
xser1998 (Xser1998) February 24, 2021, 3:40am #10
ถ้าติดต่อผ่าน Max485 ด้วยหล่ะครับ
Remy_Martin (Permpol Thanapunnamas) February 24, 2021, 6:01am #11
เคลียร์ที่ละประเด็นก่อนนะครับ อันที่ error นี้ได้หรือยัง
xser1998 (Xser1998) February 24, 2021, 6:17am #12
ได้แล้วครับ
Remy_Martin (Permpol Thanapunnamas) February 24, 2021, 6:44am #13
แก้ไขอย่างไรสรุปหน่อยครับ
xser1998 (Xser1998) February 25, 2021, 2:48am #14
ผมไล่โค้ดใหม่เกือบทั้งหมดเลยครับโดยใช้ตัวอย่างที่พี่ให้มาเป็นหลักครับบวกกับโค้ดในเว็บด้วยครับตอนนี้ get data เข้ามาแล้วครับแต่อุณหภูมิ ขึ้น 0.00 ตลอดเลยครับ เช็ค pin แล้วและลองไล่ดูโค้ดใหม่แล้วแต่ก็ยังไม่รู้ครับว่าพลาดตรงใหน
Remy_Martin (Permpol Thanapunnamas) February 25, 2021, 3:02pm #15
ขอดูโค้ตล่าสุดหน่อย
xser1998 (Xser1998) March 2, 2021, 2:10am #16
#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);
}
xser1998 (Xser1998) March 1, 2021, 8:34am #17
ขออภัยที่ตอบช้านะครับ
Remy_Martin (Permpol Thanapunnamas) March 2, 2021, 2:10am #18
ถ่ายการต่อ ฮาร์ดแวร์ มาดูหน่อยครับ
Remy_Martin (Permpol Thanapunnamas) April 24, 2021, 2:21pm #19
เป็นไงบ้างครับ กระทู้นี้อัพเดทกันหน่อย