#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#include "hardware/timer.h"
#include "ssd1306.h"
#include "image.h"
#include "UART.h"
#include "acme_5_outlines_font.h"
#include "bubblesstandard_font.h"
#include "crackers_font.h"
#include "BMSPA_font.h"
#include "renew_font.h"
#include "fivexfive_font.h"
#include "encoder.h"
const uint8_t num_chars_per_disp[]={7,7,7,5};
const uint8_t *fonts[6]= {acme_font, bubblesstandard_font, crackers_font, BMSPA_font, renew_font, fivexfive_font};
#define SLEEPTIME 25
void setup_gpios(void);
void display_write(char *str1); // show strings on 1306
//github for the 1306 lib is here. https://github.com/daschr/pico-ssd1306
int main() {
stdio_init_all();
printf("Welcome to encoder madness...\n");
printf("initialed serial printing (or you wouldn't be reading this)...\n");
printf("configuring pins...\n");
setup_gpios(); // configure GPIOs for I2C (below)
//configure GPIO for Encoder
encoder_init();
//write test message to SSD1306
display_write("Welcome");
while (2 > 0)
{
//get encoder reading.
read_from_encoder();
}
}
/*wiring.
POWER for 1306--connect to "-5 3V3 OUT"
The library by default uses I2C1
use these PICO pins from dev board to the 1306 board.
SDA GP2/pin 4
SCL GP3/pin 5
YES the 1306 can run from 3.3V supply Pico "3V3 OUT"
MAKE SURE to ground the 1306 to the GND pin on PICO
ADDRESSING
7 bit address for 1306 by default is 0x3C
the address silked on the back
of the shitty Chinese BoB's assumes MSB is 1--
that's slave
write to master--not what we are doing here.
So bit shift right the address on the back.
and put it into ssd1306_init below.
*/
void setup_gpios(void) {
i2c_init(i2c1, 400000);
gpio_set_function(2, GPIO_FUNC_I2C);
gpio_set_function(3, GPIO_FUNC_I2C);
gpio_pull_up(2);
gpio_pull_up(3);
}
void display_write(char *str1)
{
// send string to 1306
//initialize display
ssd1306_t disp; // instantiate from struct
disp.external_vcc=false;
ssd1306_init(&disp, 128, 64, 0x3C, i2c1);
ssd1306_clear(&disp); //blank display
/*
@brief draw string with given font
@param[in] p : instance of display
@param[in] x : x starting position of text
@param[in] y : y starting position of text
@param[in] scale : scale font to n times of original size (default should be 1)
@param[in] font : pointer to font
@param[in] s : text to draw
*/
ssd1306_clear(&disp);
ssd1306_draw_string_with_font(&disp, 8, 24, 2, fonts[4], str1);
ssd1306_show(&disp);
}
pico:GP0
pico:GP1
pico:GND.1
pico:GP2
pico:GP3
pico:GP4
pico:GP5
pico:GND.2
pico:GP6
pico:GP7
pico:GP8
pico:GP9
pico:GND.3
pico:GP10
pico:GP11
pico:GP12
pico:GP13
pico:GND.4
pico:GP14
pico:GP15
pico:GP16
pico:GP17
pico:GND.5
pico:GP18
pico:GP19
pico:GP20
pico:GP21
pico:GND.6
pico:GP22
pico:RUN
pico:GP26
pico:GP27
pico:GND.7
pico:GP28
pico:ADC_VREF
pico:3V3
pico:3V3_EN
pico:GND.8
pico:VSYS
pico:VBUS
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA
encoder1:CLK
encoder1:DT
encoder1:SW
encoder1:VCC
encoder1:GND