diff --git a/G3_TP1_labyrinth_slave_etu/src/labyrinth_slave.c b/G3_TP1_labyrinth_slave_etu/src/labyrinth_slave.c index 72cb713f56cf3383d2721ff35b87a213d35d3946..65523172e74d886bf626cc08153b8a57f2abe31e 100644 --- a/G3_TP1_labyrinth_slave_etu/src/labyrinth_slave.c +++ b/G3_TP1_labyrinth_slave_etu/src/labyrinth_slave.c @@ -31,7 +31,6 @@ #define GOAL_H_WALL (LCD_MAX_WIDTH-(2*BALL_RADIUS+1+WALL_WIDTH)) #define GOAL_V_WALL (LCD_MAX_HEIGHT-(2*BALL_RADIUS+1+WALL_WIDTH)-1) - static coord_fx_t labyrinth_points[]={ {80,280},{40,280},{40,190},{END_OF_LINE,LCD_WHITE}, {40,100},{150,100},{150,160},{70,160},{END_OF_LINE,LCD_WHITE}, @@ -46,11 +45,11 @@ static coord_fx_t labyrinth_points[]={ {GOAL_H_WALL-4*BALL_RADIUS-WALL_WIDTH-1,LCD_MAX_HEIGHT-WALL_WIDTH},{GOAL_H_WALL-4*BALL_RADIUS-WALL_WIDTH-1,GOAL_V_WALL},{END_OF_WALLS,END_OF_WALLS} }; - -master_tx_t *mstr_now; -master_tx_t *mstr_prev; +master_tx_t mstr_now[NUMBER_OF_BALLS]; +master_tx_t mstr_prev[NUMBER_OF_BALLS]; bool flag = false; + /* Description: Callback of ethernet module. This function is called when a message is received. * Each ball of the master send its own coordinates that are saved here. * Parameters: data: pointer on data received @@ -59,44 +58,67 @@ bool flag = false; void master_info_rx(void *data, int len) { if(len == sizeof(master_tx_t)){ - if (mstr_now != NULL){ - mstr_prev = mstr_now; - } - mstr_now = (master_tx_t*)data; - /*if(mstr_prev == NULL){ - mstr_now = mstr_prev; - }*/ + master_tx_t *tmpMstr; + tmpMstr = (master_tx_t*)data; + mstr_prev[tmpMstr->ball_id] = mstr_now[tmpMstr->ball_id]; + mstr_now[tmpMstr->ball_id] = *tmpMstr; flag = true; } } +void Start_timer0(){ + LPC_TIM0->TCR = 1; +} + +void delay(int del){ + int start = LPC_TIM0->TC; + for(int i = 0; i<del; i++){ + while((LPC_TIM0->TC - start) < 100000); //passer a 1ms avec 100MHz + } +} +master_tx_t double_buf_rx; +accel_t double_buf_tx; int main(void) { init_lcd(); + Start_timer0(); if(accel_init() != 0) { printf("Accelerometer initialisation failed!\n"); return 1; } - master_tx_t double_buf_rx; - master_tx_t double_buf_tx; + int len_rx = sizeof(master_tx_t)*2; - int len_tx = 1; + int len_tx = sizeof(accel_t)*2; + int rec=sizeof(master_tx_t); + accel_t *j; + //unsigned char *tmpmstr; - ethernet_init(NULL, 0, &double_buf_rx, len_rx, master_info_rx); + j = (accel_t*)ethernet_init((unsigned char*)&double_buf_tx, len_tx, (unsigned char*)&double_buf_rx, len_rx, master_info_rx); draw_labyrinth(labyrinth_points); - + //accel_t ball_acc; while(1) { + delay(20); + if(accel_read(&double_buf_tx) == ACC_NOERROR){ + j = &double_buf_tx; + j = (accel_t*)send_eth(sizeof(accel_t), true); + send_eth(sizeof(accel_t), true); + } + //tmpmstr = rec_eth(&rec); + rec_eth(&rec); if(flag){ - lcd_filled_circle(mstr_prev->ball_coord.x, mstr_prev->ball_coord.y, mstr_prev->radius, LCD_BLACK); - lcd_filled_circle(mstr_now->ball_coord.x, mstr_now->ball_coord.y, mstr_now->radius, mstr_now->color); + //lcd_filled_circle(mstr_prev[tmpmstr->ball_id].ball_coord.x, mstr_prev[tmpmstr->ball_id].ball_coord.y, mstr_prev[tmpmstr->ball_id].radius, LCD_BLACK); + //lcd_filled_circle(mstr_now[tmpmstr->ball_id].ball_coord.x, mstr_now[tmpmstr->ball_id].ball_coord.y, mstr_now[tmpmstr->ball_id].radius, mstr_now[tmpmstr->ball_id].color); + for(int i = 0; i<NUMBER_OF_BALLS; i++){ + lcd_filled_circle(mstr_prev[i].ball_coord.x, mstr_prev[i].ball_coord.y, mstr_prev[i].radius, LCD_BLACK); + lcd_filled_circle(mstr_now[i].ball_coord.x, mstr_now[i].ball_coord.y, mstr_now[i].radius, mstr_now[i].color); + } flag = false; } - } }