void SHT21::start() const { clock(0); mode(OUTPUT); digiWrite(1); clock(1); digiWrite(0); clock(0); clock(1); digiWrite(1); clock(0); release(); }
void SHT21::connReset() const { mode2(OUTPUT); clock(0); mode(OUTPUT); digiWrite(1); for (uint8_t i = 0; i < 9; ++i) { clock(1); clock(0); } start(); }
void BlinkPlug::ledOff (byte mask) { if (mask & 1) { mode(INPUT); digiWrite(1); } if (mask & 2) { mode2(INPUT); digiWrite2(1); } leds &= ~ mask; }
void BlinkPlug::ledOn (byte mask) { if (mask & 1) { digiWrite(0); mode(OUTPUT); } if (mask & 2) { digiWrite2(0); mode2(OUTPUT); } leds |= mask; }
void Port::shiftWrite(uint8_t bitOrder, uint16_t value, uint8_t count) const { uint16_t mask = bit(LSBFIRST ? 0 : count - 1); for (uint8_t i = 0; i < count; ++i) { digiWrite(value & mask); if (bitOrder == LSBFIRST) mask <<= 1; else mask >>= 1; digiWrite2(1); digiWrite2(0); } }
uint8_t SHT21::writeByte(uint8_t value) const { mode(OUTPUT); for (uint8_t i = 0x80; i != 0; i >>= 1) { digiWrite(value & i); clock(1); clock(0); } release(); clock(1); uint8_t error = digiRead(); clock(0); return error; }
uint8_t SHT21::readByte(uint8_t ack) const { uint8_t value = 0; for (uint8_t i = 0x80; i != 0; i >>= 1) { clock(1); if (digiRead()) value |= i; clock(0); } mode(OUTPUT); digiWrite(!ack); clock(1); clock(0); release(); return value; }
/** Select the channel on the multiplexer. * @param channel A number between 1 and AOA_INPUTS_NUM. */ void AoAPlug::select(uint8_t channel) { digiWrite(0); mode(OUTPUT); delayMicroseconds(50); byte data = 0x10 | (channel & 0x0F); byte mask = 1 << (portNum + 3); // digitalWrite is too slow ATOMIC_BLOCK(ATOMIC_FORCEON) { for (byte i = 0; i < 5; ++i) { byte us = bitRead(data, 4 - i) ? 9 : 3; #ifdef PORTD PORTD |= mask; delayMicroseconds(us); PORTD &= ~ mask; #else //XXX TINY! #endif delayMicroseconds(4); } } }
void SHT21::release() const { mode(INPUT); digiWrite(1); }