diff --git a/module00/ex03/main.c b/module00/ex03/main.c new file mode 100644 index 0000000..f219aa9 --- /dev/null +++ b/module00/ex03/main.c @@ -0,0 +1,45 @@ +#include +#include + +#define SET(REGISTER, BIT) REGISTER |= 1 << BIT +#define CLEAR(REGISTER, BIT) REGISTER &= ~(1 << BIT) +#define TEST(REGISTER, BIT) REGISTER & 1 << BIT +#define TEST_PIN(PORT, BIT) PIN ## PORT & 1 << BIT +#define TOGGLE(REGISTER, BIT) REGISTER ^= 1 << BIT +#define TOGGLE_PIN(PORT, BIT) PIN ## PORT |= 1 << BIT +#define MODE_INPUT(PORT, BIT) CLEAR(DDR ## PORT, BIT) +#define MODE_OUTPUT(PORT, BIT) SET(DDR ## PORT, BIT) +#define IS_PIN_SET(PORT, BIT) (TEST_PIN(PORT, BIT)) == 0 +#define IS_PIN_CLEAR(PORT, BIT) (TEST_PIN(PORT, BIT)) == 1 + +#define D1 0 +#define D2 1 +#define D3 2 +#define D4 4 +#define SW1 2 +#define SW2 4 + +#define ON 1 +#define OFF 0 +#define SWITCH(state) state = (state == ON) ? OFF : ON; + +int main() { + + // FLASHING + + MODE_OUTPUT(B, D1); + MODE_INPUT(D, SW1); + int state = OFF; + while(1) { + if (IS_PIN_SET(D, SW1)) { + SWITCH(state); + } + if (state) { + SET(PORTB, D1); + } + else { + CLEAR(PORTB, D1); + } + _delay_ms(100); + } +} \ No newline at end of file