
//вывод картинок на два разных дисплея
#include <Arduino.h>
#include <U8g2lib.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
#include "ris.h"
#include "ris_.h"
#define TFT_CS 16
#define TFT_DC 21
U8G2_ST7565_ERC12864_F_4W_HW_SPI u8g2(U8G2_R0,/* cs=*/17 , /* rs=*/21 , /* rse=*/ 22);// для rp2040 (отдельно разводят выводы CS и reset)
Adafruit_ST7735 tft = Adafruit_ST7735(/* TFT_CS=*/16, /* TFT_DC=*/21, /* TFT_RST=*/20);//для rp2040
// TFT_SCL 18
// TFT_SDA 19
int t=100;// пауза
void setup()
{
//
u8g2.begin();
u8g2.sendF("c", 0xA7);//инверсия цвета
u8g2.setContrast (20);
//
tft.initR(INITR_BLACKTAB);
tft.setRotation(2);
tft.fillScreen(tft.Color565(0,0,0));
//
}
void loop()
{
//u8g2.clearBuffer();
u8g2.drawXBMP( 0, 0, 128, 64,ris_1 ); u8g2.sendBuffer();drawFoto(0,0,ris_01,128,160); delay(t);
u8g2.drawXBMP( 0, 0, 128, 64,ris_2 ); u8g2.sendBuffer();drawFoto(0,0,ris_02,128,160); delay(t);
u8g2.drawXBMP( 0, 0, 128, 64,ris_3 ); u8g2.sendBuffer();drawFoto(0,0,ris_03,128,160); delay(t);
u8g2.drawXBMP( 0, 0, 128, 64,ris_4 ); u8g2.sendBuffer();drawFoto(0,0,ris_04,128,160); delay(t);
u8g2.drawXBMP( 0, 0, 128, 64,ris_5 ); u8g2.sendBuffer();drawFoto(0,0,ris_02,128,160); delay(t);
u8g2.drawXBMP( 0, 0, 128, 64,ris_6 ); u8g2.sendBuffer();drawFoto(0,0,ris_03,128,160); delay(t);
u8g2.drawXBMP( 0, 0, 128, 64,ris_7 ); u8g2.sendBuffer();drawFoto(0,0,ris_01,128,160); delay(t);
u8g2.drawXBMP( 0, 0, 128, 64,ris_8 ); u8g2.sendBuffer();drawFoto(0,0,ris_02,128,160); delay(t);
u8g2.drawXBMP( 0, 0, 128, 64,ris_9 ); u8g2.sendBuffer();drawFoto(0,0,ris_03,128,160); delay(t);
}
/////////////////////////////////////////////////////////////////
void drawFoto(int x,int y, const uint8_t *bitmap,int w,int h) {//функция вывода фотокартинки
if(x<0||x+w>128||y<0||y+h>160){return;}
tft.setAddrWindow(x,y,x+w-1,y+h-1);
SPI.beginTransaction(SPISettings(40000000, MSBFIRST, SPI_MODE0));
digitalWrite(TFT_DC, HIGH);
digitalWrite(TFT_CS, LOW);
for(int j=0; j<h; j++) {
for(int i=0; i<2*w; i=i+2) {
SPI.transfer(bitmap[i+1+j*2*w]);SPI.transfer(bitmap[i+j*2*w]);
// SPI.transfer(pgm_read_byte(bitmap+i+1+j*2*w));SPI.transfer(pgm_read_byte(bitmap+i+j*2*w));
}
}
digitalWrite(TFT_CS, HIGH);
SPI.endTransaction();
///
}
////////////////////////////////////////////////////////////////////
Вот вариант, который ожидаемо заработал (не думал правда, что ресет тоже надо разводить). Это аппаратный SPI 0 , дисплеи параллельны. Ресурс платы, как я понимаю, позволяет вешать гирлянду разномастных экранов и библиотек в различных вариациях соединений. Как прописывать второй SPI ?, чтобы работало с первым на своей группе экранов.