/*
Zen Hosoi
Jochen Oliver Ulrich Schuetz
ENGR106
3 October 2023
*/
#include "SevSeg.h"
SevSeg sevseg;//Instantiate a seven segment controller object
const uint8_t button = 13;
#define LED_1 1
int LED_A[] = {15,16,17,18};
int long_time = 1000;
int short_time = 200;
void setup() {
// put your setup code here, to run once:
pinMode(button, INPUT_PULLUP);
for (int ii =0;ii<4;ii++)
{
pinMode(LED_A[ii], OUTPUT);
}
//sevseg↓
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5};
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_ANODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90);
}
float x = 0; //ボタンを押した回数;
int intx;
int xx = 0;
int i; //あまり
int Seconds;
void loop()
{
if(digitalRead(button) == LOW){
xx ++;
}
if(xx > 0){
x ++;
xx = 0;
}
else{
/*
intx = (int)x;
if(x/2 - intx > 0)
*/
intx = (int)x;
if(x/2 - intx == 0){
//////////////////////////////////////////////////////////
for (byte counter =0;counter<=15; counter++)
{
count(counter);
sevseg.setNumber(Seconds);
sevseg.refreshDisplay();
}
}
///////////////////////////////////////////////////////Reference: [2]
else{
digitalWrite(15, LOW);
digitalWrite(16, LOW);
digitalWrite(17, LOW);
digitalWrite(18, LOW);
morse(1);
x = 0;
}
}
}
/////////////////////////////////////////////////////////////
void displayBinary(byte numToShow)
{
for (int ii =0;ii<4;ii++)
{
if (bitRead(numToShow, ii)==1)
{
digitalWrite(LED_A[ii], HIGH);
}
else
{
digitalWrite(LED_A[ii], LOW);
}
}
}
///////////////////////////////////////////////////////////////Reference: [2]
void morse(int LED_number){
digitalWrite(LED_number, HIGH);
delay(long_time);
digitalWrite(LED_number, LOW);
delay(short_time);
digitalWrite(LED_number, HIGH);
delay(long_time);
digitalWrite(LED_number, LOW);
delay(short_time);
digitalWrite(LED_number, HIGH);
delay(short_time);
digitalWrite(LED_number, LOW);
delay(short_time);
digitalWrite(LED_number, HIGH);
delay(short_time);
digitalWrite(LED_number, LOW);
delay(short_time);
//[Z]--・・
digitalWrite(LED_number, LOW);
delay(long_time);
//[ ]
digitalWrite(LED_number, HIGH);
delay(short_time);
//[e]・
digitalWrite(LED_number, LOW);
delay(long_time);
//[ ]
digitalWrite(LED_number, HIGH);
delay(long_time);
digitalWrite(LED_number, LOW);
delay(short_time);
digitalWrite(LED_number, HIGH);
delay(short_time);
//[n]-・
digitalWrite(LED_number, LOW);
delay(long_time);
//[ ]
}
/*int Seconds;
float fSec;
float c;
int l;
float iF;
int t;*/
void count(byte numToShow){
static unsigned long timer = millis();
/*int m;
int n;*/
if(millis() - timer >= 1000){
timer += 1000;
Seconds++;
/* c = Seconds;
while(l < 4){
fSec = c / 2;
iF = fSec - (float)c / 2;
if(iF == 0){
c = fSec;
m = 15+l;
}
else{
c = (int)fSec;
n = 15+l;
}
digitalWrite(m, LOW);
digitalWrite(n, HIGH);
l++;
}*/
for (int ii =0;ii<4;ii++)
{
if (bitRead((byte)Seconds, ii)==1)
{
digitalWrite(LED_A[ii], HIGH);
}
else
{
digitalWrite(LED_A[ii], LOW);
}
}
if(Seconds > 15){
Seconds = 0;
}
sevseg.setNumber(Seconds);
}
/*void bitimer(){
static unsigned long timer = millis();
static int Seconds = 0;
if(millis() - timer >= 1000){
timer += 1000;
Seconds++;
if(Seconds == 17){
Seconds = 1;
}
sevseg.setNumber(Seconds);
}
sevseg.refreshDisplay();*/
}
/*
void morse_zen(int LED_number) {
digitalWrite(LED_number, HIGH);
delay(long_time);
digitalWrite(LED_number, LOW);
delay(short_time);
digitalWrite(LED_number, HIGH);
delay(long_time);
digitalWrite(LED_number, LOW);
delay(short_time);
digitalWrite(LED_number, HIGH);
delay(short_time);
digitalWrite(LED_number, LOW);
delay(short_time);
digitalWrite(LED_number, HIGH);
delay(short_time);
digitalWrite(LED_number, LOW);
delay(short_time);
//[Z]--・・
digitalWrite(LED_number, LOW);
delay(long_time);
//[ ]
digitalWrite(LED_number, HIGH);
delay(short_time);
//[e]・
digitalWrite(LED_number, LOW);
delay(long_time);
//[ ]
digitalWrite(LED_number, HIGH);
delay(long_time);
digitalWrite(LED_number, LOW);
delay(short_time);
digitalWrite(LED_number, HIGH);
delay(short_time);
//[n]-・
digitalWrite(LED_number, LOW);
delay(long_time);
//[ ]
}
void loop() {
static unsigned long timer = millis();
static int Seconds = 0;
int countStart = 0;
int countStop = 0;
while(digitalRead(button) == LOW){
countStart ++;
}
if(countStart > 0, countStop < 1){
if(millis() - timer >= 1000){
timer += 1000;
Seconds++;
if(Seconds == 17){
Seconds = 1;
}
sevseg.setNumber(Seconds);
countStart = 0;
}
sevseg.refreshDisplay();
}
while(digitalRead(button) == LOW){
countStop ++;
}
if(countStop > 0, countStart < 1){
morse_zen(1);
countStop = 0;
}
}
//偶数か奇数か判別するための式
void eoDetector(){
int u = 3;
int cont;
}
/*
/*
メモ
// Online C compiler to run C program online
#include <stdio.h>
int Seconds =12;
float fSec;
int c;
int l;
int m;
int n;
float iF;
int main() {
c = (int)Seconds;
for(l = 0; l < 4; ++l){
fSec = c / 2;
iF = fSec - (float)c / 2;
if(iF == 0){
c = fSec;
m = 15 + l;
printf("0\n");
printf("l:%d ", l);
printf("m:%d ", m);
}
else{
c = (int)fSec;
n = 15 + l;
printf("1\n");
printf("l:%d ", l);
printf("n:%d ", n);
}
}
return 0;
}
*/
/* if(fSec - c == 0){
Seconds2 /= 2;
printf("0");
}
else{
Seconds2 /= 2;
printf("1");
return 0;
}
*/