Files
arduino/libraries/Adafruit_seesaw_Library/Adafruit_miniTFTWing.cpp
2025-10-12 09:13:56 +02:00

141 lines
4.6 KiB
C++

#include "Adafruit_miniTFTWing.h"
// These are the default SAMD09 version pins! (for back compatibility)
uint8_t TFTWING_RESET_PIN = 8;
uint8_t TFTWING_BUTTON_UP_PIN = 2;
uint32_t TFTWING_BUTTON_UP = (1UL << TFTWING_BUTTON_UP_PIN);
uint8_t TFTWING_BUTTON_DOWN_PIN = 4;
uint32_t TFTWING_BUTTON_DOWN = (1UL << TFTWING_BUTTON_DOWN_PIN);
uint8_t TFTWING_BUTTON_LEFT_PIN = 3;
uint32_t TFTWING_BUTTON_LEFT = (1UL << TFTWING_BUTTON_LEFT_PIN);
uint8_t TFTWING_BUTTON_RIGHT_PIN = 7;
uint32_t TFTWING_BUTTON_RIGHT = (1UL << TFTWING_BUTTON_RIGHT_PIN);
uint8_t TFTWING_BUTTON_SELECT_PIN = 11;
uint32_t TFTWING_BUTTON_SELECT = (1UL << TFTWING_BUTTON_SELECT_PIN);
uint8_t TFTWING_BUTTON_A_PIN = 10;
uint32_t TFTWING_BUTTON_A = (1UL << TFTWING_BUTTON_A_PIN);
uint8_t TFTWING_BUTTON_B_PIN = 9;
uint32_t TFTWING_BUTTON_B = (1UL << TFTWING_BUTTON_B_PIN);
uint32_t TFTWING_BUTTON_ALL =
(TFTWING_BUTTON_UP | TFTWING_BUTTON_DOWN | TFTWING_BUTTON_LEFT |
TFTWING_BUTTON_RIGHT | TFTWING_BUTTON_SELECT | TFTWING_BUTTON_A |
TFTWING_BUTTON_B);
/**************************************************************************/
/*!
@brief set up the miniTFTWing
@param addr optional address the seesaw chip can be found on
@param Wi optional alternative I2C port to use, e.g. &Wire1 etc. Defaults
to &Wire
@returns true on success, false on error
*/
/**************************************************************************/
bool Adafruit_miniTFTWing::begin(uint8_t addr, TwoWire *Wi) {
if (Wi != NULL) {
Adafruit_seesaw::_i2cbus = Wi;
}
if (!Adafruit_seesaw::begin(addr, -1)) {
return false;
}
if ((getVersion() >> 16) == 3322) {
// check if we have a product ID burned in, if so its the ATtiny816 version!
TFTWING_BUTTON_UP_PIN = 16;
TFTWING_BUTTON_UP = (1UL << TFTWING_BUTTON_UP_PIN);
TFTWING_BUTTON_DOWN_PIN = 13;
TFTWING_BUTTON_DOWN = (1UL << TFTWING_BUTTON_DOWN_PIN);
TFTWING_BUTTON_LEFT_PIN = 12;
TFTWING_BUTTON_LEFT = (1UL << TFTWING_BUTTON_LEFT_PIN);
TFTWING_BUTTON_RIGHT_PIN = 14;
TFTWING_BUTTON_RIGHT = (1UL << TFTWING_BUTTON_RIGHT_PIN);
TFTWING_BUTTON_SELECT_PIN = 15;
TFTWING_BUTTON_SELECT = (1UL << TFTWING_BUTTON_SELECT_PIN);
TFTWING_BUTTON_A_PIN = 11;
TFTWING_BUTTON_A = (1UL << TFTWING_BUTTON_A_PIN);
TFTWING_BUTTON_B_PIN = 10;
TFTWING_BUTTON_B = (1UL << TFTWING_BUTTON_B_PIN);
TFTWING_BUTTON_ALL =
(TFTWING_BUTTON_UP | TFTWING_BUTTON_DOWN | TFTWING_BUTTON_LEFT |
TFTWING_BUTTON_RIGHT | TFTWING_BUTTON_SELECT | TFTWING_BUTTON_A |
TFTWING_BUTTON_B);
TFTWING_RESET_PIN = 6;
}
this->pinMode(TFTWING_RESET_PIN, OUTPUT);
this->pinModeBulk(TFTWING_BUTTON_ALL, INPUT_PULLUP);
return true;
}
/**************************************************************************/
/*!
@brief set the value of the backlight
@param value the backlight value to set NOTE: 0xFFFF is all the way on
0x0000 is off.
*/
/**************************************************************************/
void Adafruit_miniTFTWing::setBacklight(uint16_t value) {
if ((getVersion() >> 16) == 3322) {
// this->analogWrite(7, value);
this->pinMode(7, OUTPUT);
if (value == TFTWING_BACKLIGHT_ON) {
this->digitalWrite(7, LOW);
} else {
this->digitalWrite(7, HIGH);
}
} else {
uint8_t cmd[] = {0x00, (uint8_t)(value >> 8), (uint8_t)value};
this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_PWM, cmd, 3);
}
}
/**************************************************************************/
/*!
@brief set the PWM frequency for the backlight
@param freq the frequency to set the backlight to
*/
/**************************************************************************/
void Adafruit_miniTFTWing::setBacklightFreq(uint16_t freq) {
if ((getVersion() >> 16) == 3322) {
} else {
uint8_t cmd[] = {0x0, (uint8_t)(freq >> 8), (uint8_t)freq};
this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_FREQ, cmd, 3);
}
}
/**************************************************************************/
/*!
@brief reset the TFT screen by setting the value of the reset pin
@param rst the value to set the reset pin to
*/
/**************************************************************************/
void Adafruit_miniTFTWing::tftReset(bool rst) {
this->digitalWrite(TFTWING_RESET_PIN, rst);
}
/**************************************************************************/
/*!
@brief read all buttons on the wing and return as a 32 bit integer
@returns the value of the buttons
*/
/**************************************************************************/
uint32_t Adafruit_miniTFTWing::readButtons() {
return this->digitalReadBulk(TFTWING_BUTTON_ALL);
}