/* Copyright (C)2006 by Helmut Hissen and Zeebar Technology Services, Inc. All Rights Reserved */ /* add this to mxwebsrvr.c */ void setLatch595(BYTE c) { /* get this from the sample posted on the modtronix message board */ [...] } int relDelay[5] = { 0, 0, 0, 0, 0 }; int relLedMap[5] = { 1, 3, 5, 2, 4 }; void applyRelayData(void) { int i; BYTE led1Mask = 0; BYTE led2Mask = 0; BYTE relMask = 0; for (i = 0; i < 5; i++) { if ( relDelay[i] > 0 ) { led2Mask |= (0x01 << relLedMap[i]); relMask |= (0x01 << i); } } led2Mask |= 0x01; setLatch595(led2Mask); setLatch595(led1Mask); setLatch595(relMask); LATCH_RCLK = 1; LATCH_RCLK = 0; } void setRelayDelays(BYTE relMask, int relValue) { int i; for (i = 0; i < 5; i++) { if ((relMask & ((0x01) << i)) != 0 ) { relDelay[i] = relValue; } } } /* * Main entry point. */ void main(void) { static TICK8 tz = 0; [...] /* hardware initialization */ [...] //Reset all relay outputs to 0 TRIS_LATCH_SER = 0; TRIS_LATCH_SCLK = 0; TRIS_LATCH_RCLK = 0; setRelayDelays(0x1f, 0); applyRelayData(); [...] while ( 1 ) { [...] /* * Increment Relay, LED latches every 500ms */ if ( TickGetDiff8bit(tz) >= ((TICK8)(TICKS_PER_SECOND)) ) { int i; tz = TickGet8bit(); for (i = 0; i < 5; i++) { if (relDelay[i] > 0) { relDelay[i] --; } } applyRelayData(); } [...]