Loaded an old Emerson roll-top with a BT audio board, touchscreen, and custom speaker enclosure. this project and its guts were #FOF, so it should be a fun log.
Coding the screen interface and monitoring serial comms.
Taking volume measurement of old speaker enclosure to get an accurate replication.
Speaker enclosure spec'd out.
Fitting printed parts.
Right here is where I fried the first amp.
Ordered a replacement class D from adafruit. iz really loud.final components in the cabinetPrinted some translucent buttons to put the LED indicators from the arduino and BT module.
/*
El Radio
Written by Jeremy Lambert
Copyright 2015 All Rights Reserved
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
*/#include "TFTLCD.h"#include "TouchScreen.h"#if not defined USE_ADAFRUIT_SHIELD_PINOUT #error "For use with the shield, make sure to #define USE_ADAFRUIT_SHIELD_PINOUT in the TFTLCD.h library file"#endif// These are the pins for the shield!#define YP A1 // must be an analog pin, use "An" notation!#define XM A2 // must be an analog pin, use "An" notation!#define YM 7 // can be a digital pin#define XP 6 // can be a digital pin#define TS_MINX 150#define TS_MINY 120#define TS_MAXX 920#define TS_MAXY 940#define MINPRESSURE 10#define MAXPRESSURE 1000
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);
#define LCD_CS A3#define LCD_CD A2#define LCD_WR A1#define LCD_RD A0 // Color definitions#define BLACK 0x0000#define BLUE 0x001F#define RED 0xF800#define GREEN 0x07E0#define CYAN 0x07FF#define MAGENTA 0xF81F#define YELLOW 0xFFE0 #define WHITE 0xFFFFTFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, 0);
#define BOXSIZE 80
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is completevoidsetup(void){
//Serial.println("TOUCHSCREEN::");
tft.reset();
uint16_t identifier = tft.readRegister(0x0);
if (identifier == 0x9325) {
//Serial.println("Found ILI9325");
} elseif(identifier == 0x9328){
//Serial.println("Found ILI9328");
} else {
//Serial.print("Unknown driver chip ");//Serial.println(identifier, HEX);while (1);
}
tft.initDisplay();
tft.fillScreen(BLACK);
DrawButtons();
delay(5000); //let the BT module boot
inputString.reserve(12);
Serial.begin(115200);
Serial.println("CMD"); //enter command mode.
delay(300);
Serial.println("B"); //try to reconnect to the last device
pinMode(13, OUTPUT);
}
voidserialEvent(){
while (Serial.available())
{
// get the new byte:char inChar = (char)Serial.read();
// add it to the inputString:
inputString += inChar;
// if the incoming character is a newline, set a flag// so the main loop can do something about it:if (inChar == '\n')
{
if (!inputString.startsWith("AOK"))
{
stringComplete = true;
char output[inputString.length()];
//Serial.println(inputString);
inputString.toCharArray(output, inputString.length());
tft.drawString(0,0,output, WHITE, 2); //TODO: need to put this somewhere else on the screen.
}
}
}
}
voidloop(){
digitalWrite(13, HIGH);
Point p = ts.getPoint();
digitalWrite(13, LOW);
// if you're sharing pins, you'll need to fix the directions of the touchscreen pins!//pinMode(XP, OUTPUT);
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
//pinMode(YM, OUTPUT);// we have some minimum pressure we consider 'valid'// pressure of 0 means no pressing!if (p.z > MINPRESSURE && p.z < MAXPRESSURE)
{
// turn from 0->1023 to tft.width
p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0);
p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0);
/*
Serial.print("("); Serial.print(p.x);
Serial.print(", "); Serial.print(p.y);
Serial.println(")");
*/if (p.x < BOXSIZE)
{
if (p.y > 240)
{
//rewind
Serial.println("AT-");
blinkButton(0);
return;
}
if (p.y > 80)
{
//volume -
Serial.println("AV-");
blinkButton(4);
return;
}
if (p.y > 0)
{
//volume +
Serial.println("AV+");
blinkButton(3);
return;
}
}
if (p.x < BOXSIZE*2)
{
if (p.y > 240)
{
//play/pause
Serial.println("AP");
blinkButton(1);
return;
}
}
if (p.x < BOXSIZE*3)
...
Hey Jeremy, it would be nice to cover the borders of the touchpad with some lasercut brass element. Brass always looks good on wood like this. Nice project - i like the style.
Thank you. I'd like a border, as well as antique translucent knobs to replace the printed plugs that are there now. Nothing I have seen has struck my fancy, and a laser cutter is one of the few toys I don't have at my disposal.
Hey Jeremy, it would be nice to cover the borders of the touchpad with some lasercut brass element. Brass always looks good on wood like this. Nice project - i like the style.