Program Kunci
Dependencies: BufferedSoftSerial Noritake iButton CRC16Modbus Displays Audio
main.cpp
- Committer:
- mauuuuul
- Date:
- 2020-07-09
- Revision:
- 0:0cd00ee4dd93
File content as of revision 0:0cd00ee4dd93:
#include "mbed.h" #include "EthernetInterface.h" #include <string> #include <vector> #include "Audio.h" #include "iButton.h" #include <bitset> #include "CRC16Modbus.h" #include "BufferedSoftSerial.h" #include "Displays.h" #include <list> #include <algorithm> // Network interface TCPSocket socket; Thread thdFindConnection; Thread thd_Cek_Ibutton; Thread thd_RS485_Recv; Thread thd_Buzzer; Thread thd_LCD; MyAudio buzz(D7); Displays dsp(PTC8,PTC1); uint8_t LCD_Step = 0; uint8_t LCD_Step_4 = 0; #define IP "192.168.0.6" #define GATEWAY "192.168.0.1" #define MASK "255.255.255.0" char cmd_resets[] = "R00"; char cek_con[] = "P"; uint8_t Key_On_Process = 0; Serial dbg(USBTX,USBRX); BufferedSoftSerial dv(PTB19,PTB18); DigitalOut rede(PTC9,0); iButton ibutton(D4); bool tap = false; bool lasttap = false; uint8_t board_number; uint8_t baris; uint8_t kolom; uint8_t real_id; uint8_t real_blink_id_1 = 64; uint8_t real_blink_id_2 = 64; uint8_t real_blink_id_3 = 64; uint8_t real_blink_id_4 = 64; uint8_t real_blink_id_5 = 64; uint8_t blinking_now = 0; uint8_t ids; typedef uint8_t byte; //r0,r1,r2,r3,r4,r5,r6,r7 byte Row_Board1_Last[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board2_Last[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board3_Last[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board4_Last[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board5_Last[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board1_Now[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board2_Now[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board3_Now[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board4_Now[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board5_Now[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board1_Predict[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board2_Predict[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board3_Predict[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board4_Predict[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; byte Row_Board5_Predict[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; uint8_t board_88[8][8]= { {0,1,2,3,4,5,6,7}, {8,9,10,11,12,13,14,15}, {16,17,18,19,20,21,22,23}, {24,25,26,27,28,29,30,31}, {32,33,34,35,36,37,38,39}, {40,41,42,43,44,45,46,47}, {48,49,50,51,52,53,54,55}, {56,57,58,59,60,61,62,63} }; string TCP_Cek_Data_Last_Sent; string TCP_Data_Last_Sent; string TCP_Ibutton_Last_Sent; unsigned char buffer_crc[2]; unsigned short _crc; byte respon_from_slave_temp[17]; bool intr_Done = false; uint8_t board_sum; struct frame_data { string ids; string key_on = ""; string key_off = ""; }Frame_To_Send; struct Frame_Data_Received { uint8_t ids; string ibutton; uint8_t _key_id; uint8_t cmd_id; } frm_data_received; byte respon_from_slave[32]; uint8_t step = 0; bool Done = false; bool isConnected = false; string salah_taruh1; string salah_ambil1; string salah_taruh2; string salah_ambil2; string salah_taruh3; string salah_ambil3; string salah_taruh4; string salah_ambil4; string salah_taruh5; string salah_ambil5; bool done_1 = true; bool done_2 = true; bool done_3 = true; bool done_4 = true; bool done_5 = true; vector<uint8_t> lst_salah; vector<uint8_t> lst_salah_hst; vector<uint8_t>::iterator it; vector<uint8_t> to_remove; string to_sends; string to_sends_cek; string salah_ambil_resultant; string salah_taruh_resultant; string ibutton_code; vector<string> split(const string str, const string separator) { char *cstr = const_cast<char*>(str.c_str()); char *current; std::vector<std::string>arr; current = strtok(cstr, separator.c_str()); while(current != NULL) { arr.push_back(current); current = strtok(NULL, separator.c_str()); } return arr; } bool waiting_resp = false; void Cek_Ibutton(); void Cek_Salah_Buzzer(); string Byte_to_StringBinary(byte data_byte); uint8_t StringBinary_to_Byte(string data_binary); uint8_t Get_Row(uint8_t key_id); unsigned short Get_CRC_Modbus(byte data_byte[]); void Send_RS485(uint8_t board,uint8_t key_id,uint8_t key_id_blinking,bool Cek_Respon); void Make_Prediction(uint8_t board_number,uint8_t baris, uint8_t kolom); void Cek_LCD_State(); string First_Update(); vector<string> temp_data; uint8_t res_cmp = 0; string bin_string_now; string bin_string_predict; uint8_t keys; bool First_Run = true; void FindingServer() { printf("Finding Server.....\r\n\r\n"); RECONNECT1: EthernetInterface net; net.set_network(IP,MASK,GATEWAY); uint8_t stat1 = net.connect(); //printf("stat1 = %d\r\n",stat1); if(stat1 != 0) { goto RECONNECT1; } // Show the network address const char *ip = net.get_ip_address(); while(1) { RECONNECT2: // Open a socket on the network interface, and create a TCP connection to mbed.org TCPSocket socket; socket.open(&net); socket.set_blocking(false); uint8_t stat2 = socket.connect("192.168.0.89", 12345); //printf("stat2 = %d\r\n",stat2); wait(1); if(stat2 != 0) { socket.close(); goto RECONNECT2; } isConnected = true; printf("Connected to Server....\r\n"); if(First_Run) { printf("Process Start..\r\n"); //socket.send(cmd_resets, sizeof(cmd_resets)); string data_frame = First_Update(); socket.send(data_frame.c_str(), data_frame.length()); First_Run = false; wait(0.05); dsp.step0(); } else { if(blinking_now == 0) { //printf("Process Start..\r\n"); //socket.send(cmd_resets, sizeof(cmd_resets)); string data_frame = First_Update(); step = 0; if(frm_data_received.ids == 3) { dsp.step4(to_string(frm_data_received._key_id).c_str(),false); } else if(frm_data_received.ids== 1) { dsp.step0(); } else { dsp.step0(); } socket.send(data_frame.c_str(), data_frame.length()); } else { dsp.step5(to_string(blinking_now).c_str(),true); } } //printf("%s\r\n",data_frame.c_str()); while(isConnected) { //TODO : CekData Locker Terkini switch(step) { case 0: { uint8_t res_cek = socket.send(cek_con,sizeof(cek_con)); if(res_cek <= 0) { printf("Server Has Been Closed..\r\n"); isConnected = false; socket.close(); dsp.init(); continue; } for(uint8_t i = 0; i<board_sum; i++) { wait_ms(50); //printf("%d %d %d %d %d\r\n",real_blink_id_1,real_blink_id_2,real_blink_id_3,real_blink_id_4,real_blink_id_5); if(i == 0) Send_RS485(i,64,real_blink_id_1,true); else if(i == 1) Send_RS485(i,64,real_blink_id_2,true); else if(i == 2) Send_RS485(i,64,real_blink_id_3,true); else if(i == 3) Send_RS485(i,64,real_blink_id_4,true); else if(i == 4) Send_RS485(i,64,real_blink_id_5,true); for(uint8_t a = 4; a<12; a++) { uint8_t temp_id = a; switch(i) { case 0: { Row_Board1_Now[temp_id-4] = respon_from_slave[a]; //printf("Resp : %02X || BoardLast %d : %02X\r\n",respon_from_slave[a],i+1,Row_Board1_Last[temp_id-5]); } break; case 1: { Row_Board2_Now[temp_id-4] = respon_from_slave[a]; //printf("Resp : %02X || BoardLast %d : %02X\r\n",respon_from_slave[a],i+1,Row_Board2_Last[temp_id-5]); } break; case 2: { Row_Board3_Now[temp_id-4] = respon_from_slave[a]; //printf("Resp : %02X || BoardLast %d : %02X\r\n",respon_from_slave[a],i+1,Row_Board3_Last[temp_id-5]); } break; case 3: { Row_Board4_Now[temp_id-4] = respon_from_slave[a]; //printf("Resp : %02X || BoardLast %d : %02X\r\n",respon_from_slave[a],i+1,Row_Board4_Last[temp_id-5]); } break; case 4: { Row_Board5_Now[temp_id-4] = respon_from_slave[a]; //printf("Resp : %02X || BoardLast %d : %02X\r\n",respon_from_slave[a],i+1,Row_Board5_Last[temp_id-5]); } break; } } } salah_ambil1 = ""; salah_taruh1 = ""; salah_ambil2 = ""; salah_taruh2 = ""; salah_ambil3 = ""; salah_taruh3 = ""; salah_ambil4 = ""; salah_taruh4 = ""; salah_ambil5 = ""; salah_taruh5 = ""; lst_salah.clear(); to_remove.clear(); for(uint8_t i = 0; i<board_sum; i++) { switch(i) { case 0: { res_cmp = 0; res_cmp = memcmp(Row_Board1_Now,Row_Board1_Last, sizeof(Row_Board1_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board1_Now[j] != Row_Board1_Last[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board1_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board1_Last[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; done_1 = false; lst_salah.push_back(keys); if(bin_string_predict[abs(k-7)] == '0') { salah_taruh1 += to_string(keys)+"-"; } else { salah_ambil1 += to_string(keys)+"-"; } } } } } } else if (res_cmp == 0) { real_blink_id_1 = 64; salah_ambil1 = ""; salah_taruh1 = ""; done_1 = true; //memcpy(Row_Board1_Last,Row_Board1_Now,sizeof(Row_Board1_Last)); Send_RS485(i,64,64,false); } } break; case 1: { res_cmp = 0; res_cmp = memcmp(Row_Board2_Now,Row_Board2_Last, sizeof(Row_Board2_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board2_Now[j] != Row_Board2_Last[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board2_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board2_Last[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; lst_salah.push_back(keys); done_2 = false; if(bin_string_predict[abs(k-7)] == '0') { salah_taruh2 += to_string(keys)+"-"; } else { salah_ambil2 += to_string(keys)+"-"; } } } } } } else if (res_cmp == 0) { real_blink_id_2 = 64; salah_ambil2 = ""; salah_taruh2 = ""; done_2 = true; //memcpy(Row_Board2_Last,Row_Board2_Now,sizeof(Row_Board2_Last)); Send_RS485(i,64,64,false); } } break; case 2: { res_cmp = 0; res_cmp = memcmp(Row_Board3_Now,Row_Board3_Last, sizeof(Row_Board3_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board3_Now[j] != Row_Board3_Last[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board3_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board3_Last[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; lst_salah.push_back(keys); done_3 = false; if(bin_string_predict[abs(k-7)] == '0') { salah_taruh3 += to_string(keys)+"-"; } else { salah_ambil3 += to_string(keys)+"-"; } } } } } } else if (res_cmp == 0) { real_blink_id_3 = 64; salah_ambil3 = ""; salah_taruh3 = ""; done_3 = true; //memcpy(Row_Board3_Last,Row_Board3_Now,sizeof(Row_Board3_Last)); Send_RS485(i,64,64,false); } } break; case 3: { res_cmp = 0; res_cmp = memcmp(Row_Board4_Now,Row_Board4_Last, sizeof(Row_Board4_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board4_Now[j] != Row_Board4_Last[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board4_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board4_Last[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; lst_salah.push_back(keys); done_4 = false; if(bin_string_predict[abs(k-7)] == '0') { salah_taruh4 += to_string(keys)+"-"; } else { salah_ambil4 += to_string(keys)+"-"; } } } } } } else if (res_cmp == 0) { real_blink_id_4 = 64; salah_ambil4 = ""; salah_taruh4 = ""; done_4 = true; //memcpy(Row_Board3_Last,Row_Board3_Now,sizeof(Row_Board3_Last)); Send_RS485(i,64,64,false); } } break; case 4: { res_cmp = 0; res_cmp = memcmp(Row_Board5_Now,Row_Board5_Last, sizeof(Row_Board5_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board5_Now[j] != Row_Board5_Last[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board5_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board5_Last[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; lst_salah.push_back(keys); done_5 = false; if(bin_string_predict[abs(k-7)] == '0') { salah_taruh5 += to_string(keys)+"-"; } else { salah_ambil5 += to_string(keys)+"-"; } } } } } } else if (res_cmp == 0) { real_blink_id_5 = 64; salah_ambil5 = ""; salah_taruh5 = ""; done_5 = true; //memcpy(Row_Board3_Last,Row_Board3_Now,sizeof(Row_Board3_Last)); Send_RS485(i,64,64,false); } } break; } } salah_ambil_resultant = ""; salah_taruh_resultant = ""; if(lst_salah.size() > 0) { uint8_t blink_id = 64; bool ada = false; if(lst_salah_hst.size() > 0) { printf("jumlah hst = %d\r\n",lst_salah_hst.size()); for(uint8_t q = 0; q<lst_salah_hst.size(); q++) { ada = false; printf("lst_hst_recent%d = %d\r\n",q+1,lst_salah_hst[q]); for(uint8_t r = 0; r<lst_salah.size(); r++) { if(lst_salah[r] == lst_salah_hst[q]) { ada = true; } } if(!ada) { to_remove.push_back(lst_salah_hst[q]); } } if(to_remove.size() > 0) { for(uint8_t t = 0; t<to_remove.size(); t++) { lst_salah_hst.erase(remove(lst_salah_hst.begin(), lst_salah_hst.end(), to_remove[t]), lst_salah_hst.end()); } } for(uint8_t w = 0; w<lst_salah.size(); w++) { it = find (lst_salah_hst.begin(), lst_salah_hst.end(), lst_salah[w]); if (it != lst_salah_hst.end()) { continue; } lst_salah_hst.push_back(lst_salah[w]); } } else { for(uint8_t u = 0; u<lst_salah.size(); u++) { lst_salah_hst.push_back(lst_salah[u]); } } blink_id = lst_salah_hst[lst_salah_hst.size()-1]; uint8_t board_number_blink = (blink_id - 1)%40; if(board_number_blink>= 0 && board_number_blink<= 7)board_number_blink = 0; else if(board_number_blink>= 8 && board_number_blink<= 15)board_number_blink = 1; else if(board_number_blink>= 16 && board_number_blink<= 23)board_number_blink = 2; else if(board_number_blink>= 24 && board_number_blink<= 31)board_number_blink = 3; else if(board_number_blink>= 32 && board_number_blink<= 39)board_number_blink = 4; //printf("board_number_blink = %d\r\n",board_number_blink); uint8_t baris_blink = (blink_id - 1)/40; uint8_t kolom_blink = (blink_id - 1)%8; blink_id = board_88[baris_blink][kolom_blink]; //printf("Board blink : %d,Kolom blink : %d, Baris blink : %d\r\n",board_number_blink,kolom_blink,baris_blink); if(board_number_blink == 0) { real_blink_id_1 = blink_id; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = 64; } else if(board_number_blink == 1) { real_blink_id_1 = 64; real_blink_id_2 = blink_id; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = 64; } else if(board_number_blink == 2) { real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = blink_id; real_blink_id_4 = 64; real_blink_id_5 = 64; } else if(board_number_blink == 3) { real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = blink_id; real_blink_id_5 = 64; } else if(board_number_blink == 4) { real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = blink_id; } blinking_now = lst_salah_hst[lst_salah_hst.size()-1]; salah_ambil_resultant = salah_ambil1 + salah_ambil2 + salah_ambil3 + salah_ambil4 + salah_ambil5; salah_taruh_resultant = salah_taruh1 + salah_taruh2 + salah_taruh3 + salah_taruh4 + salah_taruh5; if(salah_ambil_resultant == "") salah_ambil_resultant = "0-"; if(salah_taruh_resultant == "") salah_taruh_resultant = "0-"; to_sends_cek = "2;"+salah_ambil_resultant + ";" +salah_taruh_resultant+";" + to_string(blinking_now) +";~"; printf("Unprosedur : %s\r\n",to_sends_cek.c_str()); if(TCP_Cek_Data_Last_Sent.find(to_sends_cek) == -1) { dsp.step5(to_string(blinking_now).c_str(),true); socket.send(to_sends_cek.c_str(), to_sends_cek.length()); TCP_Cek_Data_Last_Sent = to_sends_cek; } } else { if(done_1 && done_2 && done_3 && done_4 && done_5) { lst_salah_hst.clear(); blinking_now = 0; real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = 64; salah_ambil_resultant = "0;"; salah_taruh_resultant = "0"; step = 1; to_sends_cek = "2;0-;0-;~"; if(TCP_Cek_Data_Last_Sent.find(to_sends_cek) == -1) { if(frm_data_received.ids == 3) { dsp.step4(to_string(frm_data_received._key_id).c_str(),false); } else if(frm_data_received.ids== 1) { dsp.step0(); } else { dsp.step0(); } //wait_ms(50); socket.send(to_sends_cek.c_str(), to_sends_cek.length()); TCP_Cek_Data_Last_Sent = to_sends_cek; } } else { blinking_now = 0; real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = 64; } } } break; case 1: { char rbuffer[64]; uint8_t rcount = socket.recv(rbuffer, sizeof rbuffer); if(rcount < 0) { step = 0; } else if(rcount > 0) { rbuffer[rcount] = '\0'; string data; for(uint8_t i = 0; i<sizeof(rbuffer); i++) { if(rbuffer[i] == '\0')break; data += rbuffer[i]; } vector<string> res = split(data, "~"); if(sizeof(res) != 0) { temp_data = split(res[0], ";"); if(temp_data[0] == "3" && temp_data[1] == "1") { dsp.step4(to_string(frm_data_received._key_id).c_str(),false); } else if(temp_data[0] == "3" && temp_data[1] == "0") { dsp.step0(); } else { frm_data_received.ids = atoi(temp_data[0].c_str()); frm_data_received.ibutton = temp_data[1]; frm_data_received._key_id = atoi(temp_data[2].c_str()); frm_data_received.cmd_id = atoi(temp_data[3].c_str()); printf("id = %d\r\n",frm_data_received.ids); printf("ibutton = %s\r\n",frm_data_received.ibutton.c_str()); printf("keys = %d\r\n",frm_data_received._key_id); printf("cmd = %d\r\n",frm_data_received.cmd_id); if(frm_data_received.ids== 1) { wait(1); dsp.step1(true); step = 2; } else if(frm_data_received.ids == 3) { step = 3; //dsp.step4(to_string(frm_data_received._key_id).c_str(),true); } } } } else if(rcount == 0) { printf("Server Has Been Closed..\r\n"); isConnected = false; step = 0;// // blinking_now = 0; // real_blink_id_1 = 64; // real_blink_id_2 = 64; // real_blink_id_3 = 64; // real_blink_id_4 = 64; // real_blink_id_5 = 64; dsp.init(); socket.close(); } if(ibutton_code != "") { string data_to_send = "3;" + ibutton_code + ";~"; printf("%s\r\n",data_to_send.c_str()); wait(1); socket.send(data_to_send.c_str(), data_to_send.length()); TCP_Ibutton_Last_Sent = data_to_send; printf("Send ibutton\r\n"); ibutton_code.clear(); } } break; case 2: { buzz.play(1); bool restart = false; while(frm_data_received.ibutton.c_str() != ibutton_code) { uint8_t res_cek = socket.send(cek_con,sizeof(cek_con)); if(res_cek <= 0) { printf("Server Has Been Closed..\r\n"); isConnected = false; socket.close(); dsp.init(); restart = true; break; } wait(0.05); } if(restart) { continue; } else { ibutton_code.clear(); printf("IButton verified\r\n"); dsp.step2(to_string(frm_data_received._key_id).c_str()); step = 3; } } break; case 3: { uint8_t res_cek = socket.send(cek_con,sizeof(cek_con)); if(res_cek <= 0) { printf("Server Has Been Closed..\r\n"); isConnected = false; socket.close(); dsp.init(); continue; } buzz.play(1); board_number = (frm_data_received._key_id - 1)%40; if(board_number>= 0 && board_number<= 7)board_number = 0; if(board_number>= 8 && board_number<= 15)board_number = 1; if(board_number>= 16 && board_number<= 23)board_number = 2; if(board_number>= 24 && board_number<= 31)board_number = 3; if(board_number>= 32 && board_number<= 39)board_number = 4; printf("KEY[board] = %d\r\n",board_number); baris = (frm_data_received._key_id - 1)/40; printf("KEY[baris] = %d\r\n",baris); kolom = (frm_data_received._key_id - 1)%8; printf("KEY[kolom] = %d\r\n",kolom); real_id = board_88[baris][kolom]; printf("Real Id = %d\r\n",real_id); Make_Prediction(board_number,baris,kolom); step = 4; } break; case 4: { uint8_t res_cek = socket.send(cek_con,sizeof(cek_con)); if(res_cek <= 0) { LCD_Step_4 = 0; printf("Server Has Been Closed..\r\n"); isConnected = false; socket.close(); dsp.init(); continue; } for(uint8_t i = 0; i<board_sum; i++) { wait_ms(100); if(board_number == i) { if(i == 0) Send_RS485(i,real_id,real_blink_id_1,true); else if(i == 1) Send_RS485(i,real_id,real_blink_id_2,true); else if(i == 2) Send_RS485(i,real_id,real_blink_id_3,true); else if(i == 3) Send_RS485(i,real_id,real_blink_id_4,true); else if(i == 4) Send_RS485(i,real_id,real_blink_id_5,true); } else { if(i == 0) Send_RS485(i,64,real_blink_id_1,true); else if(i == 1) Send_RS485(i,64,real_blink_id_2,true); else if(i == 2) Send_RS485(i,64,real_blink_id_3,true); else if(i == 3) Send_RS485(i,64,real_blink_id_4,true); else if(i == 4) Send_RS485(i,64,real_blink_id_5,true); } printf("Data has been received successfully\r\n"); for(uint8_t a = 4; a<12; a++) { uint8_t temp_id = a; switch(i) { case 0: { Row_Board1_Now[temp_id-4] = respon_from_slave[a]; } break; case 1: { Row_Board2_Now[temp_id-4] = respon_from_slave[a]; //printf("Resp : %02X || BoardLast %d : %02X\r\n",respon_from_slave[a],i+1,Row_Board2_Last[temp_id-5]); } break; case 2: { Row_Board3_Now[temp_id-4] = respon_from_slave[a]; //printf("Resp : %02X || BoardLast %d : %02X\r\n",respon_from_slave[a],i+1,Row_Board3_Last[temp_id-5]); } break; case 3: { Row_Board4_Now[temp_id-4] = respon_from_slave[a]; //printf("Resp : %02X || BoardLast %d : %02X\r\n",respon_from_slave[a],i+1,Row_Board4_Last[temp_id-5]); } break; case 4: { Row_Board5_Now[temp_id-4] = respon_from_slave[a]; //printf("Resp : %02X || BoardLast %d : %02X\r\n",respon_from_slave[a],i+1,Row_Board5_Last[temp_id-5]); } break; } } } salah_ambil1 = ""; salah_taruh1 = ""; salah_ambil2 = ""; salah_taruh2 = ""; salah_ambil3 = ""; salah_taruh3 = ""; salah_ambil4 = ""; salah_taruh4 = ""; salah_ambil5 = ""; salah_taruh5 = ""; lst_salah.clear(); for(uint8_t i = 0; i<board_sum; i++) { switch(i) { case 0: { string salah_1; res_cmp = 0; res_cmp = memcmp(Row_Board1_Now,Row_Board1_Predict, sizeof(Row_Board1_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board1_Now[j] != Row_Board1_Predict[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board1_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board1_Predict[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; if(keys != frm_data_received._key_id) { lst_salah.push_back(keys); salah_1 += to_string(keys)+"-"; } else { done_1 = false; } if(bin_string_predict[abs(k-7)] == '0') { if(keys != frm_data_received._key_id) { salah_taruh1 += to_string(keys)+"-"; } } else { if(keys != frm_data_received._key_id) { salah_ambil1 += to_string(keys)+"-"; } } } } } } printf("Salah_Board%d = %s\r\n",i+1,salah_1.c_str()); } else if (res_cmp == 0) { printf("Board %d Match\r\n",i+1); real_blink_id_1 = 64; salah_ambil1 = ""; salah_taruh1 = ""; done_1 = true; memcpy(Row_Board1_Last,Row_Board1_Now,sizeof(Row_Board1_Last)); Send_RS485(i,64,64,false); } } break; case 1: { string salah_2; res_cmp = 0; res_cmp = memcmp(Row_Board2_Now,Row_Board2_Predict, sizeof(Row_Board2_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board2_Now[j] != Row_Board2_Predict[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board2_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board2_Predict[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; if(keys != frm_data_received._key_id) { lst_salah.push_back(keys); salah_2 += to_string(keys)+"-"; } else { done_2 = false; } if(bin_string_predict[abs(k-7)] == '0') { if(keys != frm_data_received._key_id) { salah_taruh2 += to_string(keys)+"-"; } } else { if(keys != frm_data_received._key_id) { salah_ambil2 += to_string(keys)+"-"; } } } } } } printf("Salah_Board%d = %s\r\n",i+1,salah_2.c_str()); } else if (res_cmp == 0) { printf("Board %d Match\r\n",i+1); real_blink_id_2 = 64; salah_ambil2 = ""; salah_taruh2 = ""; done_2 = true; memcpy(Row_Board2_Last,Row_Board2_Now,sizeof(Row_Board2_Last)); Send_RS485(i,64,64,false); } } break; case 2: { string salah_3; res_cmp = 0; res_cmp = memcmp(Row_Board3_Now,Row_Board3_Predict, sizeof(Row_Board3_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board3_Now[j] != Row_Board3_Predict[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board3_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board3_Predict[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; if(keys != frm_data_received._key_id) { lst_salah.push_back(keys); salah_3 += to_string(keys)+"-"; } else { done_3 = false; } if(bin_string_predict[abs(k-7)] == '0') { if(keys != frm_data_received._key_id) { salah_taruh3 += to_string(keys)+"-"; } } else { if(keys != frm_data_received._key_id) { salah_ambil3 += to_string(keys)+"-"; } } } } } } printf("Salah_Board%d = %s\r\n",i+1,salah_3.c_str()); } else if (res_cmp == 0) { printf("Board %d Match\r\n",i+1); real_blink_id_3 = 64; salah_ambil3 = ""; salah_taruh3 = ""; done_3 = true; memcpy(Row_Board3_Last,Row_Board3_Now,sizeof(Row_Board3_Last)); Send_RS485(i,64,64,false); } } break; case 3: { string salah_4; res_cmp = 0; res_cmp = memcmp(Row_Board4_Now,Row_Board4_Predict, sizeof(Row_Board4_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board1_Now[j] != Row_Board4_Predict[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board4_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board4_Predict[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; if(keys != frm_data_received._key_id) { lst_salah.push_back(keys); salah_4 += to_string(keys)+"-"; } else { done_4 = false; } if(bin_string_predict[abs(k-7)] == '0') { if(keys != frm_data_received._key_id) { salah_taruh4 += to_string(keys)+"-"; } } else { if(keys != frm_data_received._key_id) { salah_ambil4 += to_string(keys)+"-"; } } } } } } printf("Salah_Board%d = %s\r\n",i+1,salah_4.c_str()); } else if (res_cmp == 0) { printf("Board %d Match\r\n",i+1); real_blink_id_4 = 64; salah_ambil4 = ""; salah_taruh4 = ""; done_4 = true; memcpy(Row_Board4_Last,Row_Board4_Now,sizeof(Row_Board4_Last)); Send_RS485(i,64,64,false); } } break; case 4: { string salah_5; res_cmp = 0; res_cmp = memcmp(Row_Board5_Now,Row_Board5_Predict, sizeof(Row_Board5_Now)); if(res_cmp != 0) { for(uint8_t j = 0; j<8; j++) { if(Row_Board1_Now[j] != Row_Board5_Predict[j]) { bin_string_now = ""; bin_string_predict = ""; keys = 0; bin_string_now = Byte_to_StringBinary(Row_Board5_Now[j]); bin_string_predict = Byte_to_StringBinary(Row_Board5_Predict[j]); for (uint8_t k = 0; k < 8; k++) { if(bin_string_now[abs(k-7)] != bin_string_predict[abs(k-7)]) { keys = (40*j)+k+(8*i)+1; if(keys != frm_data_received._key_id) { lst_salah.push_back(keys); salah_5 += to_string(keys)+"-"; } else { done_5 = false; } if(bin_string_predict[abs(k-7)] == '0') { if(keys != frm_data_received._key_id) { salah_taruh5 += to_string(keys)+"-"; } } else { if(keys != frm_data_received._key_id) { salah_ambil5 += to_string(keys)+"-"; } } } } } } printf("Salah_Board%d = %s\r\n",i+1,salah_5.c_str()); } else if (res_cmp == 0) { printf("Board %d Match\r\n",i+1); real_blink_id_5 = 64; salah_ambil5 = ""; salah_taruh5 = ""; done_5 = true; memcpy(Row_Board5_Last,Row_Board5_Now,sizeof(Row_Board5_Last)); Send_RS485(i,64,64,false); } } break; } } salah_ambil_resultant = ""; salah_taruh_resultant = ""; printf("Size salah = %d\r\n",lst_salah.size()); if(lst_salah.size() > 0) { uint8_t blink_id = 64; bool ada = false; for(uint8_t p = 0; p<lst_salah.size(); p++) printf("lst salah all%d = %d\r\n",p+1,lst_salah[p]); if(lst_salah_hst.size() != 0) { //printf("jumlah hst = %d\r\n",lst_salah_hst.size()); for(uint8_t q = 0; q<lst_salah_hst.size(); q++) { ada = false; for(uint8_t r = 0; r<lst_salah.size(); r++) { if(lst_salah[r] == lst_salah_hst[q]) { ada = true; //break; } } if(!ada) { to_remove.push_back(lst_salah_hst[q]); } } if(to_remove.size() > 0) { for(uint8_t t = 0; t<to_remove.size(); t++) { lst_salah_hst.erase(remove(lst_salah_hst.begin(), lst_salah_hst.end(), to_remove[t]), lst_salah_hst.end()); } } for(uint8_t w = 0; w<lst_salah.size(); w++) { it = find (lst_salah_hst.begin(), lst_salah_hst.end(), lst_salah[w]); if (it != lst_salah_hst.end()) { continue; } lst_salah_hst.push_back(lst_salah[w]); } } else { for(uint8_t u = 0; u<lst_salah.size(); u++) { lst_salah_hst.push_back(lst_salah[u]); } } blink_id = lst_salah_hst[lst_salah_hst.size()-1]; //printf("blink_id = %d\r\n",blink_id); uint8_t board_number_blink = (blink_id - 1)%40; if(board_number_blink>= 0 && board_number_blink<= 7)board_number_blink = 0; else if(board_number_blink>= 8 && board_number_blink<= 15)board_number_blink = 1; else if(board_number_blink>= 16 && board_number_blink<= 23)board_number_blink = 2; else if(board_number_blink>= 24 && board_number_blink<= 31)board_number_blink = 3; else if(board_number_blink>= 32 && board_number_blink<= 39)board_number_blink = 4; //printf("board_number_blink = %d\r\n",board_number_blink); uint8_t baris_blink = (blink_id - 1)/40; uint8_t kolom_blink = (blink_id - 1)%8; blink_id = board_88[baris_blink][kolom_blink]; printf("Board blink : %d,Kolom blink : %d, Baris blink : %d\r\n",board_number_blink,kolom_blink,baris_blink); if(board_number_blink == 0) { real_blink_id_1 = blink_id; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = 64; } else if(board_number_blink == 1) { real_blink_id_1 = 64; real_blink_id_2 = blink_id; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = 64; } else if(board_number_blink == 2) { real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = blink_id; real_blink_id_4 = 64; real_blink_id_5 = 64; } else if(board_number_blink == 3) { real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = blink_id; real_blink_id_5 = 64; } else if(board_number_blink == 4) { real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = blink_id; } blinking_now = lst_salah_hst[lst_salah_hst.size()-1]; salah_ambil_resultant = salah_ambil1 + salah_ambil2 + salah_ambil3 + salah_ambil4 + salah_ambil5; salah_taruh_resultant = salah_taruh1 + salah_taruh2 + salah_taruh3 + salah_taruh4 + salah_taruh5; if(salah_ambil_resultant == "") salah_ambil_resultant = "0-"; if(salah_taruh_resultant == "") salah_taruh_resultant = "0-"; to_sends = to_string(frm_data_received.ids) + ";" +salah_ambil_resultant+";"+salah_taruh_resultant+ ";"+to_string(blinking_now) +";~"; if(TCP_Data_Last_Sent.find(to_sends) == -1) { dsp.step5(to_string(blinking_now).c_str(),true); LCD_Step_4 = 0; socket.send(to_sends.c_str(), to_sends.length()); TCP_Data_Last_Sent = to_sends; } } else { if(done_1 && done_2 && done_3 && done_4 && done_5) { lst_salah_hst.clear(); real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = 64; blinking_now = 0; printf("Finish\r\n"); salah_ambil_resultant = "0-"; salah_taruh_resultant = "0-"; ibutton_code.clear(); to_sends = to_string(frm_data_received.ids) + ";"+salah_ambil_resultant+";"+salah_taruh_resultant+";~"; socket.send(to_sends.c_str(), to_sends.length()); to_sends = ""; LCD_Step_4 = 0; step = 0; if(frm_data_received.ids == 3) { dsp.step4(to_string(frm_data_received._key_id).c_str(),false); } else if(frm_data_received.ids == 1) { dsp.step0(); } } else { real_blink_id_1 = 64; real_blink_id_2 = 64; real_blink_id_3 = 64; real_blink_id_4 = 64; real_blink_id_5 = 64; blinking_now = 0; if(LCD_Step_4 == 0) { if(frm_data_received.ids== 1) { dsp.step2(to_string(frm_data_received._key_id).c_str()); wait(1); LCD_Step_4 = 1; } else if(frm_data_received.ids == 3) { dsp.step4(to_string(frm_data_received._key_id).c_str(),true); wait(1); LCD_Step_4 = 1; } } } } } break; } } } } int main() { //serial_rx_tick.attach(&RS485_Recv,0.01); TCP_Cek_Data_Last_Sent = "2;0-;0-;~"; ids = 0; board_sum = 5; wait(0.01); dsp.init(); thd_Cek_Ibutton.start(Cek_Ibutton); thd_Buzzer.start(Cek_Salah_Buzzer); //thd_LCD.start(Cek_LCD_State); //thd_RS485_Recv.start(RS485_Recv); FindingServer(); } string Byte_to_StringBinary(byte data_byte) { string data_temp; for(uint8_t i = 0; i <8; i++) { if((data_byte>>i)&0x01) { data_temp[abs(i-7)] += '1'; } else data_temp[abs(i-7)] += '0'; } return data_temp; } uint8_t StringBinary_to_Byte(string data_binary) { uint8_t data_temp = 0; bitset<8> b(data_binary); unsigned char c = ( b.to_ulong() & 0xFF); data_temp = static_cast<uint8_t>(c); return data_temp; } uint8_t Get_Row(uint8_t key_id) { uint8_t data_temp = 0; data_temp = key_id/(board_sum*8); return data_temp; } unsigned short Get_CRC_Modbus(byte data_byte[]) { unsigned short data_temp; data_temp = calculate_crc16_Modbus(reinterpret_cast<char*>(data_byte), 6); return data_temp; } byte to_send[6] = {0x00,0x03,0x14,0x15,0x01,0x00}; void Send_RS485(uint8_t board,uint8_t key_id,uint8_t key_id_blinking,bool Cek_Respon) { to_send[0] = board+1; to_send[2] = key_id; to_send[3] = key_id_blinking; //printf("Calculating crc : "); unsigned short __crc = Get_CRC_Modbus(to_send); //printf("%02X\r\n",__crc); memcpy(buffer_crc,(unsigned char*)&(__crc),sizeof(short)); byte _eof = 0x0D; byte all_to_send[9]; all_to_send[0] = board+1; all_to_send[1] = to_send[1]; all_to_send[2] = to_send[2]; all_to_send[3] = to_send[3]; all_to_send[4] = to_send[4]; all_to_send[5] = to_send[5]; all_to_send[6] = buffer_crc[1]; all_to_send[7] = buffer_crc[0]; all_to_send[8] = _eof; Resend: printf("Data recv : "); for(uint8_t i = 0; i<15; i++) { printf("%02X ",respon_from_slave[i]); } printf("\r\n"); wait(0.05); rede = 1; for(uint8_t i = 0; i<9; i++) { dv.putc(all_to_send[i]); } if(Cek_Respon) printf("Send Complete to %d\r\n",board+1); if(!Cek_Respon) { intr_Done = true; } else { //printf("Trying to received%d..\r\n",board+1); memset(respon_from_slave, 0, sizeof respon_from_slave); intr_Done = false; ids = 0; rede = 0; while(!intr_Done) { while(dv.readable()) { char tempbuf = dv.getc(); if(ids == 0 && tempbuf == 0xFF) { } else { respon_from_slave[ids] = tempbuf; ids++; } } if((respon_from_slave[0] == board+1) && (respon_from_slave[14] == 0x0D)) intr_Done = true; else goto Resend; } } } void Cek_Ibutton() { while(1) { ibutton.DetectiButton(); if(ibutton.IsTaping()) tap = true; else tap = false; if(tap != lasttap) { lasttap = tap; if(tap) { string dataButton; dataButton.clear(); dataButton = ibutton.GetData(); if(dataButton.length()== 12) { ibutton_code = dataButton; printf("[Data Button : %s]\r\n", dataButton.c_str()); } } } } } void Cek_Salah_Buzzer() { while(1) { if(real_blink_id_1 != 64 || real_blink_id_2 != 64 || real_blink_id_3 != 64 || real_blink_id_4 != 64|| real_blink_id_5 != 64) { buzz.play(3); } wait(0.2); } } void Cek_LCD_State() { while(1) { if(LCD_Step == 0) { wait_ms(500); if((step == 0 || step == 4) && blinking_now != 0) { dsp.step5(to_string(blinking_now).c_str(),true); wait_ms(500); LCD_Step = 1; } else if(step == 0 && blinking_now == 0) { dsp.step0(); LCD_Step = 1; } else if(step == 4 && blinking_now == 0) { dsp.step2(to_string(frm_data_received._key_id).c_str()); LCD_Step = 1; } } } } string frames; string First_Update() { frames.clear(); for(uint8_t i = 0; i<board_sum; i++) { wait_ms(50); intr_Done = false; ids = 0; bool done = false; waiting_resp = true; Send_RS485(i,64,64,true); for(uint8_t a = 4; a<12; a++) { uint8_t temp_id = a; switch(i) { case 0: { Row_Board1_Last[temp_id-4] = respon_from_slave[a]; //printf("%02X\r\n",Row_Board1_Last[temp_id-5]); } break; case 1: { Row_Board2_Last[temp_id-4] = respon_from_slave[a]; //printf("%02X\r\n",Row_Board2_Last[temp_id-5]); } break; case 2: { Row_Board3_Last[temp_id-4] = respon_from_slave[a]; //printf("%02X\r\n",Row_Board3_Last[temp_id-5]); } break; case 3: { Row_Board4_Last[temp_id-4] = respon_from_slave[a]; //printf("%02X\r\n",Row_Board4_Last[temp_id-5]); } break; case 4: { Row_Board5_Last[temp_id-4] = respon_from_slave[a]; //printf("%02X\r\n",Row_Board5_Last[temp_id-5]); } break; } } } string bin_string; Frame_To_Send.ids = ""; Frame_To_Send.key_off = ""; Frame_To_Send.key_on = ""; string key_ids; for (uint8_t i = 0; i < 5; i++) { for (uint8_t j = 0; j < 8; j++) { string bin_string = ""; if (i == 0) bin_string = Byte_to_StringBinary(Row_Board1_Last[j]); if (i == 1) bin_string = Byte_to_StringBinary(Row_Board2_Last[j]); if (i == 2) bin_string = Byte_to_StringBinary(Row_Board3_Last[j]); if (i == 3) bin_string = Byte_to_StringBinary(Row_Board4_Last[j]); if (i == 4) bin_string = Byte_to_StringBinary(Row_Board5_Last[j]); //printf("board[%d][%d] = %s\r\n",i,j,bin_string.c_str()); for (uint8_t k = 0; k < 8; k++) { if (bin_string[abs(k-7)] == '1') { key_ids = to_string((40*j)+k+(8*i)+1); Frame_To_Send.key_on += (key_ids+"-"); } else { key_ids = to_string((40*j)+k+(8*i)+1); Frame_To_Send.key_off += (key_ids+"-"); } } } } if(Frame_To_Send.key_on == "") { Frame_To_Send.key_on = "0-"; } if(Frame_To_Send.key_off == "") { Frame_To_Send.key_off = "0-"; } Frame_To_Send.ids = "4"; frames = Frame_To_Send.ids + ";" + Frame_To_Send.key_on + ";~"; printf("Sent First Update : %s\r\n",frames.c_str()); return frames; } string data_bin_pred; void Make_Prediction(uint8_t board_numb,uint8_t baris, uint8_t kolom) { printf("baris = %d\r\n",baris); printf("kolom = %d\r\n",kolom); memcpy(Row_Board1_Predict,Row_Board1_Last,sizeof(Row_Board1_Predict)); memcpy(Row_Board2_Predict,Row_Board2_Last,sizeof(Row_Board2_Predict)); memcpy(Row_Board3_Predict,Row_Board3_Last,sizeof(Row_Board3_Predict)); memcpy(Row_Board4_Predict,Row_Board4_Last,sizeof(Row_Board4_Predict)); memcpy(Row_Board5_Predict,Row_Board5_Last,sizeof(Row_Board5_Predict)); board_numb += 1; if(board_numb == 1) { data_bin_pred.clear(); data_bin_pred = Byte_to_StringBinary(Row_Board1_Predict[baris]); printf("%s\r\n",data_bin_pred.c_str()); if(frm_data_received.cmd_id == 1) { data_bin_pred[abs(kolom-7)] = '0'; } else if(frm_data_received.cmd_id == 2) { data_bin_pred[abs(kolom-7)] = '1'; } Row_Board1_Predict[baris] = StringBinary_to_Byte(data_bin_pred.c_str()); } else if(board_numb == 2) { data_bin_pred.clear(); data_bin_pred = Byte_to_StringBinary(Row_Board2_Predict[baris]); printf("%s\r\n",data_bin_pred.c_str()); if(frm_data_received.cmd_id == 1) { data_bin_pred[abs(kolom-7)] = '0'; } else if(frm_data_received.cmd_id == 2) { data_bin_pred[abs(kolom-7)] = '1'; } Row_Board2_Predict[baris] = StringBinary_to_Byte(data_bin_pred.c_str()); } else if(board_numb == 3) { data_bin_pred.clear(); data_bin_pred = Byte_to_StringBinary(Row_Board3_Predict[baris]); printf("%s\r\n",data_bin_pred.c_str()); if(frm_data_received.cmd_id == 1) { data_bin_pred[abs(kolom-7)] = '0'; } else if(frm_data_received.cmd_id == 2) { data_bin_pred[abs(kolom-7)] = '1'; } Row_Board3_Predict[baris] = StringBinary_to_Byte(data_bin_pred.c_str()); } else if(board_numb == 4) { data_bin_pred.clear(); data_bin_pred = Byte_to_StringBinary(Row_Board4_Predict[baris]); printf("%s\r\n",data_bin_pred.c_str()); if(frm_data_received.cmd_id == 1) { data_bin_pred[abs(kolom-7)] = '0'; } else if(frm_data_received.cmd_id == 2) { data_bin_pred[abs(kolom-7)] = '1'; } Row_Board4_Predict[baris] = StringBinary_to_Byte(data_bin_pred.c_str()); } else if(board_numb == 5) { data_bin_pred.clear(); data_bin_pred = Byte_to_StringBinary(Row_Board5_Predict[baris]); printf("%s\r\n",data_bin_pred.c_str()); if(frm_data_received.cmd_id == 1) { data_bin_pred[abs(kolom-7)] = '0'; } else if(frm_data_received.cmd_id == 2) { data_bin_pred[abs(kolom-7)] = '1'; } Row_Board5_Predict[baris] = StringBinary_to_Byte(data_bin_pred.c_str()); } }