You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.5 KiB
C++

/*
HiFiLOGIX 0.1.6
dewdude@gmail.com - 05-JAN-2020
*/
#include <Wire.h>
#include <U8g2lib.h>
#include <IRremote.h>
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);
}