Skip to main content
Arduino

Return to Question

replaced http://arduino.stackexchange.com/ with https://arduino.stackexchange.com/
Source Link
Tweeted twitter.com/StackArduino/status/666847549328896001
deleted 31 characters in body
Source Link

EDIT: Current Code (compiled but output is : zP, BP, CP, DP, etc!)

enum { sw0=2, sw1=3, sw2=4, sw3=5, sw4=6, sw5=7, sw6=8, sw7=9}; // Switchbutton lines
enum { nSwitches=8, bounceMillis=42}; // # of switches; debounce delay
struct ButtonStruct {
 unsigned long int bounceEnd; // Debouncing-flag and end-time
 // Switch number, press-action, release-action, and prev reading
 byte swiNum, swiActP, charMod, swiActR, swiPrev;
};
struct ButtonStruct buttons[nSwitches] = {
 {0, sw0, 'z', KEY_LEFT_CTRL}, 
 {0, sw1, 'B'}, 
 {0, sw2, 'C'}, 
 {0, sw3, 'D'},
 {0, sw4, 'E'},
 {0, sw5, 'F'},
 {0, sw6, 'G'},
 {0, sw7, 'H'}};
//--------------------------------------------------------
void setup() {
 for (int i=0; i<nSwitches; ++i)
 pinMode(buttons[i].swiNum, INPUT_PULLUP);
Keyboard.begin();
}
//--------------------------------------------------------
byte readSwitch (byte swiNum) {
 // Following inverts the pin reading (assumes pulldown = pressed)
 return 1 - digitalRead(swiNum);
}
//--------------------------------------------------------
void doAction(byte swin, char code, char tosend, char chmodi) {
if (chmodi) { // See if modifier needed
 Keyboard.press(chmodi);
 Keyboard.press(tosend);
 delay(100);
 Keyboard.releaseAll();
} else {
 Keyboard.write(tosend);
}
}
//--------------------------------------------------------
void doButton(byte bn) {
 struct ButtonStruct *b = buttons + bn;
 if (b->bounceEnd) { // Was button changing?
 // It was changing, see if debounce time is done.
 if (b->bounceEnd < millis()) {
 b->bounceEnd = 0; // Debounce time is done, so clear flag
 // See if the change was real, or a glitch
 if (readSwitch(b->swiNum) == b->swiPrev) {
 // Current reading is same as trigger reading, so do it
 if (b->swiPrev) {
 doAction(b->swiNum, b->charMod, 'P', b->swiActP, b->charMod);
 } 
 }
 }
 } else { // It wasn't changing; but see if it's changing now
 if (b->swiPrev != readSwitch(b->swiNum)) {
 b->swiPrev = readSwitch(b->swiNum);
 b->bounceEnd = millis()+bounceMillis; // Set the Debounce flag
 }
 }
}
//--------------------------------------------------------
long int seconds, prevSec=0;
void loop() {
 for (int i=0; i<nSwitches; ++i)
 doButton(i);
}

EDIT: Current Code (compiled but output is : zP, BP, CP, DP, etc)

enum { sw0=2, sw1=3, sw2=4, sw3=5, sw4=6, sw5=7, sw6=8, sw7=9}; // Switchbutton lines
enum { nSwitches=8, bounceMillis=42}; // # of switches; debounce delay
struct ButtonStruct {
 unsigned long int bounceEnd; // Debouncing-flag and end-time
 // Switch number, press-action, release-action, and prev reading
 byte swiNum, swiActP, charMod, swiActR, swiPrev;
};
struct ButtonStruct buttons[nSwitches] = {
 {0, sw0, 'z', KEY_LEFT_CTRL}, 
 {0, sw1, 'B'}, 
 {0, sw2, 'C'}, 
 {0, sw3, 'D'},
 {0, sw4, 'E'},
 {0, sw5, 'F'},
 {0, sw6, 'G'},
 {0, sw7, 'H'}};
