Implementation of the Pomodoro technique on the ESP-32 microcontroller.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

83 lines
1.9 KiB
Raw

/*
Command a four-digits seven-segments display.
Use sDisplayDigitValue[] to change the digits values.
The digits are listed from left to right.
You can use SegmentCharacter.h to get the binary code for a given character.
Example:
void setup(){
sDisplayDigitValue[0]=SC_4;
sDisplayDigitValue[1]=SC_NUMBER[1];
sDisplayDigitValue[2]=SC_EQUAL;
sDisplayDigitValue[3]=SC_A;
}
void loop(){
powerSegmentDisplay();
delay(20);
}
*/
#include "SegmentDisplay.h"
const int pinSDisplayShiftRegisterSER=23;
const int pinSDisplayShiftRegisterRCLK=22;
const int pinSDisplayShiftRegisterSRCLK=5;
const byte pinSDisplayDigit[4]={17,18,19,21};
byte sDisplayDigitValue[]={0,0,0,0};
void setupSegmentDisplay(){
pinMode(pinSDisplayShiftRegisterSER,OUTPUT);
pinMode(pinSDisplayShiftRegisterRCLK,OUTPUT);
pinMode(pinSDisplayShiftRegisterSRCLK,OUTPUT);
for(int i=0;i<sizeof(pinSDisplayDigit);i++){
pinMode(pinSDisplayDigit[i],OUTPUT);
digitalWrite(pinSDisplayDigit[i],LOW);
}
}
void powerSegmentDisplay(){
for (int x=0; x<4; x++){
for (int j=0; j<4; j++){
digitalWrite(pinSDisplayDigit[j],LOW);
}
digitalWrite(pinSDisplayShiftRegisterRCLK,LOW);
shiftOut(pinSDisplayShiftRegisterSER,pinSDisplayShiftRegisterSRCLK,MSBFIRST,sDisplayDigitValue[x]);
digitalWrite(pinSDisplayShiftRegisterRCLK,HIGH);
digitalWrite(pinSDisplayDigit[x],HIGH);
delay(1);
}
for (int j=0; j<4; j++){
digitalWrite(pinSDisplayDigit[j],LOW);
}
}
/**
* Set a number to be display using all the available digits.
* First digit is E if the number is > 9999 or <-999.
*/
void setNumberToDisplay(int number){
if(number<0){
sDisplayDigitValue[0]=SC_MINUS;
if(number<-999){
sDisplayDigitValue[0]=SC_E;
}
number=number*-1;
}else{
sDisplayDigitValue[0]=SC_NUMBER[number/1000];
}
int n=number%1000;
sDisplayDigitValue[1]=SC_NUMBER[n/100];
n=n%100;
sDisplayDigitValue[2]=SC_NUMBER[n/10];
n=n%10;
sDisplayDigitValue[3]=SC_NUMBER[n];
if(number>9999){
sDisplayDigitValue[0]=SC_E;
}
}