INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Zähler
11.10.2015, 17:08
Beitrag #9
RE: Zähler
(11.10.2015 17:01)HaWe schrieb:  mein lieber Uwe... Wink

WTF ist Bilder()? das hast du nirgends geschrieben
Du schriebst aber nur von Zähler formatieren - woher zum Teufel soll ich wissen was Bilder() ist ??

Was spricht im übrigen dagegen, Bilder() (was immer das sein mag) weiterhin so auszugen, wie du es bisher getan hast, und dann den formatierten Zähler wie beschrieben?

Aber sei doch mal so nett und erkläre, was das mit den ominösen Bilder() 's auf sich hat!
OK,
sorry ja vielleicht war das etwas zu sehr in Raum reingeworfen.
Ich habe eben einen Intervall Sketch gemacht dort gebe ich die Intervall dauer in S ein als float und die aufnahme Dauer in Minuten ein, daraus werden dann die Benötigten Bilder berechnet und diese ausgerechneten Bilder soll er mir dann während der Aufnahme herunter zählen.
das herunterzählen klappt zwar aber eben immer wenn er z.b. von 1000Bilder auf 999Bilder springt wird aus der 1 keine 0. ich möchte "0999 von 1500" Bilder anzeigen, er zeigt mir aber immer "999 von 1500" an.
Komisch ist aber habe ich z.b nur 150Bilder zeigt er zu beginn "0150 von 0150" dann aber "099 von 150" und nicht 0099.
Hoffe jetzt ist es etwas verständlicher.
Tschuldigung wenn es anfangs etwas verwirrend war. War glaub seehr spät haute nacht bzw sehr früh heute morgen als ich das Geschrieben hatte.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2015, 17:10
Beitrag #10
RE: Zähler
also BITTE:

HER MIT DEM KOMPLETTEN SKETCH!!!


BIIITTTEEE !!!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2015, 17:14
Beitrag #11
RE: Zähler
(11.10.2015 17:10)HaWe schrieb:  also BITTE:

HER MIT DEM KOMPLETTEN SKETCH!!!


BIIITTTEEE !!!

OK hier bitte,
dort wo eben diese Zählfunktion ist habe ich einiges als Kommentar gemacht zum ausblenden und testen das ich net immer alles neu schreiben muss

