Stránka 1 z 1

Arduino Mega 2560 Serial2

Napsal: 06 led 2019, 09:15
od petrkozanek7
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);
}

Re: Arduino Mega 2560 Serial2

Napsal: 06 led 2019, 12:09
od BlindP

Re: Arduino Mega 2560 Serial2

Napsal: 06 led 2019, 12:41
od RomanB
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);
}

Re: Arduino Mega 2560 Serial2

Napsal: 06 led 2019, 13:42
od pavel1tu
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 ?

Re: Arduino Mega 2560 Serial2

Napsal: 06 led 2019, 14:18
od RomanB
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

Napsal: 02 říj 2022, 20:02
od mpcz
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

Napsal: 03 říj 2022, 15:36
od kiRRow
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...)