/ 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()