Heißer Draht Code mit Stoppuhr (8-Stellige 7-Segmentanzeige mit serieller Ansteuerung (MAX7219), Arduino komp.) und Summer.
// code by: Hugo T.
#include "LedControl.h"
LedControl lc = LedControl(12, 11, 10,1 );
const int buttonPin = 2; // Start, Stopp, Reset PIN
const int failurePin = 4; // Fehler PIN
const int beeepPin = 13; // Summer Pin (je nach Summer über einen Transitor)
void setup() {
lc.shutdown(0, false);
lc.clearDisplay(0);
lc.setIntensity(0, 15);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
pinMode(failurePin, INPUT);
pinMode(beeepPin, OUTPUT);
}
void printDashes() {
lc.setChar(0, 0, '-', false);
lc.setChar(0, 1, '-', false);
lc.setChar(0, 2, '-', false);
lc.setChar(0, 3, '-', false);
lc.setChar(0, 4, '-', false);
lc.setChar(0, 5, '-', false);
lc.setChar(0, 6, '-', false);
lc.setChar(0, 7, '-', false);
}
void blink(int times)
{
for (int i = 0; i < times; i++) {
lc.setScanLimit(0, 7);
lc.clearDisplay(0);
printDashes();
delay(150);
lc.clearDisplay(0);
lc.setScanLimit(0, 0);
delay(150);
}
}
void countdown(int counter)
{
while (counter >= 0)
{
int maxDigit = 0;
int n = counter;
for (int i = 0; i < 8; i++) {
int digit = n % 10;
n = n / 10;
lc.setDigit(0, i, digit, false);
if (digit)
{
maxDigit = i;
}
}
lc.setScanLimit(0, maxDigit);
delay(500);
lc.clearDisplay(0);
delay(100);
counter--;
}
}
void displayNumbers(int counter, int seconds, int minutes)
{
int maxDigit = 0;
showTime(counter, 0);
showTime(seconds, 3);
showTime(minutes, 6);
lc.setChar(0, 2, '-', false);
lc.setChar(0, 5, '-', false);
}
void showTime(int value, int positionStart) {
int maxDigit = 0;
int n = value;
int positionEnd = positionStart+2;
for (int i = positionStart; i < positionEnd; i++) {
int digit = n % 10;
n = n / 10;
lc.setDigit(0, i, digit, false);
if (digit)
{
maxDigit = i;
}
}
}
int counter = 0;
int seconds = 0;
int minutes = 0;
int didStart = 0;
int startButtonState = 0;
int failureButtonState = 0;
void loop() {
if (counter > 100) {
counter = 0;
seconds++;
}
if (seconds > 60) {
seconds = 0;
minutes++;
}
displayNumbers(counter, seconds, minutes);
startButtonState = digitalRead(buttonPin);
failureButtonState = digitalRead(failurePin);
if (didStart == 1 | startButtonState == 1)
{
if (didStart == 0) {
digitalWrite(beeepPin, HIGH);
}
if (seconds > 1) {
digitalWrite(beeepPin, LOW);
}
didStart = 1;
if (seconds > 1 & startButtonState == 1)
{
digitalWrite(beeepPin, HIGH);
delay(1500);
digitalWrite(beeepPin, LOW);
do
{
startButtonState = digitalRead(buttonPin);
} while (startButtonState == 0 );
counter = 0;
seconds = 0;
minutes = 0;
displayNumbers(counter, seconds, minutes);
didStart = 0;
delay(200);
}
if(failureButtonState == 1){
counter = 0;
seconds = 0;
minutes = 0;
displayNumbers(counter, seconds, minutes);
didStart = 0;
digitalWrite(beeepPin, HIGH);
delay(3000);
digitalWrite(beeepPin, LOW);
}
if (didStart != 0) {
delay(10);
lc.clearDisplay(0);
counter++;
}
}
//lc.clearDisplay(0);
}