/*-data-type------size---------description----------------------
boolean (8 bit) - [true/false]
byte (8 bit) - [0-255] unsigned number
char (8 bit) - [-128 to 127] signed number
unsigned char (8 bit) - [-128 to 127] signed number
word (16 bit) - [0-65535] unsigned number
unsigned int (16 bit) - [0-65535] unsigned number
int (16 bit) - [-32768 to 32767] signed number
unsigned long (32 bit) - [0-4,294,967,295] unsigned number usually for millis
long (32 bit) - [-2,147,483,648 to 2,147,483,647] signed number
float (32 bit) - [-3.4028235E38 to 3.4028235E38] signed number
uint8_t (8 bit) - [0-255] unsigned number
int8_t (8 bit) - [-127 - 127] signed number
uint16_t (16 bit) - [0-65,535] unsigned number
int16_t (16 bit) - [-32,768 - 32,767] signed number
uint32_t (32 bit) - [0-4,294,967,295] unsigned number
int32_t (32 bit) - [-2,147,483,648 - 2,147,483,647] signed number
uint64_t (64 bit) - [0-18,446,744,073,709,551,615] unsigned number
int64_t (64 bit) - [−9,223,372,036,854,775,808 - 9,223,372,036,854,775,807] signed number
--------------------------------------------------------------
camelCase - anything that changes
snake_case - variable's that are exclusive in a function
Snake_Case - CLASS/struct exclusave varables/functions
iNVERTEDcAMELcASE - outside code that is being accessed [database]
SNake_CAse - duplicate varables inside the case function [frequently used in library names]
ALL_CAPS - const varable names or defines
------------- by jediRick & RefreshMyMind --------------------
*/
#define PIN_QTY (3)
unsigned long currentMillis;
const unsigned long onTime = 250;
unsigned long previousMillis = 0;
unsigned long interval = onTime;
uint8_t BUTTON_PINS[PIN_QTY] = {18, 19, 20};
volatile bool BUTTON_FLAGS[PIN_QTY] = {false, false, false};
void setup() {
Serial.begin(115200);
for (uint8_t i = 0; i < PIN_QTY; i++) {
pinMode(BUTTON_PINS[i], INPUT_PULLUP);
delay(5);
}
attachInterrupt(digitalPinToInterrupt(BUTTON_PINS[0]), buttonPinInterrupt0, RISING);
attachInterrupt(digitalPinToInterrupt(BUTTON_PINS[1]), buttonPinInterrupt1, RISING);
attachInterrupt(digitalPinToInterrupt(BUTTON_PINS[2]), buttonPinInterrupt2, RISING);
delay(5);
}
void loop() {
printValues();
}
void buttonPinInterrupt0() {
BUTTON_FLAGS[0] = true;
}
void buttonPinInterrupt1() {
BUTTON_FLAGS[1] = true;
}
void buttonPinInterrupt2() {
BUTTON_FLAGS[2] = true;
}
void printValues() {
if (BUTTON_FLAGS[0] == true) {
checkTimer();
}
if (BUTTON_FLAGS[1] == true) {
checkTimer();
}
if (BUTTON_FLAGS[2] == true) {
checkTimer();
}
}
void checkTimer() {
currentMillis = millis();
if ((unsigned long)(currentMillis - previousMillis) >= interval) {
if (BUTTON_FLAGS[0]) {
interval = onTime;
Serial.println("buttonFlag0: " + (String)BUTTON_FLAGS[0]);
}
if (BUTTON_FLAGS[1]) {
interval = onTime;
Serial.println("buttonFlag1: " + (String)BUTTON_FLAGS[1]);
}
if (BUTTON_FLAGS[2]) {
interval = onTime;
Serial.println("buttonFlag2: " + (String)BUTTON_FLAGS[2]);
}
}
BUTTON_FLAGS[0] = false;
BUTTON_FLAGS[1] = false;
BUTTON_FLAGS[2] = false;
previousMillis = currentMillis;
}