Re: ESP32 I2C mapping
Posted: Wed Jan 03, 2018 6:58 am
It need to be output capable and not pulled down.
Code: Select all
void TwoWire::begin2(int sdaPin, int sclPin, uint32_t frequency2)
{
if(sdaPin < 0) {
if(num == 0) {
sdaPin = SDA2;
} else {
return;
}
}
if(sclPin < 0) {
if(num == 0) {
sclPin = SCL2;
} else {
return;
}
}
if(i2c == NULL) {
i2c = i2cInit(num, 0, false);
if(i2c == NULL) {
return;
}
}
i2cSetFrequency(i2c, frequency2);
if(sda >= 0 && sda != sdaPin) {
i2cDetachSDA(i2c, sda2);
}
if(scl >= 0 && scl != sclPin) {
i2cDetachSCL(i2c, scl2);
}
sda2 = sdaPin;
scl2 = sclPin;
i2cAttachSDA(i2c, sda2);
i2cAttachSCL(i2c, scl2);
flush();
i2cInitFix(i2c);
}
Code: Select all
void Adafruit_seesaw::_i2c_init()
{
Wire.begin();
Wire.begin2();
}
Code: Select all
bool Adafruit_seesaw::begin(uint8_t addr1, uint8_t addr2)
{
_i2caddr = addr1;
_i2caddr2 = addr2;
_i2c_init();
SWReset();
delay(500);
uint8_t c = this->read8(SEESAW_STATUS_BASE, SEESAW_STATUS_HW_ID);
if(c != SEESAW_HW_ID_CODE) return false;
return true;
}
Code: Select all
#include "Adafruit_seesaw.h"
Adafruit_seesaw ss;
#define BUTTON_RIGHT 6 /////////////what are these integers
#define BUTTON_DOWN 7 /////////////" "
#define BUTTON_LEFT 9 /////////////" "
#define BUTTON_UP 10 /////////////" "
#define BUTTON_SEL 14 /////////////" "
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
uint32_t button_mask = (1 << BUTTON_RIGHT) | (1 << BUTTON_DOWN) |
(1 << BUTTON_LEFT) | (1 << BUTTON_UP) | (1 << BUTTON_SEL);
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
uint32_t button_mask2 = (1 << BUTTON_RIGHT) | (1 << BUTTON_DOWN) |
(1 << BUTTON_LEFT) | (1 << BUTTON_UP) | (1 << BUTTON_SEL);
#if defined(ESP8266)
#define IRQ_PIN 2
#elif defined(ESP32)
#define IRQ_PIN1 13
#define IRQ_PIN2 27
#elif defined(NRF52)
#define IRQ_PIN 27
#elif defined(TEENSYDUINO)
#define IRQ_PIN 8
#elif defined(ARDUINO_ARCH_WICED)
#define IRQ_PIN PC5
#else
#define IRQ_PIN 5
#endif
void setup() {
Serial.begin(115200);
while(!Serial);
if(!ss.begin(0x49,0x4a)){
Serial.println("ERROR!");
while(1);
}
else{
Serial.println("seesaw started");
Serial.print("version: ");
Serial.println(ss.getVersion(), HEX);
}
ss.pinModeBulk(button_mask, INPUT_PULLUP);
ss.setGPIOInterrupts(button_mask, 1);
pinMode(IRQ_PIN1, INPUT);
ss.pinModeBulk(button_mask2, INPUT_PULLUP);
ss.setGPIOInterrupts(button_mask2, 1);
pinMode(IRQ_PIN2, INPUT);
}
int last_x = 0, last_y = 0;
int last_x2 = 0, last_y2 = 0;
void loop() {
int x = ss.analogRead(2);
int y = ss.analogRead(3);
if ( (abs(x - last_x) > 3) || (abs(y - last_y) > 3)) {
Serial.print(x); Serial.print(", "); Serial.println(y);
last_x = x;
last_y = y;
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
int x2 = ss.analogRead(2);
int y2 = ss.analogRead(3);
if ( (abs(x - last_x2) > 3) || (abs(y - last_y2) > 3)) {
Serial.print(x); Serial.print(", "); Serial.println(y);
last_x2 = x2;
last_y2 = y2;
}
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
if(!digitalRead(IRQ_PIN1)){
uint32_t buttons = ss.digitalReadBulk(button_mask);
//Serial.println(buttons, BIN);
if (! (buttons & (1 << BUTTON_RIGHT))) {
Serial.println("Button A pressed");
}
if (! (buttons & (1 << BUTTON_DOWN))) {
Serial.println("Button B pressed");
}
if (! (buttons & (1 << BUTTON_LEFT))) {
Serial.println("Button Y pressed");
}
if (! (buttons & (1 << BUTTON_UP))) {
Serial.println("Button x pressed");
}
if (! (buttons & (1 << BUTTON_SEL))) {
Serial.println("Button SEL pressed");
}
}
if(!digitalRead(IRQ_PIN2)){
uint32_t buttons = ss.digitalReadBulk(button_mask2);
//Serial.println(buttons, BIN);
if (! (buttons & (1 << BUTTON_RIGHT))) {
Serial.println("Button A pressed");
}
if (! (buttons & (1 << BUTTON_DOWN))) {
Serial.println("Button B pressed");
}
if (! (buttons & (1 << BUTTON_LEFT))) {
Serial.println("Button Y pressed");
}
if (! (buttons & (1 << BUTTON_UP))) {
Serial.println("Button x pressed");
}
if (! (buttons & (1 << BUTTON_SEL))) {
Serial.println("Button SEL pressed");
}
}
delay(10);
}
Code: Select all
Adafruit_seesaw ss;
Adafruit_seesaw ss2;
ss.begin(0x49);
ss2.begin(0x4a);