-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAudioControlDistance.py
More file actions
57 lines (48 loc) · 1.78 KB
/
AudioControlDistance.py
File metadata and controls
57 lines (48 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
maxdistance = 46
import serial.tools.list_ports
from ctypes import cast, POINTER
from comtypes import CLSCTX_ALL
from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
import math
devices = AudioUtilities.GetSpeakers()
interface = devices.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
volume = cast(interface, POINTER(IAudioEndpointVolume))
ports = serial.tools.list_ports.comports()
serialInst = serial.Serial()
portsList = []
for onePort in ports:
portsList.append(str(onePort))
print(str(onePort))
val = input("Select Port: COM")
for x in range(0,len(portsList)):
if portsList[x].startswith("COM" + str(val)):
portVar = "COM" + str(val)
print(portVar)
serialInst.baudrate = 9600
serialInst.port = portVar
serialInst.open()
distance = 0
pastDistance = 0
pastpastDistance = 0
distances = []
sumdistances = 0
while True:
if serialInst.in_waiting:
packet = serialInst.readline()
distance = float(packet.decode('utf').rstrip('\n'))
distances.append(distance)
if len(distances) > 20:
for x in distances:
sumdistances += x
sumdistances /= len(distances)
if sumdistances < pastDistance+5 or sumdistances < pastDistance-5:
pastDistance = sumdistances
sumdistances = 0
distances.pop(0)
else:
pastDistance = distance
if pastpastDistance != round(round((pastDistance),2)*100/maxdistance):
pastpastDistance = round(round((pastDistance),2)*100/maxdistance)
print(pastpastDistance)
if pastpastDistance <= 100 and pastpastDistance > 0:
volume.SetMasterVolumeLevel(35*math.log((pastpastDistance/100), 10), None)