// Change pin assignments post-constructor, using arbitrary pins: void LPD8806::updatePins(uint8_t dpin, uint8_t cpin) { datapin = dpin; clkpin = cpin; clkport = dataport = 0; clkpinmask = datapinmask = 0; #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) || defined (__AVR_ATmega328__) || defined(__AVR_ATmega8__) || (__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__) clkport = portOutputRegister(digitalPinToPort(cpin)); clkpinmask = digitalPinToBitMask(cpin); dataport = portOutputRegister(digitalPinToPort(dpin)); datapinmask = digitalPinToBitMask(dpin); #endif if(begun == true) { // If begin() was previously invoked... // If previously using hardware SPI, turn that off: if(hardwareSPI == true) SPI.end(); startBitbang(); // Regardless, now enable 'soft' SPI outputs } // Otherwise, pins are not set to outputs until begin() is called. // Note: any prior clock/data pin directions are left as-is and are // NOT restored as inputs! hardwareSPI = false; }
// Change pin assignments post-constructor, using arbitrary pins: void LPD8806::updatePins(uint8_t dpin, uint8_t cpin) { if(begun == true) { // If begin() was previously invoked... // If previously using hardware SPI, turn that off: if(hardwareSPI) { #ifdef __AVR_ATtiny85__ DDRB &= ~(_BV(PORTB1) | _BV(PORTB2)); #else SPI.end(); #endif } else { pinMode(datapin, INPUT); // Restore prior data and clock pins to inputs pinMode(clkpin , INPUT); } } datapin = dpin; clkpin = cpin; #ifdef __AVR__ clkport = portOutputRegister(digitalPinToPort(cpin)); clkpinmask = digitalPinToBitMask(cpin); dataport = portOutputRegister(digitalPinToPort(dpin)); datapinmask = digitalPinToBitMask(dpin); #endif // If previously begun, enable 'soft' SPI outputs now if(begun == true) startBitbang(); hardwareSPI = false; }
// Activate hard/soft SPI as appropriate: void LPD8806::begin(void) { if(hardwareSPI == true) startSPI(); else startBitbang(); begun = true; }
// Activate hard/soft SPI as appropriate: void Simple_LPD8806::begin(void) { //if(hardwareSPI == true) startSPI(); //else startBitbang(); begun = true; }