diff --git a/examples/tm1638_functions_example/tm1638_functions_example.pde b/examples/tm1638_functions_example/tm1638_functions_example.pde new file mode 100644 index 0000000..c66fc43 --- /dev/null +++ b/examples/tm1638_functions_example/tm1638_functions_example.pde @@ -0,0 +1,102 @@ +/* +Library examples for TM1638. + +Copyright (C) 2011 Ricardo Batista + +This program is free software: you can redistribute it and/or modify +it under the terms of the version 3 GNU General Public License as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include +#include + +#define NO_MODULES 2 + +// define a regular module and a inverted module +TM1638 module1(3, 2, 4); +InvertedTM1638 module2(3, 2, 5); +TM1638* modules[NO_MODULES] = { + &module1, + &module2 +}; +byte modes[NO_MODULES]; + +unsigned long startTime; + +void setup() { + startTime = millis(); + + for (int i = 0; i < NO_MODULES; i++) { + modules[i]->setupDisplay(true, 7); + modes[i] = 0; + } +} + +void update(TM1638* module, byte* mode) { + byte buttons = module->getButtons(); + unsigned long runningSecs = (millis() - startTime) / 1000; + + // button pressed - change mode + if (buttons != 0) { + *mode = buttons >> 1; + module->clearDisplay(); + module->setLEDs(0); + } + + switch (*mode) { + case 0: + module->setDisplayToDecNumber(runningSecs, 1 << 7); + break; + case 1: + module->setDisplayToDecNumber(runningSecs, 1 << 6, false); + break; + case 2: + module->setDisplayToHexNumber(runningSecs, 1 << 5); + break; + case 4: + module->setDisplayToHexNumber(runningSecs, 1 << 4, false); + break; + case 8: + module->setDisplayToBinNumber(runningSecs, 1 << 3); + break; + case 16: + module->clearDisplayDigit((runningSecs - 1) % 8, 0); + module->setDisplayDigit(runningSecs % 8, runningSecs % 8, 0); + break; + case 32: + char s[8]; + sprintf(s, "Secs %03d", runningSecs % 999); + module->setDisplayToString(s); + break; + case 64: + if (runningSecs % 2 == 0) { + module->setDisplayToString("TM1638 "); + } else { + module->setDisplayToString("LIBRARY "); + } + + module->setLED(0, (runningSecs - 1) % 8); + module->setLED(1 + runningSecs % 3, runningSecs % 8); + break; + case 65: + module->setDisplayToError(); + break; + + } +} + +void loop() { + for (int i = 0; i < NO_MODULES; i++) { + update(modules[i], &modes[i]); + } +} +