Code:
#include <Arduino.h>
#include <LiquidCrystal.h>
#include <sainsmartkeypad.h>
SainsmartKeypad keypad(0);
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // Auswahl der LCD Kontakte
uint8_t key;
byte Menu = 1;
float Intervall = 1;  // Zähler intervall
float wertI = .5;     // Wert für Intervall
int Dauer = 10;       // Zähler Dauer
int wertD = 5;        // Wert für Dauer
int Motor = 0;
int wertL = 11;       // LED Gelb Motor Richtung L
int wertR = 3;        // LED Gelb Motor Richtung R
int ledA = 12 ;       // LED Rot Auslöser
int ledF = 13;        // LED Grün Fertig mit Summer
int led4 = 10;        // Display Dimmen
int sbuf = (60/Intervall*Dauer);
int i = 0 ;
void setup() {

  analogWrite(led4, 125);
  pinMode(ledA, OUTPUT);
  pinMode(ledF, OUTPUT);
  pinMode(wertL, OUTPUT);
  pinMode(wertR, OUTPUT);

  byte downpfeil[8] = {B00000, B10001, B11011, B01010, B01110, B00100, B00100, B00000};
  lcd.createChar (1, downpfeil); // Erstellt ein nach unten gerichtetes Pfeildreieck
  digitalWrite (wertL, HIGH);
  digitalWrite (wertR, HIGH);
  digitalWrite (ledA, HIGH);
  digitalWrite (ledF, HIGH);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0); // Cursor position 1. Zeile, 1. Feld
  lcd.print("Slidersteuerung");
  lcd.setCursor(4, 1); // Cursor position 2. Zeile, 3. Feld
  lcd.print("Uwe1475");
  delay (1000);
  digitalWrite (wertL, LOW);
  digitalWrite (wertR, LOW);
  digitalWrite (ledA, LOW);
  digitalWrite (ledF, LOW);
  delay (1000);
  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("Einstellungen");
  lcd.setCursor(3, 1);
  lcd.write(1); // zeigt das erstellte Pfeildreieck an
  lcd.print(" press ");
  lcd.write(1); // zeigt das erstellte Pfeildreieck an
}
void loop() {
char sbuf[20];
  int Bilder = (60 / Intervall * Dauer) ;            // Bilder menge ausrechnen
  float Vorschub = (698 / (60 / Intervall * Dauer)); // Slider Dauer berechnen, Sliderlänge 700mm - 20mm Toleranz

  key = keypad.getKey_fastscroll(); // Anzeige wird nur nach einer Tastenbetätigung aktualisiert
  if (key != SAMPLE_WAIT) {
    switch (key)
    {
      case UP_KEY:
        Menu--;
        if (Menu < 2) Menu = 2;
        lcd.clear();
        break;
      case DOWN_KEY:
        Menu++;
        if (Menu > 5) Menu = 5;
        lcd.clear();
        break;
    }
    switch (Menu) {
      case 1:
        lcd.setCursor(1, 0);
        lcd.print("Einstellungen");
        lcd.setCursor(3, 1);
        lcd.write(1); // zeigt das erstellte Pfeildreieck an
        lcd.print(" press ");
        lcd.write(1);
        break;
      case 2:
        lcd.setCursor(4, 0);
        lcd.print("Dauer");
        lcd.setCursor(10, 1);
        lcd.print("Min");

        if (key == LEFT_KEY) {
          Dauer = Dauer - wertD;
        }
        if (key == RIGHT_KEY) {
          Dauer = Dauer + wertD;
        }
        if (Dauer < 10) { // Dauer kann nicht unter 10 eingestellt werden
          Dauer = 10;
        }
        else {
          lcd.setCursor(7, 1);
          lcd.print(Dauer);
        }
        if (Dauer > 95) {
          lcd.setCursor (6, 1);
          lcd.print (Dauer);
          lcd.setCursor(9, 1);
          lcd.print(" ");
        }
        if (Dauer < 100) {
          lcd.setCursor (6, 1);
          lcd.print(" ");
        }
        break;
      case 3:
        lcd.setCursor(1, 0);
        lcd.print("Intervallzeit");
        lcd.setCursor(10 , 1);
        lcd.print("s");

        if (key == LEFT_KEY) {
          Intervall = Intervall - wertI;
        }
        if (key == RIGHT_KEY) {
          Intervall = Intervall + wertI;
        }
        if (Intervall < 1) { // Intervall kann nicht unter 1s eingestellt werden
          Intervall = 1;
        }
        else {
          lcd.setCursor(6, 1);
          lcd.print(Intervall , 1);
        }
        if (Intervall > 9.5) {
          lcd.setCursor (5, 1);
          lcd.print (Intervall , 1);
          lcd.setCursor(9, 1);
          lcd.print(" ");
        }
        if (Intervall < 10) {
          lcd.setCursor (5, 1);
          lcd.print(" ");
        }
        break;

      case 4:                   //Slider Richtung festlegen
        lcd.setCursor(0, 0);
        lcd.print("Slider Richtung");
        
        if (key == LEFT_KEY) {
          Motor = wertL;
          lcd.setCursor(4, 1);
          lcd.print("<<<L<<<");
        }
        if (key == RIGHT_KEY) {
          Motor = wertR;
          lcd.setCursor(4, 1);
          lcd.print(">>>R>>>");
        }
        break;

      case 5:                   // Von den gewählten Einstellungen wird der Vorschub und die Anzahl der Bilder berechnet
        lcd.setCursor(0, 0);
        lcd.print("H: ");
        lcd.print(Vorschub , 3);
        lcd.setCursor(9, 0);
        lcd.print("C: ");
        lcd.print(Bilder / 30);
        lcd.setCursor(0, 1);
        lcd.print("Bilder: ");
        if (Bilder < 1000) lcd.print("0");
        if (Bilder <  100) lcd.print("0");
        if (Bilder <   10) lcd.print("0");
        lcd.print(Bilder);                  // Anzahl der Bilder
        break;

    }
    if (key == SELECT_KEY) {
      for (i = 0; i < 15 ; i++) { // Test-Schleife
        //for (i = 0; i < Bilder ; i++){ // Intervall-Schleife
        analogWrite(led4, 25);
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Clip: ");
        lcd.print(Bilder / 30);
        lcd.setCursor(0, 1);
        
        if (Bilder < 1000) lcd.print("T");
        if (Bilder <  100) lcd.print("H");
        if (Bilder <   10) lcd.print("Z");
        
        sprintf(sbuf, "%04d", Bilder);
        //lcd.print(sbuf - i + 1);
        lcd.print((Bilder) - (i + 1));      // Restbilder von
        lcd.print(" von ");
        if (Bilder < 1000) lcd.print("t");
        if (Bilder <  100) lcd.print("h");
        if (Bilder <   10) lcd.print("z");
        lcd.print(Bilder);                  // Gesamtbilder

        digitalWrite(ledA, HIGH);           // schaltet Kamera ein
        delay(125);                         // Laufzeit der Kamera
        digitalWrite(ledA, LOW);            // schaltet Kamera aus
        delay(500);                         // Verschluss pause
        analogWrite(Motor, 225);            // schaltet Motor ein
        delay(500);                         // Laufzeit des Motors
        analogWrite(Motor, 0);              // schaltet Motor aus
        delay(1000);                        // Intervall - Motorlaufzeit
      }
      analogWrite(led4, 125);
      digitalWrite(ledF, HIGH);     // END LED und SUMMER AN
      lcd.clear();                  // Sind alle Intervalle abgearbeitet wird Anzeige gelöscht
      lcd.setCursor(1, 0);          // und Programm Ende anzeigen
      lcd.print("Programm Ende");
      lcd.setCursor(4, 1);
      lcd.print("Uwe1475");
      delay(1000);
      digitalWrite(ledF, LOW);
      delay(1000);
      digitalWrite(ledF, HIGH);
      delay(1000);
      digitalWrite(ledF, LOW);
      delay(1000);
      digitalWrite(ledF, HIGH);
      delay(2000);
      digitalWrite(ledF, LOW);  // END LED und SUMMER AUS
      lcd.clear();              // dann wird wieder die Zeitdauer und Intervallzeit angezeigt
    }
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2015, 17:25 (Dieser Beitrag wurde zuletzt bearbeitet: 11.10.2015 17:27 von HaWe.)
Beitrag #12
RE: Zähler
aha, also Bilder ist eine int Zahl.
ich weiß jetzt ntl nicht, ob dein Programm richtig funzt und rechnet, aber ihr Wert wird mit sprintf wie beschrieben völlig richtig formatiert ausgegeben.
Code:
char sbuf[20];
int Bilder = (60 / Intervall * Dauer) ;            // Bilder menge ausrechnen
sprintf(sbuf, "%04d", Bilder);
allerdings hast du deine ganzen alten lcd.print Dinger noch drin, und ich sehe jedenfalls nirgends ein
Code:
lcd.print(sbuf);
um diesen String auch wirklich auszugeben (ok, vlt auch übersehen)

wenn du eine Gesamtzahl an Bildern hast und einen Zähler, dann würde der Befehl für die gesamt Zeile lauten:
Code:
int ges, Bilder;
sprintf(sbuf, "%04d von %04d Bildern", Bilder, ges);
lcd.print(sbuf);

den ganzen alten lcd.print Kram kannst du dann in die Tonne kloppen.

klar jetzt?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.10.2015, 17:32
Beitrag #13
RE: Zähler
(11.10.2015 17:25)HaWe schrieb:  aha, also Bilder ist eine int Zahl.
ich weiß jetzt ntl nicht, ob dein Programm richtig funzt und rechnet, aber ihr Wert wird mit sprintf wie beschrieben völlig richtig formatiert ausgegeben.
Code:
char sbuf[20];
int Bilder = (60 / Intervall * Dauer) ;            // Bilder menge ausrechnen
sprintf(sbuf, "%04d", Bilder);
allerdings hast du deine ganzen alten lcd.print Dinger noch drin, ich sehe jedenfalls nirgends ein
Code:
lcd.print(sbuf);


wenn du eine Gesamtzahl an Bildern hast und einen Zähler, dann würde der Befehl für die gesamt Zeile lauten:
Code:
int ges, Bilder;
sprintf(sbuf, "%04d von %04d Bildern", Bilder, ges);
lcd.print(sbuf);

den ganzen alten lcd.print Kram kannst du dann in die Tonne kloppen.

klar jetzt?
Ja das "lcd.print(sbuf) ; hab ich mal als Kommentar gemacht weil ich was getestet hab.
Hab jetzt aber PC ausgemacht werde deine Zeilen bei Gelegenheit testen und berichten.
Und wie sieht dann die Zeile vom Zähler aus?
Hab ja" (bilder) - (i + 1);" wenn ich das durch sbuf ersetze kommen immer komische Zeichen raus,zumindest mit dem alten Code.
Wie gesagt ich teste es bei Gelegenheit
Danke für deine Hilfe.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.10.2015, 22:46
Beitrag #14
RE: Zähler
(11.10.2015 17:25)HaWe schrieb:  aha, also Bilder ist eine int Zahl.
ich weiß jetzt ntl nicht, ob dein Programm richtig funzt und rechnet, aber ihr Wert wird mit sprintf wie beschrieben völlig richtig formatiert ausgegeben.
Code:
char sbuf[20];
int Bilder = (60 / Intervall * Dauer) ;            // Bilder menge ausrechnen
sprintf(sbuf, "%04d", Bilder);
allerdings hast du deine ganzen alten lcd.print Dinger noch drin, und ich sehe jedenfalls nirgends ein
Code:
lcd.print(sbuf);
um diesen String auch wirklich auszugeben (ok, vlt auch übersehen)

wenn du eine Gesamtzahl an Bildern hast und einen Zähler, dann würde der Befehl für die gesamt Zeile lauten:
Code:
int ges, Bilder;
sprintf(sbuf, "%04d von %04d Bildern", Bilder, ges);
lcd.print(sbuf);

den ganzen alten lcd.print Kram kannst du dann in die Tonne kloppen.

klar jetzt?
Hy,
so bin gerade am Testen...aber leider Funktioniert es immer noch nichtAngryHuhHuh
Wenn ich deinen Code bei mir einfüge, und meine alten lcd.print lösche kommt immer "0000 von 0000 Bilder".
Lösche ich das "ges" in "sprintf(sbuf, "%04d von %04d Bildern", Bilder, ges);" und das "int ges, Bilder" kommt " 0600 von 13872 Bilder" 600Bilder ist soweit korrekt. Aber eben nicht diese 13872...und keine der zahlen wird Herunter gezählt, ich bekomme es nur hin das dahinter Hochgezählt wird, was ich aber nicht möchte.
Lösche ich das "int ges, Bilder" nicht kommt komischerweise " 0000 von 12336 Bilder"...?????
Ich gebs auf.....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.09.2016, 20:45
Beitrag #15
RE: Zähler
Hy,
ist zwar schon ein mega altes Thema von mir, aber da ich die Tage dieses Problem lösen konnte, so rein zufällig.
Da ich an etwas anderem ,im selben Sketch, auch im Bezug auf 'Bilder' gearbeitet habe, dadurch bin ich auf die Lösung für dieses Problem gestoßen Big Grin
Und zwar habe ich immer ja immer den Bilder-Zähler "Formatieren" wollen der für die noch verbleibenden Bilder zuständig ist konnte es ja rein mit den 'int Bilder' nicht gehen.
So war der Sketch zu anfang:
Code:
lcd.setCursor(0, 0);
        lcd.print("Clip: ");
        lcd.print(Bilder / 30);
        lcd.setCursor(0, 1);
        
        if (Bilder < 1000) lcd.print("T");
        if (Bilder <  100) lcd.print("H");
        if (Bilder <   10) lcd.print("Z");
        
        sprintf(sbuf, "%04d", Bilder);
        //lcd.print(sbuf - i + 1);
        lcd.print((Bilder) - (i + 1));      // Restbilder von
        lcd.print(" von ");
        if (Bilder < 1000) lcd.print("t");
        if (Bilder <  100) lcd.print("h");
        if (Bilder <   10) lcd.print("z");
        lcd.print(Bilder);                  // Gesamtbilder
Also die Bilder mit T H Z waren ja die, die der Arduino runtergezählt hat somit konnte sich ja rein mit 'Bilder' nichts ändern weil 'Bilder' war ja ein "fester" wehrt.

Jetzt sieht das ganze so aus:
Code:
lcd.setCursor(0, 0);
        lcd.print("Noch ");
        if ((Bilder) - (i + 1) < 1000) lcd.print("0");
        if ((Bilder) - (i + 1) <  100) lcd.print("0");
        if ((Bilder) - (i + 1) <   10) lcd.print("0");
        lcd.print((Bilder) - (i + 1));      // Restbilder von
        lcd.print(" Bilder");
        lcd.setCursor (1, 1);
        lcd.print("von ");
        if (Bilder < 1000) lcd.print("0");
        if (Bilder <  100) lcd.print("0");
        if (Bilder <   10) lcd.print("0");
        lcd.print(Bilder);                  // Gesamtbilder
        lcd.print(" Bilder");
und jetzt Funktioniert das ganze wunderbar Big GrinBig GrinBig Grin

Für den Fall das jemanden das noch interessiert oder ein ähnliches Problem hat.

MfG
Uwe
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  "Nichtlineare" Zähler Turbo-S 13 680 20.07.2016 19:38
Letzter Beitrag: Turbo-S
  Hardware Zähler MasT3r-A 4 528 24.01.2016 21:33
Letzter Beitrag: ardu_arne
  Array mit Zähler steuern ferdi 20 1.607 19.11.2015 15:11
Letzter Beitrag: ardu_arne
  BCD Zähler 0-9999 peterunterhofer 6 1.350 06.03.2015 12:49
Letzter Beitrag: Foto-Ralf
  Zähler in verschiedenen Modi betreiben Nimes 2 663 25.09.2014 10:19
Letzter Beitrag: Nimes
Bug Zähler von 0 - 1023 mit Rotary Encoder....Wie??? Wampo 1 1.497 15.12.2013 13:48
Letzter Beitrag: Wampo

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste