|
|
@@ -0,0 +1,92 @@ |
|
|
|
// Advanced Microcontroller-based Audio Workshop |
|
|
|
// |
|
|
|
// Part 3-3: TFT Display |
|
|
|
|
|
|
|
#include <ILI9341_t3.h> |
|
|
|
#include <font_Arial.h> // from ILI9341_t3 |
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////// |
|
|
|
// copy the Design Tool code here |
|
|
|
/////////////////////////////////// |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define TFT_DC 20 |
|
|
|
#define TFT_CS 21 |
|
|
|
#define TFT_RST 255 // 255 = unused, connect to 3.3V |
|
|
|
#define TFT_MOSI 7 |
|
|
|
#define TFT_SCLK 14 |
|
|
|
#define TFT_MISO 12 |
|
|
|
ILI9341_t3 tft = ILI9341_t3(TFT_CS, TFT_DC, TFT_RST, TFT_MOSI, TFT_SCLK, TFT_MISO); |
|
|
|
|
|
|
|
|
|
|
|
void setup() { |
|
|
|
Serial.begin(9600); |
|
|
|
delay(500); |
|
|
|
tft.begin(); |
|
|
|
tft.fillScreen(ILI9341_BLACK); |
|
|
|
tft.setTextColor(ILI9341_YELLOW); |
|
|
|
tft.setFont(Arial_24); |
|
|
|
//tft.setTextSize(3); |
|
|
|
tft.setCursor(40, 8); |
|
|
|
tft.println("Peak Meter"); |
|
|
|
|
|
|
|
AudioMemory(10); |
|
|
|
sgtl5000_1.enable(); |
|
|
|
sgtl5000_1.volume(0.5); |
|
|
|
SPI.setMOSI(7); |
|
|
|
SPI.setSCK(14); |
|
|
|
if (!(SD.begin(10))) { |
|
|
|
while (1) { |
|
|
|
Serial.println("Unable to access the SD card"); |
|
|
|
delay(500); |
|
|
|
} |
|
|
|
} |
|
|
|
delay(1000); |
|
|
|
} |
|
|
|
|
|
|
|
elapsedMillis msecs; |
|
|
|
|
|
|
|
void loop() { |
|
|
|
if (playSdWav1.isPlaying() == false) { |
|
|
|
Serial.println("Start playing"); |
|
|
|
//playSdWav1.play("SDTEST1.WAV"); |
|
|
|
//playSdWav1.play("SDTEST2.WAV"); |
|
|
|
playSdWav1.play("SDTEST3.WAV"); |
|
|
|
//playSdWav1.play("SDTEST4.WAV"); |
|
|
|
delay(10); // wait for library to parse WAV info |
|
|
|
} |
|
|
|
|
|
|
|
if (msecs > 15) { |
|
|
|
if (peak1.available() && peak2.available()) { |
|
|
|
msecs = 0; |
|
|
|
float leftNumber = peak1.read(); |
|
|
|
float rightNumber = peak2.read(); |
|
|
|
Serial.print(leftNumber); |
|
|
|
Serial.print(", "); |
|
|
|
Serial.print(rightNumber); |
|
|
|
Serial.println(); |
|
|
|
|
|
|
|
// draw the verticle bars |
|
|
|
int height = leftNumber * 240; |
|
|
|
tft.fillRect(60, 280 - height, 40, height, ILI9341_GREEN); |
|
|
|
tft.fillRect(60, 280 - 240, 40, 240 - height, ILI9341_BLACK); |
|
|
|
height = rightNumber * 240; |
|
|
|
tft.fillRect(140, 280 - height, 40, height, ILI9341_GREEN); |
|
|
|
tft.fillRect(140, 280 - 240, 40, 240 - height, ILI9341_BLACK); |
|
|
|
// a smarter approach would redraw only the changed portion... |
|
|
|
|
|
|
|
// draw numbers underneath each bar |
|
|
|
tft.setFont(Arial_14); |
|
|
|
tft.fillRect(60, 284, 40, 16, ILI9341_BLACK); |
|
|
|
tft.setCursor(60, 284); |
|
|
|
tft.print(leftNumber); |
|
|
|
tft.fillRect(140, 284, 40, 16, ILI9341_BLACK); |
|
|
|
tft.setCursor(140, 284); |
|
|
|
tft.print(rightNumber); |
|
|
|
} |
|
|
|
} |
|
|
|
} |