more code rewrite. bitmapped logo.

master
Jay 4 years ago
parent 6bb658d8ff
commit fceb37c9e0

@ -1,15 +1,35 @@
CHANGELOG: CHANGELOG:
Version 0.1.7:
Main:
Decided to try and comment changes better.
This at least gives a minor insight in to why I did it. I'll mark comments added later with an asterisk.
Software:
Practically rewrote the main loop.
Instead of all the switch/case bullshit, I just dump to a variable and make that part of the
conditional IF statements.
Bitmapped the logo.
Fonts are large. The 98x24 bitmap was smaller.
Version 0.1.6: Version 0.1.6:
Software: Software:
Removed a bunch of functions in favor of passing arguments to function. Removed a bunch of functions in favor of passing arguments to function.
The indvidual functions for setting each input and setting the LCD have largely been combined
in to one since I figured out how to use arguments. Additional stuff changed/added to accomodate
this.*
Version 0.1.5: Version 0.1.5:
Hardware Hardware
Removed 2003 ground from 595 enable line. (That was a stupid idea that thankfully didn't blow up.) Removed 2003 ground from 595 enable line. (That was a stupid idea that thankfully didn't blow up.)
I calculated the relays to be 40mA each. Sinking that much current from an IO pin is pushing it, let alone
the fact I need two relays for phono inputs.
Added logic invterter to drive the 595 enable and 2003 ground. (Transistor can sink more current). Added logic invterter to drive the 595 enable and 2003 ground. (Transistor can sink more current).
The 2N2222 is rated for like...800mA or something; wayyyy more than I need. In retrospect, this would have been
a better solution overall than the reset circuit on the 595. Will I change it? I'll have to play with it.
Software: Software:
Flipped srEnable logic to drive logic inveter added to board. Flipped srEnable logic to drive logic inveter added to board.
@ -21,6 +41,8 @@ Version 0.1.4:
Hardware: Hardware:
Tied ULN2003/2803 ground to 595's enable line Tied ULN2003/2803 ground to 595's enable line
Even with the shift register quiet during boot, the darlington array isn't; and pull-down
resistors don't seem to help. But I soon realize this is a stupid idea.
Replaced 1602 display with SSD1306 128x32 OLED Replaced 1602 display with SSD1306 128x32 OLED
Software: Software:

@ -14,6 +14,7 @@ Arduino Control for Your Vintage Stereo
04-Jan-2020: Version 0.1.4 - Changed project name. Removed 1602 display code. Added 128x32 OLED code 04-Jan-2020: Version 0.1.4 - Changed project name. Removed 1602 display code. Added 128x32 OLED code
05-Jan-2020: Version 0.1.5 - Fixed stupid mistake in hardware. Flipped logic of srEnable for new circuit. 05-Jan-2020: Version 0.1.5 - Fixed stupid mistake in hardware. Flipped logic of srEnable for new circuit.
05-Jan-2020: Version 0.1.6 - Lots of code clean-up, condensing, rewriting. 05-Jan-2020: Version 0.1.6 - Lots of code clean-up, condensing, rewriting.
06-Jan-2020: Version 0.1.7 - More code clean-up, practical rewrite of main loop. Bitmapped the logo.
```` ````