//--------------------------------------------------------
void setup() {
 for (int i=0; i<nSwitches; ++i)
 pinMode(buttons[i].swiNum, INPUT_PULLUP);
Keyboard.begin();
}
//--------------------------------------------------------
byte readSwitch (byte swiNum) {
 // Following inverts the pin reading (assumes pulldown = pressed)
 return 1 - digitalRead(swiNum);
}
//--------------------------------------------------------
void doAction(byte swin, char code, char tosend, char chmodi) {
if (chmodi) { // See if modifier needed
 Keyboard.press(chmodi);
 Keyboard.press(tosend);
 delay(100);
 Keyboard.releaseAll();
} else {
 Keyboard.write(tosend);
}
}
//--------------------------------------------------------
void doButton(byte bn) {
 struct ButtonStruct *b = buttons + bn;
 if (b->bounceEnd) { // Was button changing?
 // It was changing, see if debounce time is done.
 if (b->bounceEnd < millis()) {
 b->bounceEnd = 0; // Debounce time is done, so clear flag
 // See if the change was real, or a glitch
 if (readSwitch(b->swiNum) == b->swiPrev) {
 // Current reading is same as trigger reading, so do it
 if (b->swiPrev) {
 doAction(b->swiNum, b->charMod, 'P', b->swiActP);
 } 
 }
 }
 } else { // It wasn't changing; but see if it's changing now
 if (b->swiPrev != readSwitch(b->swiNum)) {
 b->swiPrev = readSwitch(b->swiNum);
 b->bounceEnd = millis()+bounceMillis; // Set the Debounce flag
 }
 }
}
//--------------------------------------------------------
long int seconds, prevSec=0;
void loop() {
 for (int i=0; i<nSwitches; ++i)
 doButton(i);
}

EDIT: Current Code (compiled!)

enum { sw0=2, sw1=3, sw2=4, sw3=5, sw4=6, sw5=7, sw6=8, sw7=9}; // Switchbutton lines
enum { nSwitches=8, bounceMillis=42}; // # of switches; debounce delay
struct ButtonStruct {
 unsigned long int bounceEnd; // Debouncing-flag and end-time
 // Switch number, press-action, release-action, and prev reading
 byte swiNum, swiActP, charMod, swiActR, swiPrev;
};
struct ButtonStruct buttons[nSwitches] = {
 {0, sw0, 'z', KEY_LEFT_CTRL}, 
 {0, sw1, 'B'}, 
 {0, sw2, 'C'}, 
 {0, sw3, 'D'},
 {0, sw4, 'E'},
 {0, sw5, 'F'},
 {0, sw6, 'G'},
 {0, sw7, 'H'}};
//--------------------------------------------------------
void setup() {
 for (int i=0; i<nSwitches; ++i)
 pinMode(buttons[i].swiNum, INPUT_PULLUP);
Keyboard.begin();
}
//--------------------------------------------------------
byte readSwitch (byte swiNum) {
 // Following inverts the pin reading (assumes pulldown = pressed)
 return 1 - digitalRead(swiNum);
}
//--------------------------------------------------------
void doAction(byte swin, char code, char tosend, char chmodi) {
if (chmodi) { // See if modifier needed
 Keyboard.press(chmodi);
 Keyboard.press(tosend);
 delay(100);
 Keyboard.releaseAll();
} else {
 Keyboard.write(tosend);
}
}
//--------------------------------------------------------
void doButton(byte bn) {
 struct ButtonStruct *b = buttons + bn;
 if (b->bounceEnd) { // Was button changing?
 // It was changing, see if debounce time is done.
 if (b->bounceEnd < millis()) {
 b->bounceEnd = 0; // Debounce time is done, so clear flag
 // See if the change was real, or a glitch
 if (readSwitch(b->swiNum) == b->swiPrev) {
 // Current reading is same as trigger reading, so do it
 if (b->swiPrev) {
 doAction(b->swiNum, 'P', b->swiActP, b->charMod);
 } 
 }
 }
 } else { // It wasn't changing; but see if it's changing now
 if (b->swiPrev != readSwitch(b->swiNum)) {
 b->swiPrev = readSwitch(b->swiNum);
 b->bounceEnd = millis()+bounceMillis; // Set the Debounce flag
 }
 }
}
//--------------------------------------------------------
long int seconds, prevSec=0;
void loop() {
 for (int i=0; i<nSwitches; ++i)
 doButton(i);
}
deleted 58 characters in body
Source Link

