Arduino Mega 2560 Serial2
-
- Příspěvky: 1
- Registrován: 06 led 2019, 09:02
- Reputation: 0
Arduino Mega 2560 Serial2
Dobrý den potřeboval bych prosím překopat tento sketch ze software serial na serial2 na Arduinu. Nevím jak přesně pracuje čtení z portu2 a poslaní do portu0 (PC). přepsaní myserial na serial2 nepomohlo, hlásí to chybu CRC 0/0, samozřejmě jsem smazal ze sketche tu knihovnu atf. Děkuji moc Petr
#include <SoftwareSerial.h>;
SoftwareSerial mySerial(A3, A4); // prvni TX , druhy - RX
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
unsigned char response[9];
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
}
void loop()
{
mySerial.write(cmd, 9);
memset(response, 0, 9);
mySerial.readBytes(response, 9);
int i;
byte crc = 0;
for (i = 1; i < 8; i++) crc+=response;
crc = 255 - crc;
crc++;
if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
} else {
unsigned int responseHigh = (unsigned int) response[2];
unsigned int responseLow = (unsigned int) response[3];
unsigned int ppm = (256*responseHigh) + responseLow;
int x = ppm;
float y = x/1000.00;
unsigned int teplota = (unsigned int) response[4];
int a = teplota;
float b = a-40;
Serial.print ("koncentrace CO2: ");
Serial.print(ppm);
Serial.print(" PPM ");
Serial.print(y);
Serial.println("%");
Serial.print("teplota: ");
Serial.print(b);
Serial.println(" stupnu Celsia");
}
delay(5000);
}
#include <SoftwareSerial.h>;
SoftwareSerial mySerial(A3, A4); // prvni TX , druhy - RX
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
unsigned char response[9];
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
}
void loop()
{
mySerial.write(cmd, 9);
memset(response, 0, 9);
mySerial.readBytes(response, 9);
int i;
byte crc = 0;
for (i = 1; i < 8; i++) crc+=response;
crc = 255 - crc;
crc++;
if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
} else {
unsigned int responseHigh = (unsigned int) response[2];
unsigned int responseLow = (unsigned int) response[3];
unsigned int ppm = (256*responseHigh) + responseLow;
int x = ppm;
float y = x/1000.00;
unsigned int teplota = (unsigned int) response[4];
int a = teplota;
float b = a-40;
Serial.print ("koncentrace CO2: ");
Serial.print(ppm);
Serial.print(" PPM ");
Serial.print(y);
Serial.println("%");
Serial.print("teplota: ");
Serial.print(b);
Serial.println(" stupnu Celsia");
}
delay(5000);
}
Re: Arduino Mega 2560 Serial2
https://forum.arduino.cc/index.php?topic=102769.0 serial2 je na pinech 17,16.
Re: Arduino Mega 2560 Serial2
Vkládej kod přes "code"
Kód: Vybrat vše
//#include <SoftwareSerial.h>; to si vymaž
//SoftwareSerial mySerial(A3, A4); // prvni TX , druhy - RX to taky vymazat
byte cmd[9] = {0xFF,0x01,0x86,0x00,0x00,0x00,0x00,0x00,0x79};
unsigned char response[9];
void setup() {
Serial.begin(9600);
Serial2.begin(9600); // zmeneno
}
void loop()
{
Serial2.write(cmd, 9); //změneno z mySerial na Serial2 , je nutne dodrzet velikost pismen, serial.begin(9600) neni Serial.begin(9600);
memset(response, 0, 9);
Serial2.readBytes(response, 9); //změneno
int i;
byte crc = 0;
for ( i = 1; i < 8; i++) crc+=response[i]; //tady ti chybi [i],protoze tento web editor to nezobrazuje
crc = 255 - crc;
crc++;
if ( !(response[0] == 0xFF && response[1] == 0x86 && response[8] == crc) ) {
Serial.println("CRC error: " + String(crc) + " / "+ String(response[8]));
} else {
unsigned int responseHigh = (unsigned int) response[2];
unsigned int responseLow = (unsigned int) response[3];
unsigned int ppm = (256*responseHigh) + responseLow;
int x = ppm;
float y = x/1000.00;
unsigned int teplota = (unsigned int) response[4];
int a = teplota;
float b = a-40;
Serial.print ("koncentrace CO2: ");
Serial.print(ppm);
Serial.print(" PPM ");
Serial.print(y);
Serial.println("%");
Serial.print("teplota: ");
Serial.print(b);
Serial.println(" stupnu Celsia");
}
delay(5000);
}
- pavel1tu
- Příspěvky: 2054
- Registrován: 26 říj 2017, 08:28
- Reputation: 0
- Bydliště: Trutnov
- Kontaktovat uživatele:
Re: Arduino Mega 2560 Serial2
NO, čekal jsem až to někdo odpoví,
já se jen zeptám.
Proč SoftwareSerial.h ? Když tam máte k dispozici 4 sériové porty ?
já se jen zeptám.
Proč SoftwareSerial.h ? Když tam máte k dispozici 4 sériové porty ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Arduino Mega 2560 Serial2
Protože to asi okopčil z https://arduino.stackexchange.com/quest ... utput?rq=1 a tam je tam kod pro UNO a on má MEGA a chce využít HW Serial2 komunikaci a neví si rady jak. Uvádím pro jistotu Serial2, myšleno tím druhý, ať se to neplete, protože u MEGA je Serial1 (piny 18 a 19), Serial2 (piny 16 a 17) a Serial3 (piny 14 a 15)
Re: Arduino Mega 2560 Serial2
Zdravím, řeším podobný problém na UNO. Potřebuji kromě té vestavěné sériové linky na UNO ještě jednu. Příjem do UNO ale přichází po lince RS485 pak převodník z 485 na serial, pak do UNO. Ale ten Softwareserial musí mít CRC. Neměl by nekdo doporučení na Softwareserial CRC, nějaký osvědčený? Něco jsem na webu našel, ale nekomunikuje to, skoro mám podezření, že nemusí souhlasit časování. Díky, mpcz, 2oct2022
Re: Arduino Mega 2560 Serial2
To je tak abys založil raději nové téma, než to psát do hrobečku ...
RS232 ani RS485 CRC neřeší, maximální kontrola na úrovni toho protokolu je pomoci paritního bitu a ta se většinou nepoužívá a data se kontrolují až po přijetí. To jak se kontrolují záleží na konkrétním zařízení co ty data vysílá ... a fakt je to CRC ? ... ne jenom nějaký checksum ? (sečteš celou zprávu dohromady a k ní pak přidáš ještě jedno číslo tak aby na druhé straně vyšlo vždy to samé... a na druhé straně počítáš podobně, akorát chceš vypočítat tu přidané číslo...)
RS232 ani RS485 CRC neřeší, maximální kontrola na úrovni toho protokolu je pomoci paritního bitu a ta se většinou nepoužívá a data se kontrolují až po přijetí. To jak se kontrolují záleží na konkrétním zařízení co ty data vysílá ... a fakt je to CRC ? ... ne jenom nějaký checksum ? (sečteš celou zprávu dohromady a k ní pak přidáš ještě jedno číslo tak aby na druhé straně vyšlo vždy to samé... a na druhé straně počítáš podobně, akorát chceš vypočítat tu přidané číslo...)
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti