75,6 → 75,7 |
} |
|
BTN_STATUS btns; |
LED_VALUES leds = {0x00}; |
|
int main(void) { |
uint8_t buffer[32]; |
104,7 → 105,7 |
i2c_slave_addr = Read_Address(); |
|
// Delay a bit to allow I2C lines to stabilize |
__delay_ms(1); |
__delay_ms(10); |
|
// Initialize I2C1 in slave mode |
I2C1_DATA i2c1_data; |
114,7 → 115,7 |
// Initialize I2C2 in master mode |
I2C2_DATA i2c2_data; |
I2C2_Init(&i2c2_data); |
I2C2_Configure_Master(I2C_400KHZ); |
I2C2_Configure_Master(I2C_1MHZ); |
|
// Initialize interrupts |
Interrupt_Init(); |
123,19 → 124,14 |
MCP23009_Init(&btns); |
MCP23009_Query(); |
|
LED_VALUES leds = {0x00}; |
TLC59116_Init(); |
// TLC59116_Write_All(&leds); |
|
if (op_state == OP_STATE_IDLE) { |
IO_IOC_Enable(); |
// IO_IOC_Enable(); |
Idle_Animation(); |
} else if (op_state == OP_STATE_ACTIVE) { |
while (1) { |
__delay_ms(1); |
// Read value of buttons |
MCP23009_Query(); |
|
// Check if an I2C message was received |
result = I2C1_Get_Status(); |
if (result) { |
142,17 → 138,47 |
length = I2C1_Read_Buffer(buffer); |
if (length == 1 && buffer[0] == CMD_RESET) { |
Reset_Board(OP_STATE_IDLE); |
} else if (length == 1 && buffer[0] == CMD_ACTIVE) { |
Reset_Board(OP_STATE_ACTIVE); |
} else if (length == 17 && buffer[0] == CMD_SET_LEDS) { |
for (i = 0; i < 16; i++) { |
leds.w[i] = buffer[i+1]; |
leds.w[i] = buffer[i + 1]; |
} |
TLC59116_Write_All(&leds); |
} |
} |
|
I2C2_Master_Restart(MCP23009_ADDR, MCP23009_GPIOA, 1); |
do { |
result = I2C2_Get_Status(); |
} while (!result); |
length = I2C2_Read_Buffer(buffer); |
btns.w = buffer[0]; |
} |
} |
} |
|
void Check_I2C(void) { |
uint8_t buffer[32]; |
uint8_t result, length, i; |
|
// Check if an I2C message was received |
result = I2C1_Get_Status(); |
if (result) { |
length = I2C1_Read_Buffer(buffer); |
if (length == 1 && buffer[0] == CMD_RESET) { |
Reset_Board(OP_STATE_IDLE); |
} else if (length == 1 && buffer[0] == CMD_ACTIVE) { |
Reset_Board(OP_STATE_ACTIVE); |
} else if (length == 17 && buffer[0] == CMD_SET_LEDS) { |
for (i = 0; i < 16; i++) { |
leds.w[i] = buffer[i + 1]; |
} |
TLC59116_Write_All(&leds); |
} |
} |
} |
|
void Idle_Animation(void) { |
LED_VALUES leds = {0}; |
uint8_t led_direction_bar[8] = {1,0,0,0,0,0,0,0}; |
168,6 → 194,9 |
|
while (1) { |
|
// Check to see if a new message was received |
Check_I2C(); |
|
// Update the LEDs in the middle section |
for (i = 0; i < 8; i++) { |
// Change the LED brightness depending on its direction |
240,5 → 269,4 |
// Delay a bit to slow down the animation |
__delay_ms(1); |
} |
|
} |