EDIT: Current Code (compiled but output is : zP, BP, CP, DP, etc)

enum { sw0=2, sw1=3, sw2=4, sw3=5, sw4=6, sw5=7, sw6=8, sw7=9}; // Switchbutton lines
enum { nSwitches=8, bounceMillis=42}; // # of switches; debounce delay
struct ButtonStruct {
 unsigned long int bounceEnd; // Debouncing-flag and end-time
 // Switch number, press-action, release-action, and prev reading
 byte swiNum, swiActP, charMod, swiActR, swiPrev;
};
struct ButtonStruct buttons[nSwitches] = {
 {0, sw0, 'R''z', KEY_LEFT_CTRL}, 
 {0, sw1, 'B'}, 
 {0, sw2, 'C'}, 
 {0, sw3, 'D'},
 {0, sw4, 'E'},
 {0, sw5, 'F'},
 {0, sw6, 'G'},
 {0, sw7, 'H'}};
//--------------------------------------------------------
void setup() {
 for (int i=0; i<nSwitches; ++i)
 pinMode(buttons[i].swiNum, INPUT_PULLUP);
Keyboard.begin();
}
//--------------------------------------------------------
byte readSwitch (byte swiNum) {
 // Following inverts the pin reading (assumes pulldown = pressed)
 return 1 - digitalRead(swiNum);
}
//--------------------------------------------------------
void doAction(byte swin, char code, char actiontosend, char chmodi) {
tosend = b->actionChar;
chmodi = b->charMod;
if (chmodi) { // See if modifier needed
 Keyboard.press(chmodi);
 Keyboard.press(tosend);
 delay(100);
 Keyboard.releaseAll();
} else {
 Keyboard.write(tosend);
}
}
//--------------------------------------------------------
void doButton(byte bn) {
 struct ButtonStruct *b = buttons + bn;
 if (b->bounceEnd) { // Was button changing?
 // It was changing, see if debounce time is done.
 if (b->bounceEnd < millis()) {
 b->bounceEnd = 0; // Debounce time is done, so clear flag
 // See if the change was real, or a glitch
 if (readSwitch(b->swiNum) == b->swiPrev) {
 // Current reading is same as trigger reading, so do it
 if (b->swiPrev) {
 doAction(b->swiNum, 'P', b->swiActP);
 } else {
 doAction(b->swiNum>charMod, 'R''P', b->swiActR>swiActP);
 }
 }
 }
 } else { // It wasn't changing; but see if it's changing now
 if (b->swiPrev != readSwitch(b->swiNum)) {
 b->swiPrev = readSwitch(b->swiNum);
 b->bounceEnd = millis()+bounceMillis; // Set the Debounce flag
 }
 }
}
//--------------------------------------------------------
long int seconds, prevSec=0;
void loop() {
 for (int i=0; i<nSwitches; ++i)
 doButton(i);
}

EDIT: Current Code:

enum { sw0=2, sw1=3, sw2=4, sw3=5, sw4=6, sw5=7, sw6=8, sw7=9}; // Switchbutton lines
enum { nSwitches=8, bounceMillis=42}; // # of switches; debounce delay
struct ButtonStruct {
 unsigned long int bounceEnd; // Debouncing-flag and end-time
 // Switch number, press-action, release-action, and prev reading
 byte swiNum, swiActP, charMod, swiActR, swiPrev;
};
struct ButtonStruct buttons[nSwitches] = {
 {sw0, 'R', KEY_LEFT_CTRL}, 
 {0, sw1, 'B'}, 
 {0, sw2, 'C'}, 
 {0, sw3, 'D'},
 {0, sw4, 'E'},
 {0, sw5, 'F'},
 {0, sw6, 'G'},
 {0, sw7, 'H'}};
