Moin,
ich habe mir mit einem Arduino bisher einen Zähler zusammengebaut, der von 00:00 bis 23:59 zählt und dann wieder von Vorne beginnt.
Ein Taster ist auch angeschlossen, allerdings haut das damit geplante Einstellen der Uhrzeit nicht so hin, wie ich mir das gedacht habe... Es mangelt mir einfach an Wissen und Erfahrung in C Programmierung.
Ich habe auch noch einen Quarz 32.768, der den Takt irgendwie vorgeben soll. Aber wie.....
Ich poste hier einfach mal den Code (der ist von wo auch immer überall zusammenkopiert)
C
- // g f a b
- // | | | | | -> pins and segments they control
- // ---------
- // | A |
- // F| |B
- // |---G---|
- // E| |C
- // | D |
- // ---------
- // | | | | | -> pins and segments they control
- // e d c dp
- // Segments that make each number when lit:
- // 0 => -FEDCBA
- // 1 => ----BC-
- // 2 => G-ED-BA
- // 3 => G--DCBA
- // 4 => GF--CB-
- // 5 => GF-DC-A
- // 6 => GFEDC-A
- // 7 => ----CBA
- // 8 => GFEDCBA
- // 9 => GF-DCBA
- // Arduino digital pins used to light up
- // corresponding segments on the LED display
- #define A 3
- #define B 2
- #define C 6
- #define D 8
- #define E 7
- #define F_SEG 4
- #define G 5
- // Pins driving common anodes
- #define CA1 13
- #define CA2 12
- #define CA3 10
- #define CA4 9
- // Pins for A B C D E F G, in sequence
- const int segs[7] = { A, B, C, D, E, F_SEG, G };
- // Segments that make each number
- const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0010010,
- 0b0000010, 0b1111000, 0b0000000, 0b0010000 };
- //BUTTON
- const int buttonPin = 11; // the number of the pushbutton pin
- // Variables will change:
- int buttonState; // the current reading from the input pin
- int lastButtonState = LOW; // the previous reading from the input pin
- // the following variables are unsigned long's because the time, measured in miliseconds,
- // will quickly become a bigger number than can be stored in an int.
- unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
- unsigned long debounceDelay = 50;
- void setup() {
- Serial.begin(9600);
- pinMode(A, OUTPUT);
- pinMode(B, OUTPUT);
- pinMode(C, OUTPUT);
- pinMode(D, OUTPUT);
- pinMode(E, OUTPUT);
- pinMode(F_SEG, OUTPUT);
- pinMode(G, OUTPUT);
- pinMode(CA1, OUTPUT);
- pinMode(CA2, OUTPUT);
- pinMode(CA3, OUTPUT);
- pinMode(CA4, OUTPUT);
- pinMode(buttonPin, INPUT);
- }
- void loop() {
- for (int digit1=0; digit1 < 10; digit1++) {
- for (int digit2=0; digit2 < 10; digit2++) {
- if (digit1 == 2 and digit2 == 5) {
- break;
- }
- for (int digit3=0; digit3 < 6; digit3++) {
- for (int digit4=0; digit4 < 10; digit4++) {
- for (int digit5=0; digit5 < 6; digit5++) { // 5 und 6 (sekunden)nur zum Test
- for (int digit6=0; digit6 < 10; digit6++) { //fuer Einstellen mit Taster
- // 5 und 6 sind nicht sichtbar, da es nur 4 Segmentanzeigen gibt
- unsigned long startTime = millis();
- for (unsigned long elapsed=0; elapsed < 1000; elapsed = millis() - startTime) {
- lightDigit1(numbers[digit1]);
- delay(1);
- lightDigit2(numbers[digit2]);
- delay(1);
- lightDigit4(numbers[digit4]);
- delay(1);
- lightDigit3(numbers[digit3]);
- delay(1);
- lightDigit5(numbers[digit5]);
- Serial.print(digit5);
- delay(1);
- lightDigit6(numbers[digit6]);
- Serial.print(digit6);
- Serial.print(" ");
- delay(1);
- int reading = digitalRead(buttonPin);
- if (reading != lastButtonState) {
- // reset debouncing timer
- lastDebounceTime = millis();
- Serial.print("mills");
- if ((millis() - lastDebounceTime) > debounceDelay) {
- if (lastButtonState == HIGH) {
- Serial.print("druck");
- lightDigit4(numbers[digit4++]);
- lastButtonState = reading;
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- void lightDigit1(byte number) {
- digitalWrite(CA1, LOW);
- digitalWrite(CA2, HIGH);
- digitalWrite(CA3, HIGH);
- digitalWrite(CA4, HIGH);
- lightSegments(number);
- }
- void lightDigit2(byte number) {
- digitalWrite(CA1, HIGH);
- digitalWrite(CA2, LOW);
- digitalWrite(CA3, HIGH);
- digitalWrite(CA4, HIGH);
- lightSegments(number);
- }
- void lightDigit3(byte number) {
- digitalWrite(CA1, HIGH);
- digitalWrite(CA2, HIGH);
- digitalWrite(CA3, LOW);
- digitalWrite(CA4, HIGH);
- lightSegments(number);
- }
- void lightDigit4(byte number) {
- digitalWrite(CA1, HIGH);
- digitalWrite(CA2, HIGH);
- digitalWrite(CA3, HIGH);
- digitalWrite(CA4, LOW);
- lightSegments(number);
- }
- //5 und 6 nur test fuer Sekunden-funktioniert aber nicht
- void lightDigit5(byte number) {
- digitalWrite(CA1, HIGH);
- digitalWrite(CA2, HIGH);
- digitalWrite(CA3, HIGH);
- digitalWrite(CA4, HIGH);
- lightSegments(number);
- }
- void lightDigit6(byte number) {
- digitalWrite(CA1, HIGH);
- digitalWrite(CA2, HIGH);
- digitalWrite(CA3, HIGH);
- digitalWrite(CA4, HIGH);
- lightSegments(number);
- }
- void lightSegments(byte number) {
- for (int i = 0; i < 7; i++) {
- int bit = bitRead(number, i);
- digitalWrite(segs[i], bit);
- }
- }
Ja ich weiß auch nicht was ich noch groß schreiben soll, ich hoffe einfach mal, hier die entscheidenen Tipps zu bekommen
Ich bedanke mich schon mal im Voraus