BMP180 и экран 1.77 160x128 не хотят жить дружно на Mega

Нет ответов
Bender
Bender аватар
Offline
Зарегистрирован: 05.04.2011

Отдельно все работает прекрасно (использовал примеры из библиотек), но если вызвать Serial.print(bmp.readTemperature()); в скейтче для экрана, то устройство перезапускается.

Подключение:

BMP180:
SDA - 20
SCL - 21

Экран:
SCK - 52
SDA - 51
RES - 8
RS - 9
CS - 10

Подумал, что явно какие-то пины конфликтуют "внутри" :) и передвинул (поправив в скейтче)
RES - 3
RS - 4
CS - 5

Сбросы прекратились, а Serial.print(bmp.readTemperature()); начала возвращать "0.00"

Подвинул еще:
RES - 5
RS - 6
CS - 7

Сбросы начались опять.

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>

#include <Adafruit_BMP085.h>

// For the breakout board, you can use any 2 or 3 pins.
// These pins will also work for the 1.8" TFT shield.

//#define TFT_CS        10
//#define TFT_RST        8 // Or set to -1 and connect to Arduino RESET pin
//#define TFT_DC         9


//#define TFT_CS        5
///#define TFT_RST        3 // Or set to -1 and connect to Arduino RESET pin
//#define TFT_DC         4


#define TFT_CS        7
#define TFT_RST        5 // Or set to -1 and connect to Arduino RESET pin
#define TFT_DC         6

// OPTION 1 (recommended) is to use the HARDWARE SPI pins, which are unique
// to each board and not reassignable. For Arduino Uno: MOSI = pin 11 and
// SCLK = pin 13. This is the fastest mode of operation and is required if
// using the breakout board's microSD card.

// For 1.44" and 1.8" TFT with ST7735 use:
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// OPTION 2 lets you interface the display using ANY TWO or THREE PINS,
// tradeoff being that performance is not as fast as hardware SPI above.
//#define TFT_MOSI 11  // Data out
//#define TFT_SCLK 13  // Clock out


Adafruit_BMP085 bmp;
float p = 3.1415926;

void setup(void) {
  Serial.begin(9600);
  Serial.print(F("Hello! ST77xx TFT Test"));
  // Use this initializer if using a 1.8" TFT screen:
  tft.initR(INITR_BLACKTAB);      // Init ST7735S chip, black tab
  Serial.println(F("Initialized"));

  uint16_t time = millis();
  tft.fillScreen(ST77XX_BLACK);
  time = millis() - time;
  Serial.println(time, DEC);
  delay(500);
}

void loop() {
  tftPrintTest();
  delay(2000);
}

void tftPrintTest() {
  tft.setTextWrap(false);
  tft.fillScreen(ST77XX_BLACK);
  tft.setCursor(4, 4);
//  tft.setTextColor(ST77XX_GREEN);
  tft.setTextSize(1);

  tft.println("Out");
  //tft.println(bmp.readTemperature());
  Serial.print("Temperature = ");
}

Вывод когда все "работает":
Hello! ST77xx TFT TestInitialized
80
Temperature = Temperature = Temperature =

Вывод с опросом датчика:
Hello! ST77xx TFT TestInitialized
80
TemperaHello! ST77xx TFT TestInitialized
80
Tempera⸮Hello! ST77xx TFT TestInitialized
81
TemperaHello! ST77xx TFT TestInitialized
80