Arduino Mega 2560 Serial2

Odpovědět
petrkozanek7
Příspěvky: 1
Registrován: 06 led 2019, 09:02
Reputation: 0

Arduino Mega 2560 Serial2

Příspěvek od petrkozanek7 » 06 led 2019, 09:15

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);
}

Uživatelský avatar
BlindP
Příspěvky: 39
Registrován: 23 črc 2017, 00:46
Reputation: 0

Re: Arduino Mega 2560 Serial2

Příspěvek od BlindP » 06 led 2019, 12:09


RomanB
Příspěvky: 90
Registrován: 04 zář 2017, 14:28
Reputation: 0
Bydliště: Havířov

Re: Arduino Mega 2560 Serial2

Příspěvek od RomanB » 06 led 2019, 12:41

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);
}

Uživatelský avatar
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

Příspěvek od pavel1tu » 06 led 2019, 13:42

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 ?
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

RomanB
Příspěvky: 90
Registrován: 04 zář 2017, 14:28
Reputation: 0
Bydliště: Havířov

Re: Arduino Mega 2560 Serial2

Příspěvek od RomanB » 06 led 2019, 14:18

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)

mpcz
Příspěvky: 22
Registrován: 22 zář 2018, 09:08
Reputation: 0

Re: Arduino Mega 2560 Serial2

Příspěvek od mpcz » 02 říj 2022, 20:02

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

Uživatelský avatar
kiRRow
Příspěvky: 1151
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Arduino Mega 2560 Serial2

Příspěvek od kiRRow » 03 říj 2022, 15:36

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...)

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů