การใช้งาน RS485

คือผมทำโปรเจคเรื่องการส่งข้อมูลผ่าน RS485 module โดยใช้บอร์ด Arduino Micro อ่านค่าอุณหภูมิแล้วส่งค่าผ่าน RS485 module ไปยังบอร์ด Arduino UNOR3 แล้วบอร์ด Arduino UNOR3 สั่งให้รีเลย์ทำงานและทำให้หลอดไฟติด ประเด็นมันอยู่ที่ ตัวบอร์ด Arduino Micro ส่งค่าผ่าน RS485 module มันส่งเป็น BIT มา จะมีวิธีไหนที่สามารถส่งข้อมูลมาตรงเลยเช่น วัดอุณหภูมิได้ 35.78 ก็ส่ง 35.78 มาเลย ไม่ใช่ส่งมาที่ละตัว หรือวิธีที่รับค่าแต่ละรอบแล้วเอามารวมกัน   ช่วยแนะนำหน่อยครับ
โค้ดตัวส่ง
#include "DHT.h"
DHT dht;
void setup()
{
  Serial.begin(9600);
  Serial1.begin(115200);
  pinMode(7, OUTPUT);
  digitalWrite(7, HIGH);
  Serial.println();
  Serial.println("Status\tTemperature (C)");
  dht.setup(2); // data pin 2
}
void loop()
{
digitalWrite(7, HIGH);
  delay(dht.getMinimumSamplingPeriod());
  float temperature = dht.getTemperature();
  Serial.print(dht.getStatusString());
  Serial.print(temperature,1);
  Serial1.println(temperature,1);
}
โค้ดตัวรับ
#include <math.h>
#include <i2c_t3.h>
#include "Adafruit_MCP23017.h"
float Settemp,errortemp,Sumerrortemp,Lasterrortemp,Differrortemp,Kp,Ki,Kd;
int PID_Fan;
int ch=0;
const int out1 = 8;
const int out2 = 9;
const int out3 = 10;
const int out4 = 11;
const int out5 = 12;
const int out6 = 13;
const int out7 = 14;
const int out8 = 15;
const int LS_PWM_1 = 20;
const int LS_EN_1 = 24;
Adafruit_MCP23017 mcp;
void lightSource(int ch_LS,bool status_LS,int value_LS)
{
  if(ch_LS == 1)
  {
    if(status_LS == 1)
    {
      digitalWrite(LS_EN_1, HIGH);
      analogWrite(LS_PWM_1, value_LS);
    }
    else
    {
      digitalWrite(LS_EN_1, LOW);
    }
  }}
void setup()
{

  Serial.begin(9600);
  Serial2.begin(115200);
  pinMode(7,OUTPUT);
  pinMode (13,OUTPUT);
  digitalWrite(7,LOW);
  pinMode(LS_PWM_1,OUTPUT);
  digitalWrite(LS_PWM_1,LOW);
  pinMode(LS_EN_1,OUTPUT);
  digitalWrite(LS_EN_1,LOW);
  Wire1.begin(I2C_MASTER, 0x20, I2C_PINS_29_30, I2C_PULLUP_INT, I2C_RATE_400);
  mcp.begin(0x20);
}

void loop()
{
   digitalWrite(7,LOW);
  //int Settemp = Serial.read();
////////////////////////////////////////
  if(Serial2.available()>0)
  {
    ch = Serial2.read();
    digitalWrite(13,HIGH);
    Serial.write(ch);
  }
////////////////////////////////
  float temp = ch ;
  Settemp = 33.0;
  Kp      = 1;
  Ki      = 20;
  Kd      = 8;
  errortemp = (Settemp - temp)*-1 ;
  PID_Fan = (errortemp*Kp)+(Sumerrortemp*Ki)+(Differrortemp*Kd);
  Sumerrortemp = Sumerrortemp + errortemp ;
  Differrortemp = Lasterrortemp - errortemp ;
  Lasterrortemp = errortemp ;
  if(PID_Fan > 255){
     PID_Fan = 255 ;
     mcp.digitalWrite(out8,LOW); }
  if(PID_Fan < 0)
     PID_Fan = 0 ;
  
  if(temp<Settemp-1){
  mcp.digitalWrite(out8,HIGH);
  }
  lightSource(1,1,PID_Fan);
  Serial.print("\t");
  Serial.print("Temperature (oC): ");
  Serial.println(temp, 2);
  Serial.print(errortemp, 2);
  Serial.print("\t");
  Serial.print(PID_Fan);
  Serial.print("\t");
  Serial.print("set temp");
  Serial.print(Settemp);
  Serial.print("\t");
  Serial.print("pin 2 : ");
  Serial.println(temp);
  delay(500);
}
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่