#!/bin/bash echo -e "๐Ÿ”ง Starting relay unit test for MCP23S17@Piface unit test hw\n\n" # set pin 200โ€“207 as output for i in {200..207}; do gpio -x mcp23s17:200:0:0 mode $i out done # set pin 208โ€“215 as input for i in {208..215}; do gpio -x mcp23s17:200:0:0 mode $i in gpio -x mcp23s17:200:0:0 mode $i up done # Define relay output addresses and corresponding feedback input addresses relay_addresses=(200 201 207 206) feedback_addresses=(214 215 212 213) for round in {1..3}; do echo -e "๐Ÿ”„ Round $round / 3\n" # Loop through each relay for i in "${!relay_addresses[@]}"; do out=${relay_addresses[$i]} in=${feedback_addresses[$i]} echo "โžก๏ธ Relay/IO write test $((i+1)): Address $out โ†’ Feedback at $in" # Turn ON gpio -x mcp23s17:200:0:0 write "$out" 1 sleep 0.5 feedback_on=$(gpio -x mcp23s17:200:0:0 read "$in") if [ "$feedback_on" -eq 0 ]; then echo "โœ… ON Test passed: Feedback is LOW as expected." else echo "โŒ ON Test failed: Feedback is HIGH." fi # Turn OFF gpio -x mcp23s17:200:0:0 write "$out" 0 sleep 0.5 feedback_off=$(gpio -x mcp23s17:200:0:0 read "$in") if [ "$feedback_off" -eq 1 ]; then echo "โœ… OFF Test passed: Feedback is HIGH as expected." else echo "โŒ OFF Test failed: Feedback is LOW." fi echo -e "\n" sleep 0.5 done for addr in {208..211}; do echo "๐Ÿ”ƒ Pullup resistor test address $addr: " gpio -x mcp23s17:200:0:0 mode "$addr" up sleep 0.5 feedback_on=$(gpio -x mcp23s17:200:0:0 read "$addr") if [ "$feedback_on" -eq 1 ]; then echo "โœ… PULLUP Test passed: Feedback is HIGH as expected." else echo "โŒ PULLUP Test failed: Feedback is LOW." fi sleep 0.5 gpio -x mcp23s17:200:0:0 mode "$addr" down sleep 0.5 feedback_on=$(gpio -x mcp23s17:200:0:0 read "$addr") if [ "$feedback_on" -eq 1 ]; then echo "โœ… PULLDOWN Test passed: Feedback is LOW as expected." else echo "โŒ PULLDOW Test failed: Feedback is HIGH." fi echo -e "\n" sleep 0.5 done done #echo "๐Ÿงน Cleanup complete. All relays turned OFF."