void ICACHE_FLASH_ATTR user_init(void) { uart_div_modify(0, UART_CLK_FREQ / BAUD); wifi_set_opmode(STATION_MODE); wifi_station_connect(); /*** I²C init ***/ i2c_master_gpio_init(); mpu9250_init(); ak8963_init(); os_delay_us(10000); i2c_scanbus(); /*** LCD Init ***/ ssd1306_init(0); ssd1306_text_small(10, 10, "Init..."); ssd1306_flip(); // ~Charge input PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13); gpio_output_set(0, 0, 0, BIT13); // Button inputs buttons_init(); ak8963_calibration_start(10000, on_ak8963_calibration); os_printf("Startup\r\n"); }
/** * \brief Initialize SSD1306 controller and LCD display. * It will also write the graphic controller RAM to all zeroes. * * \note This function will clear the contents of the display. */ void gfx_mono_ssd1306_init(void) { uint8_t page; uint8_t column; #ifdef CONFIG_SSD1306_FRAMEBUFFER gfx_mono_set_framebuffer(framebuffer); #endif /* Initialize the low-level display controller. */ ssd1306_init(); /* Set display to output data from line 0 */ ssd1306_set_display_start_line_address(0); /* Clear the contents of the display. * If using a framebuffer (SPI interface) it will both clear the * controller memory and the framebuffer. */ for (page = 0; page < GFX_MONO_LCD_PAGES; page++) { for (column = 0; column < GFX_MONO_LCD_WIDTH; column++) { gfx_mono_ssd1306_put_byte(page, column, 0x00, true); } } }
void init_platform() { button_init(&select_btn, PIN_PA14); button_init(&down_btn, PIN_PA15); device.speed = 255; device.inclination = 255; gfx_mono_init(); ssd1306_init(); configure_tc_cadence(); cadence_sensor_init(); // The page address to write to uint8_t page_address = 0; // The column address, or the X pixel. uint8_t column_address = 0; ssd1306_clear_buffer(); gfx_mono_draw_string("Accelerometer",1, 18, &sysfont); gfx_mono_draw_string("Setup",37, 32, &sysfont); ssd1306_write_display(); gfx_mono_active_menu = SPEED_VIEW; }
int main(void) { uint8_t page_address; uint8_t column_address; uint8_t start_line_address = 0; volatile uint16_t delay = 10000; board_init(); sysclk_init(); // Initialize SPI and SSD1306 controller ssd1306_init(); // set addresses at beginning of display ssd1306_set_page_address(0); ssd1306_set_column_address(0); // fill display with lines for (page_address = 0; page_address <= 4; page_address++) { ssd1306_set_page_address(page_address); for (column_address = 0; column_address < 128; column_address++) { ssd1306_set_column_address(column_address); /* fill every other pixel in the display. This will produce horizontal lines on the display. */ ssd1306_write_data(0x6F); } } // scroll the display using hardware support in the LCD controller while (true) { ssd1306_set_display_start_line_address(start_line_address++); clock_delay_msec(250); } }
int main(void) { #if defined(NSEC_HARDCODED_BLE_DEVICE_ID) sprintf(g_device_id, "%.8s", NSEC_STRINGIFY(NSEC_HARDCODED_BLE_DEVICE_ID)); #else sprintf(g_device_id, "NSEC%04X", (uint16_t)(NRF_FICR->DEVICEID[1] % 0xFFFF)); #endif g_device_id[9] = '\0'; #ifdef NSEC_CTF_ADD_FLAGS static volatile char flag1[] = "FLAG-60309301fa5b4a4e990392ead6ac7b5f"; printf("%s", flag1); // Don't optimize out flag1 rot13(); #endif /* * Initialize base hardware */ log_init(); power_init(); softdevice_init(); timer_init(); init_WS2812FX(); ssd1306_init(); gfx_setTextBackgroundColor(SSD1306_WHITE, SSD1306_BLACK); nsec_buttons_init(); /* * Initialize bluetooth stack */ create_ble_device(g_device_id); configure_advertising(); nsec_led_ble_init(); init_identity_service(); start_advertising(); nsec_battery_manager_init(); nsec_status_bar_init(); nsec_status_set_name(g_device_id); nsec_status_set_badge_class(NSEC_STRINGIFY(NSEC_HARDCODED_BADGE_CLASS)); nsec_status_set_ble_status(STATUS_BLUETOOTH_ON); load_stored_led_settings(); nsec_intro(); show_main_menu(); /* * Main loop */ while(true) { service_WS2812FX(); nsec_storage_update(); power_manage(); } return 0; }
void init(char *_i2c_bus) { assert(_i2c_bus); if (initialized) return; i2c_bus_open(&i2c_bus, _i2c_bus); i2c_dev_init(&i2c_dev, &i2c_bus, 0x3d); ssd1306_init(&ssd, &i2c_dev); initialized = true; }
void init() { P1DIR &= ~(BIT_2|BIT_3); P0DIR = 0; P1DIR = 1; EA = 1; hal_w2_configure_master(HAL_W2_100KHZ); ssd1306_init(); ssd1306_puts_8x16(0, 0, "nRF24LE1"); }
/***************************************************************************//** * @brief * Initialize OLED device * * @details * * @note * ******************************************************************************/ void miniStm32_hw_oled_init(void) { rt_uint32_t flag; rt_uint8_t status; do { /* Init OLED info */ flag = RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STANDALONE; //RT_DEVICE_FLAG_DMA_TX oled_info.pixel_format = RTGRAPHIC_PIXEL_FORMAT_MONO; oled_info.bits_per_pixel = 1; oled_info.width = MINISTM32_OLED_WIDTH; oled_info.height = MINISTM32_OLED_HEIGHT; oled_info.framebuffer = RT_NULL; //(rt_uint8_t *)frame_buffer; // if (miniStm32_oled_register(&oled_device, OLED_DEVICE_NAME, flag, RT_NULL) != RT_EOK) if (miniStm32_oled_register(&oled_device, OLED_DEVICE_NAME, flag, (void *)&oled_ops) != RT_EOK) { break; } /* Init OLED lock */ if (rt_sem_init(&oled_lock, OLED_DEVICE_NAME, 1, RT_IPC_FLAG_FIFO) != RT_EOK) { break; } /* Init ssd1306 */ if (ssd1306_init() != RT_EOK) { break; } oled_readStatus(&status); oled_debug("OLED: status %x\n", status); /* Set as rtgui graphic driver */ if (rtgui_graphic_set_device(&oled_device) != RT_EOK) { break; } oled_debug("OLED: H/W init OK!\n"); return; } while(0); oled_debug("OLED err: H/W init failed!\n"); }
/***************************************************************************//** * @brief * Initialize OLED device * * @details * * @note * * @param[in] dev * Pointer to device descriptor * * @return * Error code ******************************************************************************/ static rt_err_t board_oled_init(rt_device_t dev) { do { #if (OLED_DEVICE_INTERFACE == INTERFACE_4WIRE_SPI) struct bsp_spi_device *spi; /* Open SPI device */ if (rt_device_open(spi_dev, RT_DEVICE_OFLAG_RDWR) != RT_EOK) { break; } /* Set SPI speed */ spi = (struct bsp_spi_device *)(spi_dev->user_data); spi->spi_device->CR1 &= ~0x0038; spi->spi_device->CR1 |= OLED_SPI_SPEED; #endif /* Init OLED lock */ if (rt_sem_init(&oled_lock, OLED_DEVICE_NAME, 1, RT_IPC_FLAG_FIFO) != RT_EOK) { break; } /* Init ssd1306 */ if (ssd1306_init() != RT_EOK) { break; } #if (OLED_DEVICE_INTERFACE == INTERFACE_8BIT_80XX) rt_uint8_t status; oled_readStatus(&status); oled_debug("OLED: status %x\n", status); #endif oled_debug("OLED: Init OK\n"); return RT_EOK; } while (0); rt_kprintf("OLED err: Init failed!\n"); return -RT_ERROR; }
int main(void) { //! the page address to write to uint8_t page_address; //! the column address, or the X pixel. uint8_t column_address; //! store the LCD controller start draw line uint8_t start_line_address = 0; board_init(); sysclk_init(); // Initialize SPI and SSD1306 controller ssd1306_init(); // set addresses at beginning of display ssd1306_set_page_address(0); ssd1306_set_column_address(0); // fill display with lines for (page_address = 0; page_address <= 7; page_address++) { ssd1306_set_page_address(page_address); for (column_address = 0; column_address < 128; column_address++) { ssd1306_set_column_address(column_address); /* fill every other pixel in the display. This will produce horizontal lines on the display. */ ssd1306_write_data(0x6F); } } // scroll the display using hardware support in the LCD controller while (true) { ssd1306_set_display_start_line_address(start_line_address++); delay_ms(250); } }
void user_init(void) { #if (OVERCLOCK) sdk_system_update_cpu_freq(160); #endif // Setup HW uart_set_baud(0, 115200); printf("SDK version:%s\n", sdk_system_get_sdk_version()); #if (I2C_CONNECTION) i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_400K); #else #if (CS_PIN == 15) spi_init(SPI_BUS, SPI_MODE0, SPI_FREQ_DIV_8M, true, SPI_LITTLE_ENDIAN, false); #else spi_init(SPI_BUS, SPI_MODE0, SPI_FREQ_DIV_8M, true, SPI_LITTLE_ENDIAN, true); gpio_enable(CS_PIN, GPIO_OUTPUT); #endif #endif #if (RST_PIN != LV_DRIVER_NOPIN) gpio_enable(RST_PIN, GPIO_OUTPUT); #endif /*Gui initialization*/ lv_init(); /*Screen initialization*/ #if (I2C_CONNECTION) dev.i2c_dev = (lv_i2c_handle_t)&i2c_dev; #else dev.spi_dev = (lv_spi_handle_t)&spi_dev; #endif dev.protocol = PROTOCOL ; //SSD1306_PROTO_SPI3; dev.screen = SH1106_SCREEN; //SSD1306_SCREEN, SH1106_SCREEN dev.width = LV_HOR_RES; dev.height = LV_VER_RES; dev.rst_pin = RST_PIN; //No RST PIN USED while (ssd1306_init(&dev) != 0) { printf("%s: failed to init SSD1306 lcd\n", __func__); vTaskDelay(SECOND); } ssd1306_set_whole_display_lighting(&dev, true); /*inverse screen (180°) */ ssd1306_set_scan_direction_fwd(&dev,true); ssd1306_set_segment_remapping_enabled(&dev, false); vTaskDelay(SECOND); /*lvgl screen registration */ lv_disp_drv_t disp_drv; lv_disp_drv_init(&disp_drv); /*Set up the functions to access to your display*/ disp_drv.disp_flush = ssd1306_flush; /*Used in buffered mode (LV_VDB_SIZE != 0 in lv_conf.h)*/ disp_drv.disp_fill = NULL;//ex_disp_fill; /*Used in unbuffered mode (LV_VDB_SIZE == 0 in lv_conf.h)*/ disp_drv.disp_map = NULL;//ex_disp_map; /*Used in unbuffered mode (LV_VDB_SIZE == 0 in lv_conf.h)*/ disp_drv.vdb_wr = ssd1306_vdb_wr; lv_disp_drv_register(&disp_drv); /* Create user interface task */ xTaskCreate(ssd1306_task, "ssd1306_task", 512, NULL, 2, NULL); font_timer_handle = xTimerCreate("font_timer", 5 * SECOND, pdTRUE, NULL, font_timer); xTimerStart(font_timer_handle, 0); #if (!TICK_HANDLER && !LV_TICK_CUSTOM) lvgl_timer_handle = xTimerCreate("lvgl_timer", TICK_INC_MS/portTICK_PERIOD_MS, pdTRUE, NULL, lvgl_timer); xTimerStart(lvgl_timer_handle, 0); #endif }
int main(int argc, char * argv[]) { printf("Starting SSD1306 Test\n"); int spiChannel = 0; int resetPin = 17; int dcPin = 21; printf("Using SPI Channel %d\n", spiChannel); printf("Reset Pin = %d, DC Pin = %d\n", resetPin, dcPin); /* * 10 MHz did work on a breadboard * safer to use slower speeds probably * 200 kHz is the approximate minimum * otherwise not all data will be transmitted */ int clock = 200000; SSD1306 * disp = ssd1306_create(spiChannel, resetPin, dcPin, clock); printf("Init\n"); ssd1306_init(disp, SSD1306_ROWS_64, SSD1306_VCCSATE_SWITCHCAP); int y = 0; int x = 0; for (; x < 100; x += 1) { for (y = 0; y < 10; ++y) { ssd1306_setPixel(disp, x, y, 1); } } for (x = 0; x < 100; x += 10) { for (y = 0; y < 10; ++y) { ssd1306_setPixel(disp, x, y, 0); } } printf("Display 10 white Boxes\n"); ssd1306_display(disp); ssd1306_delay(1000); printf("Clear\n"); ssd1306_clear(disp, 0); printf("Draw Lines\n"); int i; for (i=0; i < 128; i+=4) { ssd1306_drawLine(disp, 0, 0, i, 64-1, 1); ssd1306_display(disp); } for (i=0; i < 64; i+=4) { ssd1306_drawLine(disp, 0, 0, 128-1, i, 1); ssd1306_display(disp); } printf("Start Scrool Right\n"); ssd1306_startScrollRight(disp, 0x00, 0x0F); ssd1306_delay(2000); ssd1306_stopScroll(disp); ssd1306_delay(1000); printf("Start Scrool Left\n"); ssd1306_startScrollLeft(disp, 0x00, 0x0F); ssd1306_delay(2000); ssd1306_stopScroll(disp); ssd1306_delay(1000); ssd1306_destroy(disp); return 0; }
int main(void) { uint8_t i; uint8_t temperature[BUFFER_SIZE]; uint8_t light[BUFFER_SIZE]; uint8_t value_disp[5]; uint32_t adc_value; double temp; // Initialize clocks. sysclk_init(); // Initialize GPIO states. board_init(); // Configure ADC for light sensor. configure_adc(); // Initialize at30tse. at30tse_init(); // Configure IO1 buttons. configure_buttons(); // Initialize SPI and SSD1306 controller. ssd1306_init(); ssd1306_clear(); // Clear internal buffers. for (i = 0; i < BUFFER_SIZE; ++i) { temperature[i] = 0; light[i] = 0; } while (true) { /* Refresh page title only if necessary. */ if (app_mode_switch > 0) { app_mode = app_mode_switch - 1; // Clear screen. ssd1306_clear(); ssd1306_set_page_address(0); ssd1306_set_column_address(0); /* Temperature mode. */ if (app_mode == 0) { ioport_set_pin_level(IO1_LED1_PIN, IO1_LED1_ACTIVE); ioport_set_pin_level(IO1_LED2_PIN, !IO1_LED2_ACTIVE); ioport_set_pin_level(IO1_LED3_PIN, !IO1_LED3_ACTIVE); ssd1306_write_text("Temperature sensor:"); } /* Light mode. */ else if (app_mode == 1) { ioport_set_pin_level(IO1_LED2_PIN, IO1_LED2_ACTIVE); ioport_set_pin_level(IO1_LED1_PIN, !IO1_LED1_ACTIVE); ioport_set_pin_level(IO1_LED3_PIN, !IO1_LED3_ACTIVE); ssd1306_write_text("Light sensor:"); } /* SD mode. */ else { ioport_set_pin_level(IO1_LED3_PIN, IO1_LED3_ACTIVE); ioport_set_pin_level(IO1_LED1_PIN, !IO1_LED1_ACTIVE); ioport_set_pin_level(IO1_LED2_PIN, !IO1_LED2_ACTIVE); display_sd_info(); } app_mode_switch = 0; } // Shift graph buffers. for (i = 0; i < BUFFER_SIZE - 1; ++i) { temperature[i] = temperature[i + 1]; light[i] = light[i + 1]; } // Get temperature in a range from 0 to 40 degrees. if (at30tse_read_temperature(&temp) == TWI_SUCCESS) { // Don't care about negative temperature. if (temp < 0) temp = 0; // Update temperature for display. // Note: -12 in order to rescale for better rendering. if (temp < 12) temperature[BUFFER_SIZE - 1] = 0; else temperature[BUFFER_SIZE - 1] = temp - 12; } else { // Error print zero values. temperature[BUFFER_SIZE - 1] = 0; } // Get light sensor information. // Rescale for better rendering. adc_start(ADC); adc_value = adc_get_channel_value(ADC, ADC_CHANNEL_4); light[BUFFER_SIZE - 1] = 24 - adc_value * 24 / 4096; // Print temperature in text format. if (app_mode == 0) { sprintf(value_disp, "%d", (uint8_t)temp); ssd1306_set_column_address(95); ssd1306_write_command(SSD1306_CMD_SET_PAGE_START_ADDRESS(0)); ssd1306_write_text(" "); ssd1306_write_text(value_disp); // Display degree symbol. ssd1306_write_data(0x06); ssd1306_write_data(0x06); ssd1306_write_text("c"); // Refresh graph. ssd1306_draw_graph(0, 1, BUFFER_SIZE, 3, temperature); } else if (app_mode == 1) { sprintf(value_disp, "%lu", 100 - (adc_value * 100 / 4096)); ssd1306_set_column_address(98); ssd1306_write_command(SSD1306_CMD_SET_PAGE_START_ADDRESS(0)); ssd1306_write_text(" "); ssd1306_write_text(value_disp); ssd1306_write_text("%"); // Refresh graph. ssd1306_draw_graph(0, 1, BUFFER_SIZE, 3, light); } else { // Is card has been inserted or removed? if (sd_status_update == 1) { // Clear screen. ssd1306_clear(); ssd1306_set_page_address(0); ssd1306_set_column_address(0); // Show SD card info. display_sd_info(); sd_status_update = 0; } } /* Wait and stop screen flickers. */ delay_ms(50); } }
int main(void) { // asm("nop"); rtc_init(); //changing the clock to 32MHz enable_oscillator(OSC_RC32MEN_bm); sysclk_prescaler(CLK_PSADIV_1_gc,CLK_PSBCDIV_1_1_gc); sysclk_source(CLK_SCLKSEL_RC32M_gc); usart_config(&USARTC0,&PORTC,USART_CMODE_ASYNCHRONOUS_gc,USART_PMODE_DISABLED_gc,USART_CHSIZE_8BIT_gc,false,false); usart_baud(&USARTC0,9600,-3); FILE my_stdio; create_file_stream(&my_stdio,&USARTC0_putchar,&USARTC0_getchar); set_stdio_stream(&my_stdio); port_direction_set_mask(&PORTR,1<<0); uint8_t page; uint8_t column; gfx_mono_set_framebuffer(framebuffer); ssd1306_init(); ssd1306_clear(); ssd1306_set_display_start_line_address(0); for (page = 0; page < GFX_MONO_LCD_PAGES; page++) { for (column = 0; column < GFX_MONO_LCD_WIDTH; column++) { gfx_mono_ssd1306_put_byte(page, column, 0x00, 1); } } ssd1306_set_page_address(0); ssd1306_write_text("EMON"); rtc_ms_delay(1000); lcd_line_print(0,"EMON YOU ROCK"); esp8266_serial_init(); printf("starting system\n"); printf("-----------------------------------------------------------\n"); #define mqtt_callback_on_message "function(conn, topic, data) print(topic .. \":\" ) if data ~= nil then print(data) end end" // //esp8266_getmode(); esp8266_setmode(ESP8266_WIFI_MODE_STATION); esp8266_available_AP_t myAPdata[10]; int n = esp8266_sta_getap(3000,myAPdata); for(int i=0;i<n;i++){ printf("available ssid : %s\n" , myAPdata[i].BSSID); } esp8266_sta_config("Emon","19031992",NULL,NULL); printf("\nthe wifi mode is %d\n", esp8266_getmode()); esp8266_sta_getmac(); //esp8266_uart_setup(0,9600,8,ESP8266_UART_PARITY_NONE,ESP8266_UART_STOPBITS_1,0); // esp8266_sta_getip(); esp8266_sta_get_status(); lcd_line_print(0,"HABIBUR RAHMAN"); // esp8266_mqtt_create_client("m","clientid", 30 , "user", "password"); esp8266_mqtt_client_connect("m","emon.dlinkddns.com",9000,0,"function(conn) print(\"m:connected\") end"); esp8266_mqtt_client_subscribe("m","sky2",0,"function(conn) print(\"subscribed\") end"); esp8266_mqtt_client_callback_on_message("m",mqtt_callback_on_message); esp8266_mqtt_create_client("n","clientid", 30 , "user", "password"); esp8266_mqtt_client_connect("n","broker.hivemq.com",1883,0,"function(conn) print(\"n:connected\") end"); esp8266_mqtt_client_subscribe("n","dog",0,"function(conn) print(\"subscribed\") end"); esp8266_mqtt_client_callback_on_message("n",mqtt_callback_on_message); int i=0; char numstr[30]; char mydata[100]; char mydata2[100]; char tempcmd[50]; char tempdata[100]; while (1) { esp8266_rx_buff_receive(mydata); if(!strcmp(mydata, "sky2:\r\nkaminey\r\n")){ printf("\n\n******f**k you*****\n\n"); esp8266_mqtt_client_publish("m","sky","test reply .. by emon",0,0,"function(conn) print(\"sent\") end"); printf(mydata2); } else if(!strcmp(mydata, "m:connected\r\n")){ printf("RECONNECTING NOWWWWW!!!"); esp8266_mqtt_client_subscribe("m","sky2",0,"function(conn) print(\"subscribed\") end"); } else if(!strcmp(mydata, "n:connected\r\n")){ printf("RECONNECTING NOW!!!"); esp8266_mqtt_client_subscribe("n","dog",0,"function(conn) print(\"subscribed\") end"); } printf(mydata); ssd1306_clear(); ssd1306_set_page_address(0); ssd1306_write_text(mydata); } }
/** * \brief The main application. */ int main(void) { uint8_t i; uint8_t temperature[BUFFER_SIZE]; uint8_t light[BUFFER_SIZE]; char value_disp[5]; uint32_t adc_value; uint32_t light_value; double temp; /* Initialize clocks. */ sysclk_init(); /* Initialize GPIO states. */ board_init(); /* Configure ADC for light sensor. */ configure_adc(); /* Initialize at30tse. */ at30tse_init(); /* Configure IO1 buttons. */ configure_buttons(); /* Initialize SPI and SSD1306 controller. */ ssd1306_init(); ssd1306_clear(); /* Clear internal buffers. */ for (i = 0; i < BUFFER_SIZE; ++i) { temperature[i] = 0; light[i] = 0; } /* Show the start info. */ multi_language_show_start_info(); /* Wait 3 seconds to show the above message. */ delay_s(3); /* Check for valid firmware in SD card. */ check_valid_firmware(); while (true) { /* Set the trigger and jump to bootloader */ if (reset_flag) { jump_to_bootloader(); } /* Refresh page title only if necessary. */ if (app_mode_switch > 0) { app_mode = (app_mode + 1) % 3; /* Clear screen. */ ssd1306_clear(); ssd1306_set_page_address(0); ssd1306_set_column_address(0); if (app_mode == 0) { /* Temperature mode. */ ioport_set_pin_level(OLED1_LED1_PIN, OLED1_LED1_ACTIVE); ioport_set_pin_level(OLED1_LED2_PIN, !OLED1_LED2_ACTIVE); ioport_set_pin_level(OLED1_LED3_PIN, !OLED1_LED3_ACTIVE); multi_language_show_temperature_info(); } else if (app_mode == 1) { /* Light mode. */ ioport_set_pin_level(OLED1_LED2_PIN, OLED1_LED2_ACTIVE); ioport_set_pin_level(OLED1_LED1_PIN, !OLED1_LED1_ACTIVE); ioport_set_pin_level(OLED1_LED3_PIN, !OLED1_LED3_ACTIVE); multi_language_show_light_info(); } else { /* SD mode. */ ioport_set_pin_level(OLED1_LED3_PIN, OLED1_LED3_ACTIVE); ioport_set_pin_level(OLED1_LED1_PIN, !OLED1_LED1_ACTIVE); ioport_set_pin_level(OLED1_LED2_PIN, !OLED1_LED2_ACTIVE); sd_listing_pos = 0; /* Show SD card info. */ display_sd_info(); } app_mode_switch = 0; } /* Shift graph buffers. */ for (i = 0; i < (BUFFER_SIZE - 1); ++i) { temperature[i] = temperature[i + 1]; light[i] = light[i + 1]; } /* Get temperature. */ if (at30tse_read_temperature(&temp) == TWI_SUCCESS) { /* Don't care about negative temperature. */ if (temp < 0) { temp = 0; } /* Update temperature for display. */ /* Note: rescale to 0~24 for better rendering. */ if (temp > 40) { temperature[BUFFER_SIZE - 1] = 24; } else { temperature[BUFFER_SIZE - 1] = (uint8_t)temp * 24 / 40; } } else { /* Error print zero values. */ temperature[BUFFER_SIZE - 1] = 0; } /* Get light sensor information. */ /* Rescale to 0~24 for better rendering. */ adc_start_software_conversion(ADC); adc_value = adc_channel_get_value(ADC, ADC_CHANNEL_0); light[BUFFER_SIZE - 1] = 24 - adc_value * 24 / 1024; if (app_mode == 0) { /* Display temperature in text format. */ sprintf(value_disp, "%d", (uint8_t)temp); ssd1306_set_column_address(98); ssd1306_write_command(SSD1306_CMD_SET_PAGE_START_ADDRESS(0)); ssd1306_write_text(" "); /* Avoid character overlapping. */ if (temp < 10) { ssd1306_clear_char(); } ssd1306_write_text(value_disp); /* Display degree symbol. */ ssd1306_write_data(0x06); ssd1306_write_data(0x06); ssd1306_write_text("c"); /* Refresh graph. */ ssd1306_draw_graph(0, 2, BUFFER_SIZE, 2, temperature); } else if (app_mode == 1) { light_value = 100 - (adc_value * 100 / 1024); sprintf(value_disp, "%lu", light_value); ssd1306_set_column_address(98); ssd1306_write_command(SSD1306_CMD_SET_PAGE_START_ADDRESS(0)); ssd1306_write_text(" "); /* Avoid character overlapping. */ if (light_value < 10) { ssd1306_clear_char(); } ssd1306_write_text(value_disp); ssd1306_write_text("%"); /* Avoid character overlapping. */ if (light_value < 100) { ssd1306_clear_char(); } /* Refresh graph. */ ssd1306_draw_graph(0, 2, BUFFER_SIZE, 2, light); } else { /** * Refresh screen if card was inserted/removed or * browsing content. */ if (sd_update == 1) { /* Clear screen. */ ssd1306_clear(); ssd1306_set_page_address(0); ssd1306_set_column_address(0); if (sd_listing_pos == 0) { /* Show SD card info. */ display_sd_info(); } else { /* List SD card files. */ display_sd_files_unicode(); } sd_update = 0; } } /* Wait and stop screen flickers. */ delay_ms(150); if (app_mode_switch == 0) { pio_enable_interrupt(OLED1_PIN_PUSHBUTTON_1_PIO, OLED1_PIN_PUSHBUTTON_1_MASK); } if (sd_update == 0) { pio_enable_interrupt(OLED1_PIN_PUSHBUTTON_2_PIO, OLED1_PIN_PUSHBUTTON_2_MASK); pio_enable_interrupt(OLED1_PIN_PUSHBUTTON_3_PIO, OLED1_PIN_PUSHBUTTON_3_MASK); } } }
/** * @brief driver initialization. * @param None * @retval None */ static void driver_init(void) { ssd1306_init(); }
int main (void) { //board-specific board_init(); ioport_init(); ssd1306_init(); //v2x power sequencing init_power_seq(); //v2x real time clock init_vrtc(); /************ MAIN IS CURRENTLY BEING USED FOR INITIALIZATION AND TESTING *************/ /* uint16_t i; for (i=0; i<SEQ_SIZE; i++) { seq[i].interval = (i%16)*7+1; seq[i].value = values[i]; } while (1) { run_sequence(seq, SEQ_SIZE); } */ //testing turn off and on //bits_To_Shift_Register(0xFFFF); /* delay_s(1); turn_off(B); delay_s(1); turn_off(D); delay_s(1); turn_on(B); delay_s(1); turn_off(G); */ //int flag = 1; //gpio_set_pin_low(SR_CLEAR); /* state = J; bits_To_Shift_Register(state); //delay_ms(400); state=state|K; //delay_ms(400); bits_To_Shift_Register(state); //delay_ms(400); state=0x0000; bits_To_Shift_Register(state); //delay_ms(400); state=A; bits_To_Shift_Register(state); //delay_ms(400); state=B+C+D+G; bits_To_Shift_Register(state); */ while(1){ sleepmgr_enter_sleep(); /* if (flag && ioport_get_pin_level(BUTTON_0_PIN) == BUTTON_0_ACTIVE) { ioport_set_pin_level(LED_0_PIN,!ioport_get_pin_level(LED_0_PIN)); flag = 0; } if (ioport_get_pin_level(BUTTON_0_PIN) == BUTTON_0_INACTIVE) flag = 1; //ioport_set_pin_level(LED_0_PIN,LED_0_INACTIVE); */ /* y = x; x = rtc_get_time(); //delay_ms(50); if (x%50 == 49) delay_ms(10); */ } }