#include "flipdot.h" Flipdot::Flipdot() { } void Flipdot::init() { pinMode(PIN_SR_DATA, OUTPUT); pinMode(PIN_SR_CLK, OUTPUT); pinMode(PIN_SR_OE, OUTPUT); pinMode(PIN_SR_LATCH, OUTPUT); pinMode(PIN_CLEAR, OUTPUT); pinMode(PIN_DRIVE, OUTPUT); pinMode(PIN_DATA_DRVBRD, OUTPUT); pinMode(PIN_CLK_DRVBRD, OUTPUT); pinMode(PIN_RESET_DRVBRD, OUTPUT); digitalWrite(PIN_SR_OE, HIGH); //Active Low digitalWrite(PIN_SR_LATCH, LOW); digitalWrite(PIN_DRIVE, LOW); digitalWrite(PIN_RESET_DRVBRD,HIGH); //high = reset. set low to enable data flow to driverboard shift registers } void Flipdot::shiftOutSlow(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) { uint8_t i; for (i = 0; i < 8; i++) { if (bitOrder == LSBFIRST) digitalWrite(dataPin, !!(val & (1 << i))); else digitalWrite(dataPin, !!(val & (1 << (7 - i)))); delayMicroseconds(MICROS_SHIFTDELAY); digitalWrite(clockPin, HIGH); delayMicroseconds(MICROS_SHIFTDELAY); digitalWrite(clockPin, LOW); } } void Flipdot::selectColumnClear(uint8_t selcolumn) { selectColumn(selcolumn, true); } void Flipdot::selectColumnSet(uint8_t selcolumn) { selectColumn(selcolumn, false); } void Flipdot::selectColumn(uint8_t selcolumn, bool clear) { if (column_reversed) { selcolumn=COLUMNBYTES*4-1-1 - selcolumn; //COLUMNBYTES*4-1 = COLUMNS } //set shift registers for columns to select one column to positive voltage uint8_t sc_bit=3-(selcolumn%4); //each two shift registers control four columns uint8_t sc_byte=selcolumn/4; resetColumns(); col[sc_byte]=pow(2, (sc_bit*2+clear)); // possible numbers for clear=false: 1,4,16,64 } bool Flipdot::clearSelectedColumn() { shiftDataColumn(); //Clear Columns for (uint8_t cc=0;cc