hi,
bit of newbie here in need of advice. updates seem progressing faster i'm learning!
i made frankenstein sketch leonardo control system volume, largely advice posted stefan jones on blog. used remote class , mods core files.
all seemed working intended win7 setup... updated win10. leonardo no longer mounts after rebooting (shows usb com port) , needs resetting before works. read somewhere newer source code should fix this, downloaded latest, recompiled , errors everywhere!
i know code wasn't perfect, , needed rewriting. wondering if there's easier ways of doing now?
all needed pushbutton vol+ vol- , mute (much on extended keyboards, or laptops). rotary volume might better. system volume, not line volume.
searches have failed me. maybe simple!
i can upload code if helps (please dont judge me on though)
bit of newbie here in need of advice. updates seem progressing faster i'm learning!
i made frankenstein sketch leonardo control system volume, largely advice posted stefan jones on blog. used remote class , mods core files.
all seemed working intended win7 setup... updated win10. leonardo no longer mounts after rebooting (shows usb com port) , needs resetting before works. read somewhere newer source code should fix this, downloaded latest, recompiled , errors everywhere!
i know code wasn't perfect, , needed rewriting. wondering if there's easier ways of doing now?
all needed pushbutton vol+ vol- , mute (much on extended keyboards, or laptops). rotary volume might better. system volume, not line volume.
searches have failed me. maybe simple!
i can upload code if helps (please dont judge me on though)
i think code got working originally. broke coding rules , conventions wasnt copied , pasted.
code: [select]
// constants
// set pin numbers buttons:
const int downvolume = 2;
const int mutevolume = 3;
const int upvolume = 4;
const int = 5;
const int forward = 6;
const int playpause = 7;
const int outpin = 13; // play/pause led
// long's because time in ms become bigger int.
long debounce = 20; // debounce in ms
long holdtime = 2000; // ms hold period: how long wait press+hold event
long time = 0;
// variables
int backval = 0; // value read button
int backlast = 0; // buffered value of button's previous state
int forwardval = 0;
int forwardlast = 0;
long btndntime; // time button pressed down
long btnuptime; // time button released
boolean ignoreup = false; // whether ignore button release because click+hold triggered
int state = high; // current state of output pin
int reading; // current reading input pin
int previous = low; // previous reading input pin
// initialize buttons' inputs:
void setup()
{
pinmode(downvolume, input);
pinmode(mutevolume, input);
pinmode(upvolume, input);
pinmode(back, input);
pinmode(forward, input);
pinmode(playpause, input);
pinmode(outpin, output);
digitalwrite(back, low);
digitalwrite(forward, low);
}
void loop()
{
//**********************rewind , skip back************************
// read state of button
backval = digitalread(back);
// test button pressed , store down time
if (backval == high && backlast == low && (millis() - btnuptime) > debounce)
{
btndntime = millis();
}
// test button release , store time
if (backval == low && backlast == high && (millis() - btndntime) > debounce)
{
if (ignoreup == false) event1();
else ignoreup = false;
btnuptime = millis();
}
// test button held down longer hold time
if (backval == high && (millis() - btndntime) > holdtime)
{
event2();
ignoreup = true;
btndntime = millis();
}
backlast = backval;
//***********************************************************************
//**********************fforward , skip forward************************
// read state of button
forwardval = digitalread(forward);
// test button pressed , store down time
if (forwardval == high && forwardlast == low && (millis() - btnuptime) > debounce)
{
btndntime = millis();
}
// test button release , store time
if (forwardval == low && forwardlast == high && (millis() - btndntime) > debounce)
{
if (ignoreup == false) event3();
else ignoreup = false;
btnuptime = millis();
}
// test button held down longer hold time
if (forwardval == high && (millis() - btndntime) > holdtime)
{
event4();
ignoreup = true;
btndntime = millis();
}
forwardlast = forwardval;
//***********************************************************************
//*****************************volume************************************
if (digitalread(downvolume) == high)
{
remote.decrease();
delay(100); // simple debounce
remote.clear(); // prevent duplicate activation
}
if (digitalread(mutevolume) == high)
{
remote.mute();
delay(500); // simple debounce
remote.clear(); // prevent duplicate activation
}
if (digitalread(upvolume) == high)
{
remote.increase();
delay(100); // simple debounce
remote.clear(); // prevent duplicate activation
}
//***********************************************************************
//*****************************play/pause********************************
reading = digitalread(playpause);
// if input went low , high , we've waited long enough
// ignore noise on circuit, toggle output pin , remember
// time
if (reading == high && previous == low && millis() - time > debounce) {
if (state == high)
{
state = low;
remote.pause();
// delay(100); // simple debounce
remote.clear(); // prevent duplicate activation
}
else
{
state = high;
remote.play();
// delay(100); // simple debounce
remote.clear(); // prevent duplicate activation
}
time = millis();
}
digitalwrite(outpin, state);
previous = reading;
}
//=================================================
// events trigger click , press+hold
void event1()
{
remote.previous();
remote.clear(); // prevent duplicate activation
}
void event2()
{
remote.rewind();
remote.clear();
}
void event3()
{
remote.next();
remote.clear(); // prevent duplicate activation
}
void event4()
{
remote.forward();
remote.clear();
}
/*
if (digitalread(upvolume) == high) {
remote.increase();
delay(100); // simple debounce
remote.clear(); // prevent duplicate activation
}
if (digitalread(downvolume) == high) {
remote.decrease();
delay(100); // simple debounce
remote.clear(); // prevent duplicate activation
}
if (digitalread(mutevolume) == high) {
remote.mute();
delay(500); // simple debounce
remote.clear(); // prevent duplicate activation
}
if (digitalread(playmedia) == high) {
remote.play();
delay(100); // simple debounce
remote.clear(); // prevent duplicate activation
}
if (digitalread(pausemedia) == high) {
remote.pause();
delay(100); // simple debounce
remote.clear(); // prevent duplicate activation
}
if (digitalread(rewindmedia) == high) {
remote.rewind();
delay(100); // simple debounce
remote.clear(); // prevent duplicate activation
}
*/
Arduino Forum > Using Arduino > Project Guidance > Windows10 system volume controller
arduino
Comments
Post a Comment