diff --git a/CHANGELOG b/CHANGELOG index 36dc1b4..83228aa 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,15 +1,35 @@ 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: Software: 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: Hardware 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). + 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: Flipped srEnable logic to drive logic inveter added to board. @@ -21,6 +41,8 @@ Version 0.1.4: Hardware: 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 Software: diff --git a/README.md b/README.md index a64a7af..0d08c75 100644 --- a/README.md +++ b/README.md @@ -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 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. +06-Jan-2020: Version 0.1.7 - More code clean-up, practical rewrite of main loop. Bitmapped the logo. ```` diff --git a/hifilogix.ino b/hifilogix.ino index 5ff28f9..c269851 100644 --- a/hifilogix.ino +++ b/hifilogix.ino @@ -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 #include #include +#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 clockPin = 9; int dataPin = 12; @@ -19,19 +19,16 @@ int IRin = 7; int srEnable = 5; int matrix = A0; byte out = 0; -int mx = 0; IRrecv remote(IRin); decode_results ircode; - void logo() { - u8g2.clearBuffer(); - u8g2.setFont(u8g2_font_fewture_tr); - u8g2.drawStr(15,14,"HiFiLOGIX"); - u8g2.setFont(u8g2_font_freedoomr10_tu); - u8g2.drawStr(14,30,"DENON PMA-770"); - u8g2.sendBuffer(); - u8g2.setFont(u8g2_font_logisoso28_tr); - } +void logo() // Logo is now bitmapped. Saves a good bit of space this way. +{ + u8g2.firstPage(); + do { + u8g2.drawXBMP(14,4,hifilogix_width,hifilogix_height,hifilogix_bits); + } while ( u8g2.nextPage() ); +} // I also borrowed this from an example. I'll figure out how it works later. void updateShiftRegister() @@ -41,14 +38,14 @@ void updateShiftRegister() 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; updateShiftRegister(); out = op; // No more bitset. This works better. updateShiftRegister(); u8g2.clearBuffer(); - u8g2.drawStr(x,30,i); + u8g2.drawStr(x,30,inputs[i]); u8g2.sendBuffer(); // Don't cross the streams! } @@ -63,40 +60,25 @@ void setup() remote.enableIRIn(); logo(); // It's so pretty! 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. } -void loop() { - +void loop() +{ 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 - 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"); +byte icode = 0; // I changed how I handed the inputs. if (remote.decode(&ircode)) { - switch(ircode.value){ - case 0xFF6897: - DontCrossTheStreams(64,10,"TAPE-2"); // Same thing except for remote input. - break; - case 0xFF9867: - DontCrossTheStreams(32,10,"TAPE-1"); - break; - case 0xFFB04F: - DontCrossTheStreams(16,32,"AUX"); - break; - 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(); - } + icode = ircode.value; + remote.resume(); + } +// I don't know if it improves things, but I sure like how much smaller this section is. +if ((mx > 100 && mx < 200) || (icode == 0x97)) DontCrossTheStreams(64,10,0); // The code I originally used to figure out my +if ((mx > 500 && mx < 600) || (icode == 0x67)) DontCrossTheStreams(32,10,1); // remote codes returned 3 bytes in hex. I can't +if ((mx > 900 && mx < 950) || (icode == 0x4F)) DontCrossTheStreams(16,32,2); // remember what that code was, but I only need +if ((mx > 1000) || (icode == 0xCF)) DontCrossTheStreams(8,18,3); // the last bit with the remote I'm using. +if ((mx > 820 && mx < 899) || (icode == 0xE7)) DontCrossTheStreams(6,1,4); // I'm working on making the bare-bones utility I +if ((mx > 700 && mx < 800) || (icode == 0x85)) DontCrossTheStreams(5,1,5); // wrote a bit more user-friendly. delay(200); } \ No newline at end of file