code: async def keep_alive(self, period=1, margin=.3):
          
          if period < 0:
              period = 0
          if period > 10:
              period = 10
          self.period = period
          if margin < .1:
              margin = .1
          if margin > .9:
              margin = .9
          self.margin = margin
          self.keep_alive_interval = [period & 0x7f, (period >> 7) & 0x7f]
          await self._send_sysex(PrivateConstants.SAMPLING_INTERVAL,
                                 self.keep_alive_interval)
          while True:
              if self.period:
                  await asyncio.sleep(period - (period - (period * margin)))
                  await self._send_sysex(PrivateConstants.KEEP_ALIVE,
                                         self.keep_alive_interval)
              else:
                  break
docs: Periodically send a keep alive message to the Arduino.
          Frequency of keep alive transmission is calculated as follows:
          keep_alive_sent = period - (period * margin)
  
  
          :param period: Time period between keepalives. Range is 0-10 seconds.
                         0 disables the keepalive mechanism.
  
          :param margin: Safety margin to assure keepalives are sent before
                      period expires. Range is 0.1 to 0.9
          :returns: No return value