Add segmented_movement pattern with n4 parameter support
- Add n4 parameter to control server, LED bar receiver, and test script - Create segmented_movement pattern with alternating forward/backward movement - Pattern supports n1 (segment length), n2 (spacing), n3 (forward speed), n4 (backward speed) - Fix test script to send all messages instead of just the first one - Add segmented_movement to patterns_needing_params for proper parameter transmission - Pattern intelligently handles all cases: alternating, forward-only, backward-only, or static - Implements repeating segments with configurable spacing across LED strip
This commit is contained in:
@@ -6,10 +6,10 @@ Starts a client to localhost:8765 and sends a small sequence of UI commands:
|
||||
- pattern_change
|
||||
- color_change
|
||||
- brightness_change
|
||||
- parameter_change (n1/n2/n3)
|
||||
- parameter_change (n1/n2/n3/n4)
|
||||
|
||||
Usage examples:
|
||||
python test/test_control_server.py --pattern on --r 255 --g 0 --b 0 --brightness 150 --n1 5 --n2 5 --n3 1
|
||||
python test/test_control_server.py --pattern on --r 255 --g 0 --b 0 --brightness 150 --n1 5 --n2 5 --n3 1 --n4 2
|
||||
python test/test_control_server.py --pattern rainbow
|
||||
"""
|
||||
|
||||
@@ -51,7 +51,7 @@ def build_messages(args):
|
||||
if args.brightness is not None:
|
||||
msgs.append({"type": "brightness_change", "data": {"brightness": args.brightness}})
|
||||
|
||||
if any(v is not None for v in (args.n1, args.n2, args.n3)):
|
||||
if any(v is not None for v in (args.n1, args.n2, args.n3, args.n4)):
|
||||
payload = {}
|
||||
if args.n1 is not None:
|
||||
payload["n1"] = args.n1
|
||||
@@ -59,6 +59,8 @@ def build_messages(args):
|
||||
payload["n2"] = args.n2
|
||||
if args.n3 is not None:
|
||||
payload["n3"] = args.n3
|
||||
if args.n4 is not None:
|
||||
payload["n4"] = args.n4
|
||||
msgs.append({"type": "parameter_change", "data": payload})
|
||||
|
||||
return msgs
|
||||
@@ -66,9 +68,11 @@ def build_messages(args):
|
||||
|
||||
async def run_test(uri: str, messages: list[dict], sleep_s: float):
|
||||
async with websockets.connect(uri) as ws:
|
||||
# Send only one message (first in list)
|
||||
m = messages[0]
|
||||
await ws.send(json.dumps(m))
|
||||
# Send all messages with a delay between them
|
||||
for m in messages:
|
||||
await ws.send(json.dumps(m))
|
||||
if len(messages) > 1:
|
||||
await asyncio.sleep(sleep_s)
|
||||
|
||||
|
||||
def parse_args():
|
||||
@@ -83,6 +87,7 @@ def parse_args():
|
||||
p.add_argument("--n1", type=int, help="n1 for parameter_change")
|
||||
p.add_argument("--n2", type=int, help="n2 for parameter_change")
|
||||
p.add_argument("--n3", type=int, help="n3 for parameter_change")
|
||||
p.add_argument("--n4", type=int, help="n4 for parameter_change")
|
||||
p.add_argument("--sleep", type=float, default=0.2, help="Seconds to wait between messages (default 0.2)")
|
||||
p.add_argument("--colors", help="Comma-separated hex colors (uses first as r,g,b)")
|
||||
return p.parse_args()
|
||||
|
Reference in New Issue
Block a user