#include #include #include #include #include #include "pcf8574.h" /* See the Pioneer 600 Schematic */ static uint8_t LED_ON = 0xEF; static uint8_t LED_OFF = 0xFF; static uint8_t BUZZER_ON = 0x7F; static uint8_t BUZZER_OFF = 0xFF; void pioneer600_led2_on(i2c *i2c) { pcf8574_port_write(i2c, LED_ON); } void pioneer600_led2_off(i2c *i2c) { pcf8574_port_write(i2c, LED_OFF); } void pioneer600_buzzer_on(i2c *i2c) { pcf8574_port_write(i2c, BUZZER_ON); } void pioneer600_buzzer_off(i2c *i2c) { pcf8574_port_write(i2c, BUZZER_OFF); } void pioneer600_read_joystick(i2c *i2c) { uint8_t port; port = pcf8574_port_read(i2c); if (!(port & 0x01)) printf("Key A pressed\n"); else if (!(port & 0x02)) printf("Key B pressed\n"); else if (!(port & 0x04)) printf("Key C pressed\n"); else if (!(port & 0x08)) printf("Key D pressed\n"); else if (port & 0x0F) printf("No keys pressed\n"); } int main(void) { i2c *i2c_pcf8574; uint8_t led_status = LED_OFF; uint8_t buzzer_status = BUZZER_OFF; uint32_t input; uint8_t ret = 0; i2c_pcf8574 = pcf8574_init(0, PCF8574_ADDRESS); if (i2c_pcf8574 == NULL) return EXIT_FAILURE; while (true) { printf("\nEnter choice: 1. Joy stick status 2. Led2 On/Off 3. Buzzer On/Off 4. Exit\n"); scanf("%d", &input); switch (input) { case 1: pioneer600_read_joystick(i2c_pcf8574); break; case 2: if (led_status == LED_OFF) { pioneer600_led2_on(i2c_pcf8574); led_status = LED_ON; } else { pioneer600_led2_off(i2c_pcf8574); led_status = LED_OFF; } break; case 3: if (buzzer_status == BUZZER_OFF) { pioneer600_buzzer_on(i2c_pcf8574); buzzer_status = BUZZER_ON; } else { pioneer600_buzzer_off(i2c_pcf8574); buzzer_status = BUZZER_OFF; } break; case 4: goto exit; break; default: printf("Enter valid input\n"); break; } } exit: ret = pcf8574_free(i2c_pcf8574); if (ret == EXIT_FAILURE) perror("Failed to close I2C port"); return 0; }