@ -1,17 +1,17 @@
/* /*
HiFiLOGIX 0.1.6 HiFiLOGIX 0.1.7
dewdude@gmail.com - 05-JAN-2020 dewdude@gmail.com - 06-JAN-2019
*/ */
#include <Wire.h> #include <Wire.h>
#include <U8g2lib.h> #include <U8g2lib.h>
#include <IRremote.h> #include <IRremote.h>
#include "logo.h" // XBMP data for logo.
U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
const char *inputs[] = {"TAPE-2","TAPE-1","AUX","TUNER","PHONO-2","PHONO-1"};
int latchPin = 11; int latchPin = 11;
int clockPin = 9; int clockPin = 9;
int dataPin = 12; int dataPin = 12;
@ -19,19 +19,16 @@ int IRin = 7;
int srEnable = 5; int srEnable = 5;
int matrix = A0; int matrix = A0;
byte out = 0; byte out = 0;
int mx = 0;
IRrecv remote(IRin); IRrecv remote(IRin);
decode_results ircode; decode_results ircode;
void logo() { void logo() // Logo is now bitmapped. Saves a good bit of space this way.
u8g2.clearBuffer(); {
u8g2.setFont(u8g2_font_fewture_tr); u8g2.firstPage();
u8g2.drawStr(15,14,"HiFiLOGIX"); do {
u8g2.setFont(u8g2_font_freedoomr10_tu); u8g2.drawXBMP(14,4,hifilogix_width,hifilogix_height,hifilogix_bits);
u8g2.drawStr(14,30,"DENON PMA-770"); } while ( u8g2.nextPage() );
u8g2.sendBuffer(); } // I also borrowed this from an example. I'll figure out how it works later.
u8g2.setFont(u8g2_font_logisoso28_tr);
}
void updateShiftRegister() void updateShiftRegister()
@ -41,14 +38,14 @@ void updateShiftRegister()
digitalWrite(latchPin, HIGH); digitalWrite(latchPin, HIGH);
} }
void DontCrossTheStreams(byte op, int x, const char* i) // Oh yeah, this much nicer than 8 seperate functions. void DontCrossTheStreams(byte op, int x, int i) // Oh yeah, this much nicer than 8 seperate functions.
{ {
out = 0; out = 0;
updateShiftRegister(); updateShiftRegister();
out = op; // No more bitset. This works better. out = op; // No more bitset. This works better.
updateShiftRegister(); updateShiftRegister();
u8g2.clearBuffer(); u8g2.clearBuffer();
u8g2.drawStr(x,30,i); u8g2.drawStr(x,30,inputs[i]);
u8g2.sendBuffer(); u8g2.sendBuffer();
// Don't cross the streams! // Don't cross the streams!
} }
@ -63,40 +60,25 @@ void setup()
remote.enableIRIn(); remote.enableIRIn();
logo(); // It's so pretty! logo(); // It's so pretty!
delay(2000); // It takes the Denon about 4.5 seconds to kick speakers on. delay(2000); // It takes the Denon about 4.5 seconds to kick speakers on.
DontCrossTheStreams(16,32,"AUX"); // Someday this will not be static. u8g2.setFont(u8g2_font_logisoso28_tr); // Moved here since logo is bitmap.
DontCrossTheStreams(16,32,2); // Someday this will not be static.
digitalWrite(srEnable,HIGH); // Now drives a logic inverter. digitalWrite(srEnable,HIGH); // Now drives a logic inverter.
} }
void loop() { void loop()
{
int mx = analogRead(matrix); int mx = analogRead(matrix);
if (mx > 100 && mx < 200) DontCrossTheStreams(64,10,"TAPE-2"); // Byte value for outputs, X offset for display, text to display byte icode = 0; // I changed how I handed the inputs.
if (mx > 500 && mx < 600) DontCrossTheStreams(32,10,"TAPE-1");
if (mx > 900 && mx < 950) DontCrossTheStreams(16,32,"AUX");
if (mx > 1000) DontCrossTheStreams(8,18,"TUNER");
if (mx > 820 && mx < 899) DontCrossTheStreams(6,1,"PHONO-2");
if (remote.decode(&ircode)) { if (remote.decode(&ircode)) {
switch(ircode.value){ icode = ircode.value;
case 0xFF6897: remote.resume();
DontCrossTheStreams(64,10,"TAPE-2"); // Same thing except for remote input. }
break; // I don't know if it improves things, but I sure like how much smaller this section is.
case 0xFF9867: if ((mx > 100 && mx < 200) || (icode == 0x97)) DontCrossTheStreams(64,10,0); // The code I originally used to figure out my
DontCrossTheStreams(32,10,"TAPE-1"); if ((mx > 500 && mx < 600) || (icode == 0x67)) DontCrossTheStreams(32,10,1); // remote codes returned 3 bytes in hex. I can't
break; if ((mx > 900 && mx < 950) || (icode == 0x4F)) DontCrossTheStreams(16,32,2); // remember what that code was, but I only need
case 0xFFB04F: if ((mx > 1000) || (icode == 0xCF)) DontCrossTheStreams(8,18,3); // the last bit with the remote I'm using.
DontCrossTheStreams(16,32,"AUX"); if ((mx > 820 && mx < 899) || (icode == 0xE7)) DontCrossTheStreams(6,1,4); // I'm working on making the bare-bones utility I
break; if ((mx > 700 && mx < 800) || (icode == 0x85)) DontCrossTheStreams(5,1,5); // wrote a bit more user-friendly.
case 0xFF30CF:
DontCrossTheStreams(8,18,"TUNER");
break;
case 0xFF18E7:
DontCrossTheStreams(6,1,"PHONO-2");
break;
case 0xFF7A85:
DontCrossTheStreams(5,1,"PHONO-1");
break;
}
remote.resume();
}
delay(200); delay(200);
} }
Loading…
Cancel
Save