ssd1306_test.c 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #include <stdio.h>
  2. #include "pico/stdlib.h"
  3. #include "hardware/i2c.h"
  4. #define I2C_SCL PICO_DEFAULT_I2C_SCL_PIN
  5. #define I2C_SDA PICO_DEFAULT_I2C_SDA_PIN
  6. #define SSD1306_ADDR 0x3C
  7. #define SSD1306_CB_CONTINUE 0x80
  8. #define SSD1306_SET_DISP_OFF 0xAE // Sleepモードに
  9. #define SSD1306_SET_DISP_ON 0xAF // Normalモードに
  10. int main()
  11. {
  12. stdio_init_all();
  13. // I2C0を400kbpsで初期化
  14. i2c_init(i2c0, 400*1000);
  15. // ピンをI2Cに割り当て
  16. gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);
  17. gpio_set_function(I2C_SCL, GPIO_FUNC_I2C);
  18. gpio_disable_pulls(I2C_SDA);
  19. gpio_disable_pulls(I2C_SCL);
  20. // 外付けでプルアップした場合次の2行をコメントアウト
  21. gpio_pull_up(I2C_SDA);
  22. gpio_pull_up(I2C_SCL);
  23. uint8_t cmd_buf[2] = {0x80, SSD1306_SET_DISP_OFF};
  24. int ret;
  25. ret = i2c_write_blocking(i2c0, SSD1306_ADDR, cmd_buf, sizeof(cmd_buf),false );
  26. if(ret != sizeof(cmd_buf)) {
  27. printf("I2C Error\n");
  28. }
  29. sleep_ms(2000);
  30. cmd_buf[1] = SSD1306_SET_DISP_ON;
  31. ret = i2c_write_blocking(i2c0, SSD1306_ADDR, cmd_buf, sizeof(cmd_buf),false );
  32. if(ret != sizeof(cmd_buf)) {
  33. printf("I2C Error\n");
  34. }
  35. while (true) {
  36. tight_loop_contents();
  37. }
  38. }