/* HiFiLOGIX 0.1.6 dewdude@gmail.com - 05-JAN-2020 */ #include #include #include U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); int latchPin = 11; int clockPin = 9; int dataPin = 12; 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 updateShiftRegister() { digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, out); digitalWrite(latchPin, HIGH); } void DontCrossTheStreams(byte op, int x, const char* 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.sendBuffer(); // Don't cross the streams! } void setup() { pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(srEnable, OUTPUT); u8g2.begin(); 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. digitalWrite(srEnable,HIGH); // Now drives a logic inverter. } 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"); 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(); } delay(200); }