/* display.pde Serial 7-segment display test, using multiple display units. Works with the Sparkfun 4-digit 7-segment display. Eric Ayars 3/15/12 */ #define SER1TX 4 #define SER1RX 3 #define SER2TX 6 #define SER2RX 5 #include <SoftwareSerial.h> SoftwareSerial Display1(SER1RX, SER1TX); SoftwareSerial Display2(SER2RX, SER2TX); int delayTime=100; unsigned int count=0; unsigned int dcount=9999; void fourdigit(int x, SoftwareSerial Display) { /* prints a 4-digit number on a sparkfun 7-segment serial display. Can be used to operate multiple displays, each as a separate SoftwareSerial object. */ byte d1,d2,d3,d4; // each digit // Calculate the digits d4 = x%10; // ones digit x = x/10; if (x) { // Tens digit, if needed. d3 = x%10; x = x/10; } else { d3 = 0x78; // Not needed, so blank. } if (x) { // Hundreds digit, if needed. d2 = x%10; x = x/10; } else { d2 = 0x78; // Not needed, so blank. } if (x) { // Thousands digit, if needed. d1 = x%10; x = x/10; } else { d1 = 0x78; // Not needed, so blank. } if (x) { // Uh-oh. Still more digits left! d1 = '-'; d2 = '-'; d3 = '-'; d4 = '-'; } // Now write them Display.write(0x76); // Clears the display, set pointer to digit 1. Display.write(d1); Display.write(d2); Display.write(d3); Display.write(d4); } void setup() { // Set up display 1 Display1.begin(9600); delay(50); Display1.write(0x7A); // brightness command bit Display1.write(0x01); // set brightness to brightest value // Set up display 2 Display2.begin(9600); delay(50); Display2.write(0x7A); // brightness command bit Display2.write(0x01); // set brightness to brightest value } void loop() { fourdigit(count, Display1); fourdigit(dcount, Display2); delay(delayTime); count++; dcount--; }