text: from time import sleep
  from adafruit_ble.uart_client import UARTClient
  from adafruit_ble.scanner import Scanner
  from adafruit_bluefruit_connect.packet import Packet
  from adafruit_bluefruit_connect.button_packet import ButtonPacket
  from adafruit_bluefruit_connect.color_packet import ColorPacket
  from neopixel import NeoPixel
  from board import NEOPIXEL, SWITCH
  from adafruit_debouncer import Debouncer
  from digitalio import DigitalInOut, Direction, Pull
  import adafruit_fancyled.adafruit_fancyled as fancy
  
  pin = DigitalInOut(SWITCH)  # Set up built-in pushbutton switch
  pin.direction = Direction.INPUT
  pin.pull = Pull.UP
  switch = Debouncer(pin)
  
  pixels = NeoPixel(NEOPIXEL, 1)  # Set up built-in NeoPixel
  
  AQUA = 0x00FFFF    # (0, 255, 255)
  GREEN = 0x00FF00   # (0, 255, 0)
  ORANGE = 0xFF8000  # (255, 128, 0)
  RED = 0xFF0000     # (255, 0, 0)
  BLUE = 0x0000FF    # (0, 0, 255)
  
  gradients = {'Off': [(0.0, RED), (0.75, ORANGE)],
               'On':  [(0.0, GREEN), (1.0, AQUA)]}
  palette = fancy.expand_gradient(gradients['Off'], 30)
  
  gamma_levels = (0.25, 0.3, 0.15)
  color_index = 1
  fade_direction = 1
  
  TARGET = 'a0:b4:c2:d0:e7:f2'  # CHANGE TO YOUR BLE ADDRESS
  
  button_packet = ButtonPacket("1", True)  # Transmits pressed button 1
  
  scanner = Scanner()  # BLE Scanner
  uart_client = UARTClient()  # BLE Client
  
  while True:
      uart_addresses = []
      pixels[0] = BLUE  # Blue LED indicates disconnected status
      pixels.show()
  
      # Keep trying to find target UART peripheral
      while not uart_addresses:
          uart_addresses = uart_client.scan(scanner)
          for address in uart_addresses:
              if TARGET in str(address):
                  uart_client.connect(address, 5)  # Connect to target
  
      while uart_client.connected:  # Connected
          switch.update()
          if switch.fell:  # Check for button press
              try:
                  uart_client.write(button_packet.to_bytes())  # Transmit press
              except OSError:
                  pass
          # Check for LED status receipt
          if uart_client.in_waiting:
              packet = Packet.from_stream(uart_client)
              if isinstance(packet, ColorPacket):
                  if fancy.CRGB(*packet.color).pack() == GREEN:  # Color match
                      # Green indicates on state
                      palette = fancy.expand_gradient(gradients['On'], 30)
                  else:
                      # Otherwise red indicates off
                      palette = fancy.expand_gradient(gradients['Off'], 30)
  
          # NeoPixel color fading routing
          color = fancy.palette_lookup(palette, color_index / 29)
          color = fancy.gamma_adjust(color, brightness=gamma_levels)
          c = color.pack()
          pixels[0] = c
          pixels.show()
          if color_index == 0 or color_index == 28:
              fade_direction *= -1  # Change direction
          color_index += fade_direction
  
          sleep(0.02)
  