#include "main.h" #include "delay.h" #include "deviceSetup.h" #include "usart.h" #include "ascii.h" #include "timer.h" #include "i2c.h" #include "ssd1306_i2c.h" #include "lcd_oled.h" int main(int argc, char *argv[]) { uint8_t i = 0; uint16_t slaveAddress = 0xC0; uint8_t registerToRead = 0x00; uint8_t i2cRecieved = 0; uint8_t i2cData = 0xFF; i2c_t i2c_1; delayInitMs(8000000, 1000); // Clock Freq and Divider for ARM library pinConfig(pinB3, output, pushPull, def_res, def_speed); pinConfig(pinA0, input, def_stage, pullDown, def_speed); setupInit(); // This is the sescond call of System init the assebly start code is calling it before the main. usartInit( usart2, pinA2, pinA15, 115200, eight, NO_PARITY_CTRL, noFlowControl); //clears screen and send the wellcome messgae print_Usart(usart2, ASCII_clear); print_Usart(usart2, "Hello to our KED project\n\r"); //blinks 10 times to indicate the sicsessfull init if the device for(i = 0 ; i < 2 ; i++) { delayMs(100); pinToggle(pinB3); delayMs(100); } pinWrite(pinB3,0); i2c_init(&i2c_1, I2C_CH_1, i2c_mode_master, 0x00,0x00, i2c_address_count_single, i2c_address_size_7b, i2c_clk_speed_standart, i2c_clk_stretching_disable, i2c_wake_disabled); slaveAddress = SSD1306_I2C_ADDRESS; registerToRead = 0x02; registerToRead = 0x06; i2cData = 0xAA; i2c_check_device(&i2c_1, &slaveAddress); /* Pin Connections of of OLED * GND = GND * VCC = 5V * DO = SCL * D1 = SDA * RES = Require a low to high transition * DC = GND * CS = GND * ADDRESS = 0X3C * FOR I2C opperation * -> R4 & R1 : Has resistor | R2 & R3 : Has no Resistor * -> R8 Needs to be bridged */ lcd_oled_init(&i2c_1 , SSD1306_I2C_ADDRESS); lcd_oled_display(); //Adafruit logo is visible delayMs(1000); lcd_oled_clear(); i = 5; lcd_oled_print_char(i, 5, 'K' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'E' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'D' , WHITE); i += 6; lcd_oled_print_char(i, 5, ' ' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'W' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'E' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'L' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'C' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'O' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'M' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'E' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'S' , WHITE); i += 6; lcd_oled_print_char(i, 5, ' ' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'Y' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'O' , WHITE); i += 6; lcd_oled_print_char(i, 5, 'U' , WHITE); for(i = 15; i < 50; i++) { lcd_oled_draw_pixel(i,i,WHITE); } for(i = 15; i < 53; i++) { lcd_oled_draw_pixel(15,i,WHITE); } lcd_oled_display(&i2c_1); delayMs(2000); print_Usart(usart2, "\n\r"); print_Usart(usart2, "All Is Working fine "); print_Usart(usart2, "\n\r"); while(1) { delayMs(100); pinToggle(pinB3); delayMs(100); } return 1; }