const int SPICLK = 13; const int SPIMOSI = 11; const int SPIMISO = 12; const int SPISS = 10; void SPIinit(void) { pinMode (SPICLK, OUTPUT); pinMode (SPIMOSI, OUTPUT); pinMode (SPIMISO, OUTPUT); pinMode (SPISS, OUTPUT); digitalWrite (SPISS, 1); SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR1) | _BV(SPR0); } char SPI(char d) { // send character over SPI char received = 0; SPDR = d; while(!(SPSR & _BV(SPIF))); received = SPDR; return (received); } void SPI_startpkt (void) { digitalWrite (SPISS, 0); } void SPI_endpkt (void) { digitalWrite (SPISS, 1); } static unsigned char addr = 0x82; #define WAIT1 25 #define WAIT2 15 void send_lcd (unsigned char rnum, unsigned char len, char *s) { SPI_startpkt (); delayMicroseconds (WAIT1); SPI (addr); delayMicroseconds (WAIT2); SPI (rnum); delayMicroseconds (WAIT2); while (len--) { SPI (*s++); delayMicroseconds (WAIT2*2); } SPI_endpkt (); } void write_lcd (char *s) { send_lcd (0, strlen (s), s); } void write_at_lcd (unsigned char x, unsigned char y, char *s) { char c; c = (y << 5) | (x & 0x1f); send_lcd (0x11, 1, &c); delayMicroseconds (100); write_lcd (s); } void cls_lcd (void) { char c; send_lcd (0x10, 1, &c); } void set_var (unsigned char addr, unsigned char a, unsigned char v) { SPI_startpkt (); delayMicroseconds (WAIT1); SPI (addr); delayMicroseconds (WAIT2); SPI (a); delayMicroseconds (WAIT2); SPI (v); delayMicroseconds (WAIT2); SPI_endpkt (); } static unsigned char spi_servo_addr = 0x86; static unsigned char spi_7fet_addr = 0x88; void setup (void) { int i; SPIinit (); Serial.begin (9600); DDRC = 0x30; PORTC = 0x20; #if 0 for (i=0;i<10;i++) { PINC = 0x30; delay (300); } #endif delay (500); cls_lcd (); } int offms = 500; int onms = 1000; unsigned int s = 0; void loop (void) { static int num = 0x20; char buf[32]; set_var (0x9c, 0x10, 0x00); delay(offms); set_var (0x9c, num, 0x01); delay(onms); if ( num < 0x25) num++; else { num = 0x20; s++; } sprintf (buf, "Times: %u ", s); write_at_lcd (0, 0, buf); sprintf (buf, "Relay: %d", num-0x20+1); write_at_lcd (0, 1, buf); Serial.write (buf); Serial.write ("\r\n"); }