Napisz program na adduino GIGA do połączenia PMS7003 zgłasza błąd
Compilation error: no matching function for call to 'arduino::UART::begin(int, long unsigned int, int, int)'
Błąd kompilacji no matching function for call to 'arduino::UART::begin(int, long unsigned int, int, int)'
wynika z nieprawidłowego wywołania funkcji begin()
dla obiektu UART w Arduino GIGA. Problemem jest przekazanie niewłaściwej liczby lub typu argumentów do tej funkcji. Aby poprawnie skonfigurować komunikację z czujnikiem PMS7003, należy użyć odpowiedniego portu szeregowego (np. Serial1
) i poprawnej sygnatury funkcji begin()
.
Arduino GIGA R1 WiFi korzysta z platformy STM32H7, która obsługuje wiele sprzętowych portów UART. W przypadku tej platformy funkcja begin()
dla obiektów UART wymaga dwóch argumentów:
9600
.SERIAL_8N1
(8 bitów danych, brak parzystości, 1 bit stopu).Błąd kompilacji wskazuje, że do funkcji begin()
przekazano cztery argumenty, co nie jest obsługiwane przez bibliotekę UART w Arduino GIGA.
Aby poprawnie skonfigurować komunikację z PMS7003:
Serial1
, Serial2
itp.begin()
z dwoma argumentami: prędkością transmisji i konfiguracją ramki UART.Poniżej znajduje się kompletny kod do obsługi czujnika PMS7003 na Arduino GIGA:
// Definicja portu UART dla PMS7003
#define PMS_UART Serial1 // Używamy Serial1 (GPIO18 - TX, GPIO19 - RX)
#define BAUD_RATE 9600 // Prędkość transmisji czujnika PMS7003
// Bufor na dane z czujnika
uint8_t buffer[32]; // Ramka danych PMS7003 ma 32 bajty
void setup() {
// Inicjalizacja portu szeregowego do komunikacji z komputerem
Serial.begin(115200);
while (!Serial); // Czekamy na otwarcie portu szeregowego
// Inicjalizacja portu szeregowego do komunikacji z PMS7003
PMS_UART.begin(BAUD_RATE, SERIAL_8N1);
delay(100); // Krótki czas na stabilizację
Serial.println("Rozpoczęcie komunikacji z PMS7003...");
}
void loop() {
// Sprawdzamy, czy są dostępne dane z PMS7003
if (PMS_UART.available() >= 32) { // Odczytujemy pełną ramkę danych
for (int i = 0; i < 32; i++) {
buffer[i] = PMS_UART.read(); // Odczytujemy bajty danych
}
// Walidacja nagłówka ramki (0x42, 0x4D)
if (buffer[0] == 0x42 && buffer[1] == 0x4D) {
// Wyciąganie stężenia PM2.5 i PM10
uint16_t pm25 = (buffer[12] << 8) + buffer[13]; // PM2.5 w μg/m³
uint16_t pm10 = (buffer[14] << 8) + buffer[15]; // PM10 w μg/m³
// Wyświetlenie wyników na monitorze szeregowym
Serial.print("PM2.5: ");
Serial.print(pm25);
Serial.print(" μg/m³, PM10: ");
Serial.print(pm10);
Serial.println(" μg/m³");
}
}
}
SoftwareSerial
, które mogą być mniej wydajne.SERIAL_8N1
oznacza 8 bitów danych, brak parzystości i 1 bit stopu. Jest to standardowa konfiguracja dla większości urządzeń UART.0x42
, 0x4D
) to nagłówek ramki, a kolejne zawierają dane pomiarowe.Błąd kompilacji wynikał z nieprawidłowego wywołania funkcji begin()
dla obiektu UART w Arduino GIGA. Poprawne wywołanie wymaga dwóch argumentów: prędkości transmisji i konfiguracji ramki UART. Przedstawiony kod umożliwia poprawną komunikację z czujnikiem PMS7003, odczyt danych i ich wyświetlenie na monitorze szeregowym. W razie dalszych problemów warto sprawdzić połączenia sprzętowe i wersję bibliotek.