/*
  blinkSample.ino - Example file to demonstrate TM74HC595LedTube class blink related methods
  Created by Gabriel D. Goldman, May, 2023.
  Updated by Gabriel D. Goldman, October, 2023.
  Released into the public domain in accordance with "GPL-3.0-or-later" license terms.

    WOKWI simulation available at: https://wokwi.com/projects/414743484710761473
*/
#include <Arduino.h>
#include <FourBitLedDigitalTube.h>

// Pin connection for Display
// Pin connected to DS of 74HC595 AKA DIO
const uint8_t dsp1Dio {A3}; // Pin A3 of Arduino Nano
// Pin connected to ST_CP of 74HC595 AKA RCLK
const uint8_t dsp1Rclk {A4}; // Pin A4 of Arduino Nano
// Pin connected to SH_CP of 74HC595 AKA SCLK
const uint8_t dsp1Sclk {A5}; // Pin A5 of Arduino Nano

//Set of variables and constants needed just for Demo purposes

bool testResultOne{};
const long testTime{4000};

// Display instances creation
// Creating an instances of the display, the only parameters needed are
// the pins that will be connected to the display module usually marked as:
// SCLK
// RCLK
// DIO
TM74HC595LedTube myLedDispOne(dsp1Sclk, dsp1Rclk, dsp1Dio);

void setup()
{

}

void loop()
{
  
  //Start the mechanism to keep the display refreshed
  myLedDispOne.begin();

  //print() with a string argument, all characters included in the representable characters list
  //No blinkig
  testResultOne = myLedDispOne.print("Strt");
  delay(2000);  
  testResultOne = myLedDispOne.print("teSt");
  delay(2000);

  //Start blinking, symmetric blink with the default rate (500 ms.)
  testResultOne = myLedDispOne.blink();
  delay(3000);

  //Speed up the symmetric blinking to 350ms.
  testResultOne = myLedDispOne.print("FStr");
  testResultOne = myLedDispOne.setBlinkRate(350);
  delay(3000);
  
  //Speed up the symmetric blinking to 200ms.
  testResultOne = myLedDispOne.setBlinkRate(200);
  delay(3000);
  
  //Speed up the symmetric blinking to 100ms.
  testResultOne = myLedDispOne.setBlinkRate(100);
  delay(3000);

  //Stop blinking
  testResultOne = myLedDispOne.noBlink();
  testResultOne = myLedDispOne.print("See");
  delay(3000);
  
  //Start blinking assymetrically, 400ms. on, 600ms. off
  testResultOne = myLedDispOne.blink(400, 600);
  testResultOne = myLedDispOne.print("ASSY");
  delay(3000);
  
  //Modify blinking assymetrically speed to  300ms. on, 700ms. off
  testResultOne = myLedDispOne.setBlinkRate(300, 700);
  delay(3000);
  
  //Modify blinking assymetrically speed to  200ms. on, 800ms. off
  testResultOne = myLedDispOne.setBlinkRate(200, 800);
  delay(3000);
  
  //Modify blinking assymetrically speed to  100ms. on, 900ms. off
  testResultOne = myLedDispOne.setBlinkRate(100, 900);
  delay(3000);

  //Stop blinking
  testResultOne = myLedDispOne.noBlink();
  testResultOne = myLedDispOne.print("StOP");
  delay(3000);


  //gauge() with a floating point argument, 0 <= value <= 1.0, representing a percentage, the four ranges are:
  // 0 <= 1st range <0.25
  //0.25 <= 2nd range < 0.50
  //0.50 <= 3rd range < 0.75
  //0.75 <= 4rd range <= 1.0
  //A character to show ahead of the value is an option, 
  //if not specified will be a blank space, in this case 'b', or any other representable char, for example:
  //b for battery, F for fuel, t for temperature, r for remaining...
  testResultOne = myLedDispOne.gauge(1.0, 'b');
  delay(3000);
  
  //Start blinking assymetrically, 600ms. on, 400ms. off
  testResultOne = myLedDispOne.blink(600, 400);
  testResultOne = myLedDispOne.gauge(0.74, 'b');
  delay(3000);
  
  //Modify blinking assymetrically speed to  700ms. on, 300ms. off
  testResultOne = myLedDispOne.setBlinkRate(700, 300);
  testResultOne = myLedDispOne.gauge(0.49, 'b');
  delay(3000);
  
  //Modify blinking assymetrically speed to  800ms. on, 200ms. off
  testResultOne = myLedDispOne.setBlinkRate(800, 200);
  testResultOne = myLedDispOne.gauge(0.24, 'b');
  delay(3000);
  
  //Modify blinking assymetrically speed to  900ms. on, 100ms. off
  testResultOne = myLedDispOne.setBlinkRate(900, 100);
  testResultOne = myLedDispOne.gauge(0.0, 'b');
  delay(3000);

  //Ending the test
  //Stop blinking
  testResultOne = myLedDispOne.noBlink();
  testResultOne = myLedDispOne.print("bYe");
  
  //Setting the blink rate to the symmetric original value
  testResultOne = myLedDispOne.setBlinkRate(500);
  delay(3000);


}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
sevseg1:A
sevseg1:B
sevseg1:C
sevseg1:D
sevseg1:E
sevseg1:F
sevseg1:G
sevseg1:DP
sevseg1:DIG1
sevseg1:DIG2
sevseg1:DIG3
sevseg1:DIG4
sevseg1:COM
sevseg1:CLN
74HC595
sr1:Q1
sr1:Q2
sr1:Q3
sr1:Q4
sr1:Q5
sr1:Q6
sr1:Q7
sr1:GND
sr1:Q7S
sr1:MR
sr1:SHCP
sr1:STCP
sr1:OE
sr1:DS
sr1:Q0
sr1:VCC
74HC595
sr2:Q1
sr2:Q2
sr2:Q3
sr2:Q4
sr2:Q5
sr2:Q6
sr2:Q7
sr2:GND
sr2:Q7S
sr2:MR
sr2:SHCP
sr2:STCP
sr2:OE
sr2:DS
sr2:Q0
sr2:VCC
vcc2:VCC
gnd3:GND
gnd4:GND
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2
r6:1
r6:2
r7:1
r7:2
r8:1
r8:2