From f83984ab85eecca628e2a6b3685df5cdf53a1f67 Mon Sep 17 00:00:00 2001 From: firepixie Date: Mon, 27 Apr 2020 10:35:01 -0700 Subject: [PATCH] Vertical Garden Barometer first code commit --- Vertical_Garden_Barometer/code.py | 261 ++++++++++++++++++++++++++ Vertical_Garden_Barometer/rising.bmp | Bin 0 -> 115256 bytes Vertical_Garden_Barometer/sinking.bmp | Bin 0 -> 115256 bytes 3 files changed, 261 insertions(+) create mode 100755 Vertical_Garden_Barometer/code.py create mode 100644 Vertical_Garden_Barometer/rising.bmp create mode 100644 Vertical_Garden_Barometer/sinking.bmp diff --git a/Vertical_Garden_Barometer/code.py b/Vertical_Garden_Barometer/code.py new file mode 100755 index 000000000..9a62dbaf5 --- /dev/null +++ b/Vertical_Garden_Barometer/code.py @@ -0,0 +1,261 @@ + +""" +Read the barometric reading in the air +Visualize air reading changes over time as a color animation on a NeoPixel strip +Display a "sinking" or "rising" graphic on the screen along with recent reading data + +Code by Erin St Blaine for Adafruit Industries +""" + +import time +import board +import neopixel +from adafruit_clue import clue +import adafruit_fancyled.adafruit_fancyled as fancy +import displayio +from adafruit_display_text import label +from adafruit_bitmap_font import bitmap_font + + +num_leds = 79 #number of LEDs in your strip +timeToCheck = 100 # set the amount of time between sensor checks. 7800 is approx. 1 hour + +# Barometer or Thermometer? Uncomment the section you want to use + +# BAROMETER RANGES (hPa) +# set desired reading range -- the NeoPixel palette choice will be determined by these thresholds +deviceType = 0 +min_reading = 960 +med_reading = 965 +high_reading= 970 +max_reading = 975 + +""" +# THERMOMETER RANGES (C) +# set desired temperature range -- the NeoPixel palette choice will be determined by these thresholds +deviceType = 1 +min_reading = 25 +med_reading = 27 +high_reading= 31 +max_reading = 33 +""" + +#get an initial sensor reading +if deviceType ==0: + reading = clue.pressure +else: + reading = clue.temperature + +#set up variables for "remembering" past readings +reading1 = reading +reading2 = reading1 +reading3 = reading2 +counter = 0 +toggle = 1 #for on/off switch on button A +displayOn = 1 #to turn the display on and off with button B + +clue.display.brightness = 0.8 +clue_display = displayio.Group(max_size=4) + +# draw the rising image +rising_file = open("rising.bmp", "rb") +rising_bmp = displayio.OnDiskBitmap(rising_file) +rising_sprite = displayio.TileGrid(rising_bmp, pixel_shader=displayio.ColorConverter()) +clue_display.append(rising_sprite) + +# draw the sinking image +sinking_file = open("sinking.bmp", "rb") +sinking_bmp = displayio.OnDiskBitmap(sinking_file) +sinking_sprite = displayio.TileGrid(sinking_bmp, pixel_shader=displayio.ColorConverter()) +clue_display.append(sinking_sprite) + +# Create text +# first create the group +text_group = displayio.Group(max_size=5, scale=1) +# Make a label +reading_font = bitmap_font.load_font("/font/RacingSansOne-Regular-29.bdf") +reading_font.load_glyphs("0123456789ADSWabcdefghijklmnopqrstuvwxyz:!".encode('utf-8')) +reading_label = label.Label(reading_font, color=0xffffff, max_glyphs=15) +reading_label.x = 10 +reading_label.y = 24 +text_group.append(reading_label) + +reading2_label = label.Label(reading_font, color=0xdaf5f4, max_glyphs=15) +reading2_label.x = 10 +reading2_label.y = 54 +text_group.append(reading2_label) + +reading3_label = label.Label(reading_font, color=0x4f3ab1, max_glyphs=15) +reading3_label.x = 10 +reading3_label.y = 84 +text_group.append(reading3_label) + +timer_label = label.Label(reading_font, color=0x072170, max_glyphs=15) +timer_label.x = 10 +timer_label.y = 114 +text_group.append(timer_label) + +clue_display.append(text_group) +clue.display.show(clue_display) + +# Define color Palettes +waterPalette = [ + 0x00d9ff, + 0x006f82, + 0x43bfb9, + 0x0066ff] +icePalette = [ + 0x8080FF, + 0x8080FF, + 0x8080FF, + 0x0000FF, + 0xC88AFF] +sunPalette = [ + 0xffaa00, + 0xffdd00, + 0x7d5b06, + 0xfffca8] +firePalette = [ + 0xff0000, + 0xff5500, + 0x8a3104, + 0xffaa00 ] +forestPalette = [ + 0xccffa8, + 0x69f505, + 0x05f551, + 0x2c8247] + +#set up default initial palettes, just for startup +palette = forestPalette +palette2 = waterPalette +palette3 = icePalette + +# Declare a NeoPixel object on pin A4 with num_leds pixels, no auto-write. +# Set brightness to max because we'll be using FancyLED's brightness control. +pixels = neopixel.NeoPixel(board.A4, num_leds, brightness=1.0, + auto_write=False) + +offset = 0 # Positional offset into color palette to get it to 'spin' + +while True: + # use button A to toggle the NeoPixels on or off by changing brightness + if clue.button_a: + if toggle == 1: + toggle = 0 + pixels.brightness = 0 + clue.display.brightness = 0 + elif toggle == 0: + toggle = 1 + pixels.brightness = 1.0 + clue.display.brightness = 0.8 + if clue.button_b: + #Toggle only the display on and off + if displayOn == 0: + clue.display.brightness = 0.8 + displayOn = 1 + else: + clue.display.brightness = 0 + displayOn = 0 + + #assign color palette to NeoPixel section 1 based on the current reading reading + if reading1 < min_reading: + palette = firePalette + elif reading1 > min_reading and reading1 < med_reading: + palette = sunPalette + elif reading1 > med_reading and reading1 < high_reading: + palette = forestPalette + elif reading1 > high_reading and reading1 < max_reading: + palette = waterPalette + else: + palette = icePalette + #Map colors to pixels. Adjust range numbers to light up specific pixels. This configuration + # maps to a reflected gradient, with pixel 0 in the upper left corner + # Load each pixel's color from the palette using an offset, run it + # through the gamma function, pack RGB value and assign to pixel. + for i in range(23, 31): #center right -- present moment + color = fancy.palette_lookup(palette, offset + i / num_leds) + color = fancy.gamma_adjust(color, brightness=0.25) + pixels[i] = color.pack() + + for i in range(63, 71): #center left -- present moment + color = fancy.palette_lookup(palette, offset + i / num_leds) + color = fancy.gamma_adjust(color, brightness=0.25) + pixels[i] = color.pack() + + for i in range(16, 23): #top mid right -- 1 cycle ago + color = fancy.palette_lookup(palette2, offset + i / num_leds) + color = fancy.gamma_adjust(color, brightness=0.25) + pixels[i] = color.pack() + + for i in range(71, 78): #top mid left -- 1 cycle ago + color = fancy.palette_lookup(palette2, offset + i / num_leds) + color = fancy.gamma_adjust(color, brightness=0.25) + pixels[i] = color.pack() + + for i in range(31, 38): #bottom mid right -- 1 cycle ago + color = fancy.palette_lookup(palette2, offset + i / num_leds) + color = fancy.gamma_adjust(color, brightness=0.25) + pixels[i] = color.pack() + + for i in range(56, 63): #bottom mid left -- 1 cycle ago + color = fancy.palette_lookup(palette2, offset + i / num_leds) + color = fancy.gamma_adjust(color, brightness=0.25) + pixels[i] = color.pack() + + for i in range(0, 16): #top right -- 2 cycles ago + color = fancy.palette_lookup(palette3, offset + i / num_leds) + color = fancy.gamma_adjust(color, brightness=0.25) + pixels[i] = color.pack() + + for i in range(77, 79): #top left -- 2 cycles ago + color = fancy.palette_lookup(palette3, offset + i / num_leds) + color = fancy.gamma_adjust(color, brightness=0.25) + pixels[i] = color.pack() + + for i in range(38, 56): #bottom -- 2 cycles ago + color = fancy.palette_lookup(palette3, offset + i / num_leds) + color = fancy.gamma_adjust(color, brightness=0.25) + pixels[i] = color.pack() + + pixels.show() + offset += 0.01 # Bigger number = faster spin + + reading_label.text = "Now {:.1f}".format(reading1) + reading2_label.text = "Last {:.1f}".format(reading2) + reading3_label.text = "Prev {:.1f}".format(reading3) + timer_label.text = "{}".format(counter) + clue.display.show(clue_display) + + #Is it time to update? + if counter > timeToCheck: + #This moves the current data to the "1 hour old" section of pixels and the "1 hour old" data + #to the "2 hours old" section of pixels + palette3 = palette2 + palette2 = palette + reading3 = reading2 + reading2 = reading1 + reading1 = reading + #take a new sensor reading and reset the counter + if deviceType == 0: + reading = clue.pressure + else: + reading = clue.temperature + counter = 0 + #if reading is rising, show rising image and position text at the bottom + if reading1 > reading2: + sinking_sprite.x = 300 + reading_label.y = 134 + reading2_label.y = 164 + reading3_label.y = 194 + timer_label.y = 224 + #if reading is falling, show sinking image and position text at the top + elif reading2 < reading3: #reading is falling + sinking_sprite.x = 0 + reading_label.y = 24 + reading2_label.y = 54 + reading3_label.y = 84 + timer_label.y = 114 + #otherwise keep counting up + else: + counter = counter + 1 \ No newline at end of file diff --git a/Vertical_Garden_Barometer/rising.bmp b/Vertical_Garden_Barometer/rising.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1d7af9d42939beb5529a77c029c00e48843c7e22 GIT binary patch literal 115256 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 ijz6_m92M7l2%yaiyYbKeHkN~33`M%oP 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 literal 0 HcmV?d00001