Show Posts
Pages: 1 [2] 3 4 ... 8
16  International / Deutsch / Re: formel gesucht (linearer Wert zwischen zwei anderen) on: August 01, 2011, 01:18:23 am
Ich habe das jetzt mit temporären floats gelöst. hier der Code, vielen Dank für Eure hilfe!
Code:
       float stepsGesamt = (tDuration*60000) / (tInterval*1000);
       float stepNow = (now - runStart) / (tInterval * 1000);
       float v = stepNow / stepsGesamt;
       v = v * v;
       float X = (tEnd * v) + (tStart * (1 - v));
       belichtungszeit = X;
17  International / Deutsch / Re: formel gesucht (linearer Wert zwischen zwei anderen) on: July 31, 2011, 10:47:15 am
Ich muss hier aber dennoch umstellen auf float's, richtig?
18  International / Deutsch / Re: formel gesucht (linearer Wert zwischen zwei anderen) on: July 31, 2011, 09:59:31 am
Ich habe hier das Projekt kurz vorgestellt, auch der aktuelle Code findet sich hier: http://www.stefankohler.de/de/film/selbstbau/camtimer/

Mein Wertebereich liegt immer im positiven Bereich bis ca. 30.000.000 (8 Stunden in ms) für now , runStart und tDuration. Die Belichtungszeiten (tStart und tEnd) liegen zwischen 5 und 600.000 (ca 10 Minuten). Die Genauigkeit ist hier nicht ausschlaggebend, ob das jetzt 3 ms mehr oder weniger sind, kann ich vernachlässigen denke ich.
19  International / Deutsch / Re: formel gesucht (linearer Wert zwischen zwei anderen) on: July 31, 2011, 04:11:22 am
Ja, die Funktion habe ich auch ausprobiert. Wenn ich allerdings da nicht-floats durchjage, gibt's lustige Zeichen auf meinem LCD.
20  International / Deutsch / Re: formel gesucht (linearer Wert zwischen zwei anderen) on: July 31, 2011, 02:58:06 am
Ich habe keine floats genommen, weil ich da immer Probleme bekomme mit der Wandlung in Strings. Ich habe ein Display dran hängen und gebe hier einen String aus. Teilweise sind das dann auch Werte aus den Berechnungen. Bei "long" geht das ohne Probleme, bei float sträubt sich das Arduino erfolgreich.
21  International / Deutsch / Re: formel gesucht (linearer Wert zwischen zwei anderen) on: July 31, 2011, 02:44:32 am
Ich werde das mal ausdünnen und posten, im Moment ist der Code noch recht konfus...

Für die Zeitangaben verwende ich "unsigned long".
22  International / Deutsch / Re: formel gesucht (linearer Wert zwischen zwei anderen) on: July 31, 2011, 02:36:02 am
Hallo Udo,

leider klappt das nicht. Gibt mir immer "0" aus. :-(

Ich komme auch ganz gut klar mit meinen Bezeichnungen, vor allem weil ich immer weiß was es ist (das geht mir mit S0 leider nicht so). Ich halte hier immer eine art Namenskonvention ein, die Variablennamen sind halt relativ lang...

@TelosNox: Da habe ich auch schon dran gedacht, das werde ich mal testen - allerdings glaube ich nicht das die lineare Rampe funktionieren kann...
23  International / Deutsch / Re: formel gesucht (linearer Wert zwischen zwei anderen) on: July 30, 2011, 12:00:35 pm
Hallo MaFu,
das funktioniert super!
Du hast nicht zufällig noch die passende Formel (mit den gleichen werten) für exponentielle Wertänderung in deinem Mathematikerkopf?

Da würde ich glatt Freibier springen lassen ;-)
24  International / Deutsch / formel gesucht (linearer Wert zwischen zwei anderen) on: July 30, 2011, 08:33:34 am
Hier meine Aufgabenstellung (ist für einen Belichtungsrechner für meine Camera):

tStart        = gewünschter Anfangswert
tEnd           = gewünschter Endwert
now          = das "Jetzt" seit starten des Programmes
runStart      = hier wurde das Programm gestartet
tDuration       = gewünschte Dauer des Programmes
Momentanwert   = ?

alle Werte sind in ms.

Beispiel:

