Что то меня последнее время ходить по внешним ссылкам напрягает. Вот вчера письмо из налоговой пришло с внешней ссылкой а там…
это не внешняя, это внутренняя, потому так и выразился, что ровно постом выше ТСу уже подсказал )))
Так “письма с налоговой” надо смотреть на Госуслугах только )))
ЗЫ я любопытный смотрю служебную информацию ещё, если не в лом
Я прям так и сделал
Спасибо) походу у меня одна и Пико убитая и возможно она мне Лору тогда и ушатала или я все ушатал.
Подключил к этой пике max485 и тоже не работает , хотя на уно все работает… Возможно пины опять не те , завтра проверю еще раз
нет времени гуглить, а туда засовывать пингвина еще не научились ?
может будет полезно
Снова нужна помощь
Данный скетч работает на уно
#include <ModbusMaster.h>
#include <SoftwareSerial.h>
// Пины для MAX485
#define MAX485_DE 4
#define MAX485_RE 5
#define RX_PIN 2
#define TX_PIN 3
// Создаем объект ModbusMaster
ModbusMaster node;
// Настройка SoftwareSerial для RS-485 связи
SoftwareSerial rs485Serial(RX_PIN, TX_PIN);
// Адреса регистров
const uint16_t concentration_address = 0x00; // Адрес концентрации
const uint16_t threshold1_address = 0x02; // Адрес порога 1
const uint16_t threshold2_address = 0x04; // Адрес порога 2
// Функции для отображения концентрации и порогов
void displayConcentration(uint16_t registers[]) {
if (registers == nullptr) {
Serial.println("Недостаточно данных для отображения концентрации");
return;
}
uint8_t byte1 = (registers[0] >> 8) & 0xFF;
uint8_t byte2 = registers[0] & 0xFF;
uint8_t byte3 = (registers[1] >> 8) & 0xFF;
uint8_t byte4 = registers[1] & 0xFF;
bool sign_bit = (byte1 >> 7) & 0x01;
uint8_t comma_position = byte1 & 0x07;
int32_t integer_part = (int32_t)byte2 * 10000L + (int32_t)byte3 * 10L + (byte4 >> 4);
int32_t decimal_part = (byte4 & 0x0F) * 100;
double value = integer_part + decimal_part / 10000.0;
value = sign_bit ? -value : value;
double divisor = 1.0;
for (uint8_t i = 0; i < comma_position; i++) {
divisor *= 10.0;
}
value /= divisor;
value = round(value * 100.0) / 100.0;
Serial.print("Концентрация: ");
Serial.println(value, 2);
}
void displayThreshold(uint16_t threshold, const char* thresholdName) {
Serial.print(thresholdName);
Serial.print(" - ");
Serial.println(threshold & 0xFF, HEX); // Выводим только младший байт
}
// Остальной код остаётся без изменений
void preTransmission() {
digitalWrite(MAX485_RE, HIGH);
digitalWrite(MAX485_DE, HIGH);
}
void postTransmission() {
digitalWrite(MAX485_RE, LOW);
digitalWrite(MAX485_DE, LOW);
}
void setup() {
Serial.begin(9600);
rs485Serial.begin(9600);
pinMode(MAX485_DE, OUTPUT);
pinMode(MAX485_RE, OUTPUT);
digitalWrite(MAX485_RE, LOW);
digitalWrite(MAX485_DE, LOW);
node.begin(1, rs485Serial);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop() {
uint8_t result;
uint16_t data[2];
result = node.readHoldingRegisters(concentration_address, 2);
if (result == node.ku8MBSuccess) {
data[0] = node.getResponseBuffer(0);
data[1] = node.getResponseBuffer(1);
Serial.println("Измеренное значение концентрации:");
displayConcentration(data);
} else {
Serial.print("Ошибка чтения концентрации. Код ошибки: ");
Serial.println(result, HEX);
}
result = node.readHoldingRegisters(threshold1_address, 1);
if (result == node.ku8MBSuccess) {
uint16_t threshold1 = node.getResponseBuffer(0);
displayThreshold(threshold1, "Порог 1");
} else {
Serial.print("Ошибка чтения первого порога. Код ошибки: ");
Serial.println(result, HEX);
}
result = node.readHoldingRegisters(threshold2_address, 1);
if (result == node.ku8MBSuccess) {
uint16_t threshold2 = node.getResponseBuffer(0);
displayThreshold(threshold2, "Порог 2");
} else {
Serial.print("Ошибка чтения второго порога. Код ошибки: ");
Serial.println(result, HEX);
}
delay(3000);
}
Беру обычную зеленую pi pico меняю лишь пины на
// Пины для MAX485
#define MAX485_DE 12
#define MAX485_RE 12
#define RX_PIN 9
#define TX_PIN 8
и ничего не работает
Ошибка чтения концентрации. Код ошибки: E0
Ошибка чтения первого порога. Код ошибки: E0
Ошибка чтения второго порога. Код ошибки: E0
Так же у меня на этой pico сейчас припаяна Лора если скетч записать на пинах
#define ss 7
#define rst 17
#define dio0 20
Она работает.
DE RE один и тот же пин?
Да, в статье так же делают, но на уно раздельные у меня были
Может опечатка в статье?
Вроде нет)
там правда скетч другой
#include <Arduino.h>
UART Serial2(8, 9, 0, 0); //tx rx
#define rs485_control_pin 12
void setup() {
Serial.begin(9600);
Serial2.begin(9600);
pinMode(rs485_control_pin,OUTPUT);
digitalWrite(rs485_control_pin,HIGH);
}
void loop() {
digitalWrite(rs485_control_pin,HIGH);
if(Serial.available() > 0){
int LED_CONTROL = Serial.read();
switch (LED_CONTROL){
case '1':
Serial2.println("1");
Serial.print("LED ON");
delay(100);
break;
case '0':
Serial2.println("0");
Serial.print("LED OFF");
delay(100);
break;
default:
Serial.println(" ");
break;
}
}
digitalWrite(rs485_control_pin,LOW);
if(Serial2.available()>0){
Serial.println(Serial2.readString());
}
delay(100);
}
Он кстати тоже ошибку при компиляции дает
sketch_oct23a.ino:2:1: error: ‘UART’ does not name a type
2 | UART Serial2(8, 9, 0, 0); //tx rx
| ^~~~
exit status 1
Compilation error: ‘UART’ does not name a type
Ps. у меня второе подключение не арудине, а сразу на газоанализатор к А В
Попробуйте вместо UART поставить HardwareSerial
тоже ошибка при компиляции ‘arduino::HardwareSerial Serial2’
2 | HardwareSerial Serial2(8, 9, 0, 0); //tx rx
| ^~~~~~~
In file included from C:\Users\roman\AppData\Local\Arduino15\packages\rp2040\hardware\rp2040\4.1.1\cores\rp2040/Arduino.h:128,
from C:\Users\roman\OneDrive\Изображения\sketch_oct23a\sketch_oct23a.ino:1:
C:\Users\roman\AppData\Local\Arduino15\packages\rp2040\hardware\rp2040\4.1.1\cores\rp2040/SerialUART.h:121:19: note: previous declaration as ‘SerialUART Serial2’
121 | extern SerialUART Serial2; // HW UART 1
| ^~~~~~~
exit status 1
Compilation error: conflicting declaration ‘arduino::HardwareSerial Serial2’
Ну вот, подсказывают же, что Serial2
уже объявлен, и он имеет тип SerialUART
it means that Serial2 has been declared already, so you can use it without a type, just Serial2
Почему у него в примере скетч не вызывает ошибок?)) все один в один и плата и скетч
А вы какой аддон для Расбери в ИДЕ установили?
Установил Raspberry Pi Pico , сейчас повторюсь у меня обычная pi pico зеленая)
Единственное , что с другого репозитория , а в статье советуют выбирать по пути Mbed OS RP2040 boards.
Спасибо, скорей всего в этом и проблема. Уже в понедельник проверю.
Нет, в статье как раз советуют другую