Date: April 2019. Version: 1.0.2. Can Library RX/TX, IDadress and data position. 3 independent timers for sending
Dependents: CAN_Library_Example Ekran CAN-library
Diff: CANlibrary.cpp
- Revision:
- 1:dade5cf64d0e
- Parent:
- 0:9cbaaaf1768f
- Child:
- 3:a142cf0e7c37
--- a/CANlibrary.cpp Thu Mar 07 23:15:11 2019 +0000 +++ b/CANlibrary.cpp Tue Apr 02 11:57:10 2019 +0000 @@ -2,7 +2,9 @@ extern CAN can; -Ticker tick; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!! nije hteo da se prevede kao extern +Ticker tick1; //!!!!!!!!!!!!!!!!!!!!!!!!!!!!! nije hteo da se prevede kao extern +Ticker tick2; +Ticker tick3; /****************************************** - - - - - VAZNO! - - - - - @@ -15,9 +17,9 @@ bool can_flag[16]; CANMessage msgs[16]; -char data[8]; -char idTX; -float msgInterval=0; +char data[8],data1[8],data2[8],data3[8]; +char idTX=0,idTX1=0,idTX2=0,idTX3=0; +float msgInterval1=0,msgInterval2=0,msgInterval3=0; void can_initRX(){ can.attach(can_msg_receive, CAN::RxIrq); @@ -44,18 +46,55 @@ //------------------------------------------------------------------- //------------------------------------------------------------------- // Funkcije slanja poruka: - void canTX_set_Interval(float inter){ //Zadavanje fiksnog intervala slanja CAN poruke //Vrednost je realna. Jedinica zadavanja je u sekundama. - msgInterval=inter; + msgInterval1=inter; +} + +void canTX_set_Interval_1(float inter){ + + //Zadavanje fiksnog intervala slanja CAN poruke + //Vrednost je realna. Jedinica zadavanja je u sekundama. + msgInterval1=inter; } +void canTX_set_Interval_2(float inter){ + + //Zadavanje fiksnog intervala slanja CAN poruke + //Vrednost je realna. Jedinica zadavanja je u sekundama. + msgInterval2=inter; +} + +void canTX_set_Interval_3(float inter){ + + //Zadavanje fiksnog intervala slanja CAN poruke + //Vrednost je realna. Jedinica zadavanja je u sekundama. + msgInterval3=inter; +} void can_initTX(char idtx){ //Fukcija koja zadaje fiksnu adresu slanja poruke - idTX=idtx; + idTX1=idtx; +} + +void can_initTX1(char idtx){ + + //Fukcija koja zadaje fiksnu adresu slanja poruke + idTX1=idtx; +} + +void can_initTX2(char idtx){ + + //Fukcija koja zadaje fiksnu adresu slanja poruke + idTX2=idtx; +} + +void can_initTX3(char idtx){ + + //Fukcija koja zadaje fiksnu adresu slanja poruke + idTX3=idtx; } void can_msg_send(){ @@ -63,12 +102,60 @@ * Fukcija koja salje podatke na CAN mrezu po zadatom,setovanom, IDju. * Duzina poruke podesena je fiksno na 8B. */ - can.write(CANMessage((uint16_t)idTX, data, 8)); + can.write(CANMessage((uint16_t)idTX1, data1, 8)); +} +void can_msg_send1(){ + + /* + * Fukcija koja salje podatke na CAN mrezu po zadatom,setovanom, IDju. + * Duzina poruke podesena je fiksno na 8B. + */ + can.write(CANMessage((uint16_t)idTX1, data1, 8)); } +void can_msg_send2(){ + + /* + * Fukcija koja salje podatke na CAN mrezu po zadatom,setovanom, IDju. + * Duzina poruke podesena je fiksno na 8B. + */ + can.write(CANMessage((uint16_t)idTX2, data2, 8)); +} +void can_msg_send3(){ + + /* + * Fukcija koja salje podatke na CAN mrezu po zadatom,setovanom, IDju. + * Duzina poruke podesena je fiksno na 8B. + */ + can.write(CANMessage((uint16_t)idTX3, data3, 8)); +} + void can_msg_send_tick(){ //Funkcija koja se poziva za slanje poruka u okviru fiksnog intervala - tick.attach(can_msg_send, msgInterval); + idTX=idTX1; + //strcpy(data,data1); + tick1.attach(can_msg_send1, msgInterval1); +} +void can_msg_send_tick1(){ + + //Funkcija koja se poziva za slanje poruka u okviru fiksnog intervala + idTX=idTX1; + //strcpy(data,data1); + tick1.attach(can_msg_send1, msgInterval1); +} +void can_msg_send_tick2(){ + + //Funkcija koja se poziva za slanje poruka u okviru fiksnog intervala + idTX=idTX2; + //strcpy(data,data2); + tick2.attach(can_msg_send2, msgInterval2); +} +void can_msg_send_tick3(){ + + //Funkcija koja se poziva za slanje poruka u okviru fiksnog intervala + idTX=idTX3; + //strcpy(data,data3); + tick3.attach(can_msg_send3, msgInterval3); } //---------------------------------------------------------------------------- /* Pomocne funkcije za pakovanje podataka prilikom slanja: @@ -87,19 +174,50 @@ * Maximalno se mogu poslati 4 podatka od po 2B (pos polje u opsegu od 0 do 3) * ili 8 od po 1B (pos polje u opsegu od 0 do 7). */ - void pack_data(uint16_t dta, char pos){ //Pakuje unit16_t u dva podatka od po 1B, na poziciji pos u CAN poruci - data[pos<<1] = dta; - data[(pos<<1)+1] = dta >> 8; + data1[pos<<1] = dta; + data1[(pos<<1)+1] = dta >> 8; +} + +void pack_data1(uint16_t dta, char pos){ + + //Pakuje unit16_t u dva podatka od po 1B, na poziciji pos u CAN poruci + data1[pos<<1] = dta; + data1[(pos<<1)+1] = dta >> 8; +} + +void pack_data1(char dta, char pos){ + + //Pakuje char u jedan podatka od 1B, na poziciji pos u CAN poruci + data1[pos<<1] = dta; } -void pack_data(char dta, char pos){ +void pack_data2(uint16_t dta, char pos){ + + //Pakuje unit16_t u dva podatka od po 1B, na poziciji pos u CAN poruci + data2[pos<<1] = dta; + data2[(pos<<1)+1] = dta >> 8; +} + +void pack_data2(char dta, char pos){ //Pakuje char u jedan podatka od 1B, na poziciji pos u CAN poruci - data[pos<<1] = dta; + data2[pos<<1] = dta; +} + +void pack_data3(uint16_t dta, char pos){ + + //Pakuje unit16_t u dva podatka od po 1B, na poziciji pos u CAN poruci + data3[pos<<1] = dta; + data3[(pos<<1)+1] = dta >> 8; +} + +void pack_data3(char dta, char pos){ + + //Pakuje char u jedan podatka od 1B, na poziciji pos u CAN poruci + data3[pos<<1] = dta; } -