/* Charliplexing 6 LEDs
--------------------------------------------------------------------------------
Row 1 (R1): Arduino Pin 13
Row 2 (R2): Arduino Pin 12
Row 3 (R3): Arduino Pin 11
--------------------------------------------------------------------------------
variable pinMode state
L OUTPUT LOW
H OUTPUT HIGH
Z INPUT LOW
---------------------------------------------------------------------------------
R1 (Pin 13) R2 (Pin 12) R3 (Pin 11)
L1 L H Z
L2 H L Z
L3 Z L H
L4 Z H L
L5 L Z H
L6 H Z L
-----------------------------------------------------------------------------------
LED Cathode Anode
1 R2 R1
2 R1 R2
3 R3 R2
4 R2 R3
5 R3 R1
6 R1 R3
---------------------------------------------------------------------------------
*/
long lastTime = 0;
long minutes = 0;
long setminutes = 3;
const int LED_1 = 13; //LED row 1
const int LED_2 = 12; //LED row 2
const int LED_3 = 11; //LED row 3
const int SHORT_PRESS_TIME = 1000; // 1000 milliseconds
const int LONG_PRESS_TIME = 3000; // 1000 milliseconds
const int BUTTON_PIN =4; //Ptn2 connecte to Button
const int LED_PIN= 6; //Pin3 connected to a LED
//int currentButtonState = 0;//HIGH / LOW
//int previousButtonState = 0;//HIGH / LOW
int setMode = 30;
int lastState = LOW; // the previous state from the input pin
int currentState; // the current reading from the input pin
unsigned long pressedTime = 0;
unsigned long releasedTime = 0;
bool isPressing = false;
bool isLongDetected = false;
void setup() {
// run once
pinMode (BUTTON_PIN,INPUT);
pinMode (LED_PIN,OUTPUT);
digitalWrite(LED_PIN, HIGH);
Serial.begin(9600);
}
void loop() {
currentState = digitalRead(BUTTON_PIN);
delay(30);
if(lastState == HIGH && currentState == LOW) { // button is pressed
pressedTime = millis();
isPressing = true;
isLongDetected = false;
} else if(lastState == LOW && currentState == HIGH) { // button is released
isPressing = false;
releasedTime = millis();
long pressDuration = releasedTime - pressedTime;
if( pressDuration > 50 && pressDuration < SHORT_PRESS_TIME )
Serial.println("A short press is detected");
}
if(isPressing == true && isLongDetected == false) {
long pressDuration = millis() - pressedTime;
if( pressDuration > LONG_PRESS_TIME ) {
Serial.println("A long press is detected");
isLongDetected = true;
}
}
/*currentButtonState=digitalRead(BUTTON_PIN);
delay (50);
if(currentButtonState != previousButtonState)
{
if(currentButtonState ==HIGH)
{
setMode = setMode+ 30;
if (setMode>180)
{
setMode=30;
}
}
}
Serial.print("Number of button pushes: ");
Serial.println(setMode);
if(millis()-lastTime>300) //make this 60000 for one minute counting
{
minutes++;
lastTime=millis();
}
if(minutes==setMode)
{
digitalWrite(LED_PIN, LOW);
}
Serial.println(minutes);
//Serial.println(millis());
*/
if(setMode ==30)
{
//turn on LED L1
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
}
else if (setMode==60)
{
//turn on LED L2
pinMode(LED_3, INPUT); //row 3
digitalWrite(LED_3, LOW);
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, HIGH);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
}
else if (setMode==90)
{
//turn on LED L3
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, HIGH);
}
else if (setMode==120)
{
//turn on LED L4
pinMode(LED_1, INPUT); //row 1
digitalWrite(LED_1, LOW);
pinMode(LED_2, OUTPUT); //row 2
digitalWrite(LED_2, HIGH);
pinMode(LED_3, OUTPUT); //row 3
digitalWrite(LED_3, LOW);
}
else if (setMode==150)
{
//turn on LED L5
pinMode(LED_2, INPUT); //row 2
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT); //row3
digitalWrite(LED_3, HIGH);
pinMode(LED_1, OUTPUT); //row 1
digitalWrite(LED_1, LOW);
}
else if (setMode==180)
{
//turn on LED L6
pinMode(LED_2, INPUT);
digitalWrite(LED_2, LOW);
pinMode(LED_3, OUTPUT);
digitalWrite(LED_3, LOW);
pinMode(LED_1, OUTPUT);
digitalWrite(LED_1, HIGH);
}
lastState = currentState;
//previousButtonState = currentButtonState;
}