/ Wave_Freq_Generator / display.py
display.py
1 # SPDX-FileCopyrightText: 2018 Dave Astels for Adafruit Industries 2 # 3 # SPDX-License-Identifier: MIT 4 5 """ 6 Display code for signal generator. 7 8 Adafruit invests time and resources providing this open source code. 9 Please support Adafruit and open source hardware by purchasing 10 products from Adafruit! 11 12 Written by Dave Astels for Adafruit Industries 13 Copyright (c) 2018 Adafruit Industries 14 Licensed under the MIT license. 15 16 All text above must be included in any redistribution. 17 """ 18 19 import math 20 import board 21 import busio 22 import adafruit_ssd1306 23 import shapes 24 25 class Display: 26 """Manage the OLED Featherwing display""" 27 28 29 i2c = None 30 oled = None 31 shape = None 32 frequency = None 33 34 def __init__(self): 35 self.i2c = busio.I2C(board.SCL, board.SDA) 36 self.oled = adafruit_ssd1306.SSD1306_I2C(128, 32, self.i2c) 37 38 self.oled.fill(0) 39 self.oled.show() 40 41 42 def draw_sine(self): 43 for i in range(32): 44 self.oled.pixel(i, int(math.sin(i/32 * math.pi * 2) * 16) + 16, 1) 45 46 47 def draw_square(self): 48 for i in range(16): 49 self.oled.pixel(0, 32 - i, 1) 50 self.oled.pixel(i, 31, 1) 51 self.oled.pixel(31, i, 1) 52 self.oled.pixel(15, 16 + i, 1) 53 self.oled.pixel(15, i, 1) 54 self.oled.pixel(16 + i, 0, 1) 55 56 57 def draw_triangle(self): 58 for i in range(8): 59 self.oled.pixel(i, 16 + i * 2, 1) 60 self.oled.pixel(8 + i, 32 - i * 2, 1) 61 self.oled.pixel(16 + i, 16 - i * 2, 1) 62 self.oled.pixel(24 + i, i * 2, 1) 63 64 65 def draw_sawtooth(self): 66 for i in range(16): 67 self.oled.pixel(0, 16 + i, 1) 68 self.oled.pixel(31, i, 1) 69 for i in range(32): 70 self.oled.pixel(i, 31 - i, 1) 71 72 73 def update(self): 74 self.oled.fill(0) 75 if self.shape == shapes.SINE: 76 self.draw_sine() 77 elif self.shape == shapes.SQUARE: 78 self.draw_square() 79 elif self.shape == shapes.TRIANGLE: 80 self.draw_triangle() 81 elif self.shape == shapes.SAWTOOTH: 82 self.draw_sawtooth() 83 self.oled.text("{0}".format(self.frequency), 40, 10, 1) 84 self.oled.show() 85 86 87 def update_shape(self, shape): 88 if shape != self.shape: 89 self.shape = shape 90 self.update() 91 92 93 def update_frequency(self, frequency): 94 if frequency != self.frequency: 95 self.frequency = frequency 96 self.update()