tStart    = 1
tEnd       = 1000
now       = 5000
runStart   = 4000
tDuration    = 2000

Hier ist der Momentanwert 499,5, denn ich befinde mich in der Mitte der Zeit (now - runStart = tDuration / 2) und somit habe ich die Hälfte zwischen tEnd und tStart ((tEnd-tStart)/2)

Gewünscht ist zu jedem beliebigen JETZT (now) den aktuellen Wert zwischen tStart und tEnd abfragen zu können, abhängig natürlich von der Dauer der linearen Änderung von "tStart" zu "tEnd" über die Dauer "tDuration".
25  International / Deutsch / Re: Encoder zählt jeden Schritt doppelt on: July 29, 2011, 05:51:21 am
Ich forsche und habe folgendes rausgefunden:
Der Encoder rastet nur jeden zweiten Schritt mechanisch ein. Das ist ja gemein.
Ich werde also einfach ein
Code:
conter 2 = counter /2;
einbauen und mich freuen über den tollen Code (es sei denn einer von Euch hat noch eine blendende Idee)
26  International / Deutsch / Re: Mathe: v1*2 hochX on: July 29, 2011, 01:07:35 am
So, nun habe ich meine Formel fertig. Ich werde wohl pow() nehmen, weil ich (natürlich) auch Kommawerte verwenden muss. Das habe ich wohl übersehen. Ich habe einen kleinen Test gemacht und die Berechnung (5*pow) benötigt 584 Mikrosekunden. Damit kann ich gut leben und danke hiermit allen Helfern!

27  International / Deutsch / Re: Encoder zählt jeden Schritt doppelt on: July 29, 2011, 12:40:31 am
Oh Gott, da habe ich ja noch gar nicht dran gedacht!
Kann es sein das der Encoder so exakt prellt? Es ist ja wirklich immer so das die Schritte doppelt zählen - deshalb bin ich von einem Softwarefehler ausgegangen...
Kann ich meinen encoder per progammierung entprellen?
28  International / Deutsch / Re: Encoder zählt jeden Schritt doppelt on: July 28, 2011, 03:06:07 pm
Ja, das war auch mein erster Test, leider auch hier in allen Einstellungen das gleiche Ergebnis. Es ist auch egal, wie schnell oder langsam ich den encoder drehe, ich bekomme immer nur gerade Zahlen.
29  International / Deutsch / Re: Encoder zählt jeden Schritt doppelt on: July 28, 2011, 02:27:14 pm
Ich wüsste nicht, wie ich's einfacher machen sollte. (ist mein erster encoder)

Es ist ein D240313D von Panasonic,
heir gibt es auch ein PDF dazu: http://www.pollin.de/shop/downloads/D240313D.PDF
30  International / Deutsch / Encoder zählt jeden Schritt doppelt on: July 28, 2011, 12:48:14 pm
Hallo zusammen,
hier mein code, darunter mein Problem:
Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);

#define PIN_HIGHBIT (7)
#define PIN_LOWBIT  (5)
#define BAUDRATE    (9600)
#define DEBUG         (1)

// globals
int state, prevState = 0, count = 0;
int encoderStates[4][4] = {
 {  0, -1,  1,  0 },
 {  1,  0,  0, -1 },
 { -1,  0,  0,  1 },
 {  0,  1, -1,  0 },
};

void setup() {
  pinMode(PIN_HIGHBIT, INPUT);
  pinMode(PIN_LOWBIT, INPUT);
  digitalWrite(PIN_LOWBIT, HIGH);
  digitalWrite(PIN_HIGHBIT, HIGH);
  lcd.init();     
  lcd.backlight();
}

void loop() {
  state = (digitalRead(PIN_HIGHBIT) << 1) | digitalRead(PIN_LOWBIT);
  count += encoderStates[prevState][state];

  if (state != prevState) {
    lcd.clear();
    lcd.print(count);
  }

  prevState = state;
}
Wenn ich nun an meinem Encoder drehe, wird pro Schritt 2 weiter gezählt.
Wenn ich ein klein wenig nach links drehe (noch kein Schritt), dann wird nur eins abgezogen. Ansonsten macht der immer 2...

Denkfehler oder Quatsch gemacht?
Pages: 1 [2] 3 4 ... 8