Go Down

Topic: Lauflicht schaltet kurz fehlerhaft um (Read 1 time) previous topic - next topic

Udo Klein

Check out my experiments http://blog.blinkenlight.net

Doc_Arduino

Hallo,

Deine Funktion bzw. Formel muß ich mir mal in Ruhe anschauen. 1:1 übernehmen geht eh nicht, weil ich 8 Lampen habe die in 3 Durchgängen beschleunigt und abgebremst werden sollen. Deshalb erstmal das Array. Aber Danke für den Hinweis.



Tschau
Doc Arduino

Doc_Arduino

Hallo,

Problem gefixt. Ich hoffe das sieht jetzt nicht nach Quick & Dirty aus?   :D
Jetzt guck ich mir mal die Formel von Udo an und dann muß das delay raus ...  ;)

Code: [Select]

void loop()
{
 
  for (int i=0; i <=23; i++)
  {
      PORTC = LED;   
      if (i < 23) {LED = LED << 1;} 
      if (LED > 128) {LED = 1;}
      delay(ZeitForward[i]);
      Serial.print(i); Serial.print("  "); Serial.println(LED);
  }

  delay(1000);
   
  for (int i=0; i <=23; i++)
  {
      PORTC = LED;     
      if (i < 23) {LED = LED >> 1;}       
      if (LED < 1) {LED = 128;}
      delay(ZeitBackward[i]);
      Serial.print(i); Serial.print("  "); Serial.println(LED);
  }
 
  delay(1000);
 

Tschau
Doc Arduino

Doc_Arduino

#8
Feb 24, 2013, 07:56 pm Last Edit: Feb 24, 2013, 07:59 pm by Doc_Arduino Reason: 1
Hallo,

jetzt eleganter ...  ;)

@ Udo: Warum nimmst Du die Wurzelfunktion und dann noch doppelt? Welchen anderen Effekt hat das zur Folge? Andere Steilheiten oder? Das habe ich noch nicht rausbekommen. Und wenn ich Deine Formel nachrechne erhalte ich negative delay Werte. Wie geht das denn?

Code: [Select]

// Arduino Mega 2560

int LED = 1;
int Pause;

void setup()
{    
  Serial.begin(9600);
 
  DDRC = 255;       // Port.C komplett Ausgang
  PORTC = 255;      // Port.C alle Ausgänge Ein - Funktionstest
  delay(500);
  PORTC = 0;        // Port.C alle Ausgänge Aus
  delay(500);
     
}

void loop()
{
 // beschleunigen CW
 for (int i=15; i>=0; i--)
 {
     PORTC = LED;    
     if (i > 0) {LED = LED << 1;}  
     if (LED > 128) {LED = 1;}
     Pause = (sq(i)*5)+6;
     delay(Pause);
     // Serial.print(i); Serial.print("  ");Serial.print(Pause); Serial.print("  "); Serial.println(LED);
 }

 delay(200);
 
 // abbremsen CCW
 for (int i=0; i<=15; i++)
 {
     PORTC = LED;    
     if (i < 15) {LED = LED >> 1;}  
     if (LED < 1) {LED = 128;}
     Pause = (sq(i)*5)+6;
     if (i == 14) {Pause = Pause + 800;}         // letzter Würfelumkippeffekt
     delay(Pause);
     // Serial.print(i); Serial.print("  ");Serial.print(Pause); Serial.print("  "); Serial.println(LED);
 }

 
}  
Tschau
Doc Arduino

Udo Klein

Also ich bekomme keine negativen Werte wenn ich das nachrechne. Ich würde sagen Du verrechnest Dich.

Und warum Wurzeln? Ich habe einfach die bekannte Formel h = 1/2 g*t^2 http://de.wikipedia.org/wiki/Wurfparabel nach t umgestellt. Ein StreckenABSCHNITT äußert sich dann eben in der Differenz von zwei Wurzeln. Das steht auch genauso in meinem Blogbeitrag drin.
Check out my experiments http://blog.blinkenlight.net

Go Up