//--------------------------------------------------------
void setup() {
 for (int i=0; i<nSwitches; ++i)
 pinMode(buttons[i].swiNum, INPUT_PULLUP);
Keyboard.begin();
}
//--------------------------------------------------------
byte readSwitch (byte swiNum) {
 // Following inverts the pin reading (assumes pulldown = pressed)
 return 1 - digitalRead(swiNum);
}
//--------------------------------------------------------
void doAction(byte swin, char code, char action, char chmodi) {
tosend = b->actionChar;
chmodi = b->charMod;
if (chmodi) { // See if modifier needed
 Keyboard.press(chmodi);
 Keyboard.press(tosend);
 delay(100);
 Keyboard.releaseAll();
} else {
 Keyboard.write(tosend);
}
}
//--------------------------------------------------------
void doButton(byte bn) {
 struct ButtonStruct *b = buttons + bn;
 if (b->bounceEnd) { // Was button changing?
 // It was changing, see if debounce time is done.
 if (b->bounceEnd < millis()) {
 b->bounceEnd = 0; // Debounce time is done, so clear flag
 // See if the change was real, or a glitch
 if (readSwitch(b->swiNum) == b->swiPrev) {
 // Current reading is same as trigger reading, so do it
 if (b->swiPrev) {
 doAction(b->swiNum, 'P', b->swiActP);
 } else {
 doAction(b->swiNum, 'R', b->swiActR);
 }
 }
 }
 } else { // It wasn't changing; but see if it's changing now
 if (b->swiPrev != readSwitch(b->swiNum)) {
 b->swiPrev = readSwitch(b->swiNum);
 b->bounceEnd = millis()+bounceMillis; // Set the Debounce flag
 }
 }
}
//--------------------------------------------------------
long int seconds, prevSec=0;
void loop() {
 for (int i=0; i<nSwitches; ++i)
 doButton(i);
}

EDIT: Current Code (compiled but output is : zP, BP, CP, DP, etc)

enum { sw0=2, sw1=3, sw2=4, sw3=5, sw4=6, sw5=7, sw6=8, sw7=9}; // Switchbutton lines
enum { nSwitches=8, bounceMillis=42}; // # of switches; debounce delay
struct ButtonStruct {
 unsigned long int bounceEnd; // Debouncing-flag and end-time
 // Switch number, press-action, release-action, and prev reading
 byte swiNum, swiActP, charMod, swiActR, swiPrev;
};
struct ButtonStruct buttons[nSwitches] = {
 {0, sw0, 'z', KEY_LEFT_CTRL}, 
 {0, sw1, 'B'}, 
 {0, sw2, 'C'}, 
 {0, sw3, 'D'},
 {0, sw4, 'E'},
 {0, sw5, 'F'},
 {0, sw6, 'G'},
 {0, sw7, 'H'}};
//--------------------------------------------------------
void setup() {
 for (int i=0; i<nSwitches; ++i)
 pinMode(buttons[i].swiNum, INPUT_PULLUP);
Keyboard.begin();
}
//--------------------------------------------------------
byte readSwitch (byte swiNum) {
 // Following inverts the pin reading (assumes pulldown = pressed)
 return 1 - digitalRead(swiNum);
}
//--------------------------------------------------------
void doAction(byte swin, char code, char tosend, char chmodi) {
if (chmodi) { // See if modifier needed
 Keyboard.press(chmodi);
 Keyboard.press(tosend);
 delay(100);
 Keyboard.releaseAll();
} else {
 Keyboard.write(tosend);
}
}
//--------------------------------------------------------
void doButton(byte bn) {
 struct ButtonStruct *b = buttons + bn;
 if (b->bounceEnd) { // Was button changing?
 // It was changing, see if debounce time is done.
 if (b->bounceEnd < millis()) {
 b->bounceEnd = 0; // Debounce time is done, so clear flag
 // See if the change was real, or a glitch
 if (readSwitch(b->swiNum) == b->swiPrev) {
 // Current reading is same as trigger reading, so do it
 if (b->swiPrev) {
 doAction(b->swiNum, b->charMod, 'P', b->swiActP);
 }
 }
 }
 } else { // It wasn't changing; but see if it's changing now
 if (b->swiPrev != readSwitch(b->swiNum)) {
 b->swiPrev = readSwitch(b->swiNum);
 b->bounceEnd = millis()+bounceMillis; // Set the Debounce flag
 }
 }
}
//--------------------------------------------------------
long int seconds, prevSec=0;
void loop() {
 for (int i=0; i<nSwitches; ++i)
 doButton(i);
}
added 2685 characters in body
Source Link
Loading
Source Link
Loading

AltStyle によって変換されたページ (->オリジナル) /