我需要学位输出才能在 Arduino IDE 中读取
产品: 风向传感器 (SEN0482) 和 Controllino Maxi。
我尝试使用不同的代码从风向传感器获取任何形式的输出,但我唯一能得到的是“Fail 226”。这表明连接或读取传感器的代码可能存在问题。
这是我的代码:
#include <Controllino.h>
#include "ModbusMaster.h"
// Definer pins for RE og DE kontrol af RS485
const int rs485_re = 68; // Receiver Enable
const int rs485_de = 69; // Driver Enable
// Opret en instans af ModbusMaster klasse
ModbusMaster modbus;
void preTransmission() {
digitalWrite(rs485_re, LOW);
digitalWrite(rs485_de, HIGH);
}
void postTransmission() {
digitalWrite(rs485_re, HIGH);
digitalWrite(rs485_de, LOW);
}
void setup() {
// Initialiser pins for RS485 kontrol
pinMode(rs485_re, OUTPUT);
pinMode(rs485_de, OUTPUT);
// Sæt RE og DE til inaktiv tilstand (RE=HIGH, DE=LOW)
digitalWrite(rs485_re, HIGH);
digitalWrite(rs485_de, LOW);
// Start RS485 kommunikation på Serial1
Serial1.begin(9600); // Erstat med den korrekte baudrate for din enhed
modbus.begin(2, Serial1); // Angiv slave ID og brug Serial1 porten
// Definer preTransmission og postTransmission funktioner
modbus.preTransmission(preTransmission);
modbus.postTransmission(postTransmission);
// Start serielle kommunikation til debugging
Serial.begin(9600);
}
void loop() {
uint8_t result;
uint16_t windDirectionData[1]; // Array til at opbevare læste data
// Læs vindretningen fra Modbus enheden
result = modbus.readHoldingRegisters(0x0000, 1);
if (result == modbus.ku8MBSuccess) {
// Gem data fra responsbufferen
windDirectionData[0] = modbus.getResponseBuffer(0);
// Konverter data fra registret til en læsbar format
int windDirection = windDirectionData[0];
Serial.print("Vindretning (rå værdi): ");
Serial.print(windDirection);
Serial.print(". Dette svarer til ");
// Fortolkning af vindretningen
switch(windDirection) {
case 0: Serial.print("Nord"); break;
case 1: Serial.print("Nordøst-ved-Nord"); break;
case 2: Serial.print("Nordøst"); break;
case 3: Serial.print("Nordøst-ved-Øst"); break;
case 4: Serial.print("Øst"); break;
case 5: Serial.print("Sydøst-ved-Øst"); break;
case 6: Serial.print("Sydøst"); break;
case 7: Serial.print("Sydøst-ved-Syd"); break;
case 8: Serial.print("Syd"); break;
case 9: Serial.print("Sydvest-ved-Syd"); break;
case 10: Serial.print("Sydvest"); break;
case 11: Serial.print("Sydvest-ved-Vest"); break;
case 12: Serial.print("Vest"); break;
case 13: Serial.print("Nordvest-ved-Vest"); break;
case 14: Serial.print("Nordvest"); break;
case 15: Serial.print("Nordvest-ved-Nord"); break;
default: Serial.print("Ukendt retning"); break;
}
Serial.println(".");
} else {
Serial.print("Fejl ved læsning af Modbus data: ");
Serial.println(result);
}
delay(1000); // Vent 1 sekund før næste læsning
}
据我所知,您的大部分代码和配置似乎都是正确的。 尽管如此,你还是遇到了226(0xE2)错误,这个错误的含义是:从机响应超时。
一般来说,问题的根源有两种可能: