#ifndef __MAXIM_FLOAT_DISPLAY_H__
#define __MAXIM_FLOAT_DISPLAY_H__
#include
#define MAXIM_MAX_BITRATE 10000000
#define MAXIM_DIGIT 0x01
#define MAXIM_MODE 0x09
#define MAXIM_INTENSITY 0x0A
#define MAXIM_SCAN_LIMIT 0x0B
#define MAXIM_SHUTDOWN 0x0C
#define MAXIM_TEST 0x0F
#define MAXIM_PWR_OFF 0x00
#define MAXIM_PWR_ON 0x01
#define MAXIM_MODE_NO_DECODE 0x00
class MaximFloatDisplay {
public:
MaximFloatDisplay(int selectPin) :
selectPin(selectPin),
settings(SPISettings(MAXIM_MAX_BITRATE, MSBFIRST, SPI_MODE0)) {}
// Start SPI and initialize the display.
void begin() {
pinMode(this->selectPin, OUTPUT);
SPI.begin();
init();
}
// Shutdown the display and end SPI.
void end() {
writeRaw(MAXIM_SHUTDOWN, MAXIM_PWR_OFF);
SPI.end();
}
void write(const char *str) {
int i = 0;
for (; i < 8; ++i) {
if (!str || str[i] == 0) {
break;
}
writeLetter(i, str[i]);
}
for (; i = 0.0 && val <= 9999.0) {
uint8_t digits[4] = { 0, 0, 0, 0 };
int decimalPlace = -1;
int index = 0;
for (int i = 0; i 0) {
if (decimalPlace < 0) {
decimalPlace = max(3 - i, 0);
for (int j = 0; j = 4) {
break;
}
}
val *= 10;
}
if (decimalPlace == -1) {
decimalPlace = 0;
}
for (int i = 0; i < 4; ++i) {
uint8_t c = nums[digits[i]];
if (decimalPlace == i) {
c |= dp;
}
writeRawDigit(slot == 1 ? 4 + i : i, c);
}
} else {
for (int i = 0; i = 'a' && c = '0' && c selectPin, LOW);
delayMicroseconds(1);
SPI.transfer(addr);
SPI.transfer(data);
digitalWrite(this->selectPin, HIGH);
delayMicroseconds(1);
SPI.endTransaction();
}
};
#undef SPI_BAUD
#endif // __MAXIM_FLOAT_DISPLAY_H__