derHerrKohler

26.04.2012 07:58

Timelapse Post Produktion ...

22.04.2012 08:46

Die ultimative Checkliste zum timelapsen. ...

20.08.2011 09:40

Einige Tips für Umsteiger von Windows -> OS X ...

10.08.2011 17:59

So, das war's dann wohl: Elektronik zu schnell für ...

20.07.2011 20:10

Dann testen wir mal Apples neus Betriebssystem ...

07.07.2011 20:24

Ich teste Google+ ...

02.07.2011 13:02

Hier zwei neuere Clips von befreundeten Bands. ...

02.07.2011 08:22

Ein paar ältere Clips für GrennDSL ...

20.05.2011 16:32

Hier wird TYPO3 auf einem Webserver installiert. S ...

20.05.2011 08:38

Erste Kamerafahrten mit dem camSlider und Test des ...

20.05.2011 08:38

Das iPhone-Update schafft Platz für Blödsinn ...

20.05.2011 11:55

Das ist das most annoying Instrument... ...

20.05.2011 08:38

Nachdem meine Seite derart unstrukturiert war, wur ...

lötet.

Die bestückte Frontplatte im unlackierten Gehäuse

Das Herzstück der Steuerung ist ein Arduino Mega Clone. Im ersten Prototypen habe ich die gesamte Verdrahtung 'fliegend' realisiert, das heisst Widerstände direkt an Dioden und Schalter gelötet, die Verkabelung komplett ohne Platinen mit Schaltungsdraht als Kabelbäume ausgeführt. 

Das Gehäuse kommt von Conrad Elektronik, hat hier die Bestellnummer 534499, die Frontplatte habe ich selbst entworfen und von der Firma Schaeffer-AG fräsen lassen. Es gibt hier ein Programm namens "Frontplattendesigner", die Datei für die Frontplatte findet sich hier.

Folgende 1xUM-Schalter sind verwendet: (auf Ebay gefunden)

Free Run: Links/Stop/Rechts
Goto Position: Links/Stop/Rechts
Damping: Links/Beides/Rechts
Speed: 0.1x/1x/10x

Dann gibt es noch drei Taster: (Klingeltaster von Ebay)

Set Position 1
Set Position 2
Clear Positions

Und natürlich gibt es zwei Potis: (Conrad 450016 und 718295)

Speed
Damping

Im Gehäuse der Steuerung sind folgende Buchsen vorhanden:

XLR female: Endabschaltung rechts (Conrad 730818)

XLR female: Endabschaltung links

Speakon female 4-pol: Motoranschluss (Pollin 94-450360)

Kaltgerätebuchse mit Sicherung und Netzschalter (Conrad 501637)

Zur Kühlung des ganzen gibt es zwei Papstlüfter (Conrad 94-320359), zur Anzeige der Betriebszustände wurde noch ein 16x2 I2C-Display integriert (Lipoly DFR-DFR0063).

Die Schaltung kann man hier sehen und als PDF runterladen.

Hier ist der Arduino-Code. Die Version 0.6 ist noch nicht richtig getestet, aber wahrscheinlich stabiler. Einige Funktionen wurden vereinfacht.

Firmware 0.6beta


// Firmware 0.6beta
// This is the Firmware of the DIY camSlider 
// for a detailed description of the Slider visit http://www.stefankohler.de
//
// Copyright (C) 2011 Stefan Kohler
//
// If you have any questions or some ideas to improve the code, please write to info(at)stefankohler.de
//
// Use this code at your own risk.

#include <Wire.h>
#include <LiquidCrystal_I2C.h> 
LiquidCrystal_I2C lcd(0x27,16,2);

// ############### userdefined VARIABLES ###############
// you may have to change these settings, depending on you Motor and DC-Voltage
int speed_factor = 5;    // this is the gerneal speed-factor. higher = slower movements; range about 50 to 200
int motorDelay = 7;      // HIGH-Pulsetime for STEP. You may higher this value if you use an easydriver or some other controller. For testing i recommend to use 25

// Maximum and Minimus values, used for mapping the Speed-Poti
int max_speed = 1023;
int min_speed = 0;

// ############### don't change anything beyond this point ###############
// display variables and splash-screen
String a = "CamSlider";
String b = "c2011";
String c = "Firmware";
String d = "0.5.0b";
String lastA = "";
String lastB = "";
String lastC = "";
String lastD = "";

// the Pins used on the Arduino Mega
// all buttons and switches are labeled in the namespace *_btn, for LED's i used *_led outputs for the easyDriver are labeled as *_pi
const int clear_btn = 33;      
const int dampingLeft_btn = 47;
const int dampingLeft_led = 7; 
const int dampingRight_btn = 53;
const int dampingRight_led = 6; 
const int damping_pin = A2;
const int dir_pin = 34;// 52;               
const int freeRunLeft_btn = 45;
const int freeRunLeft_led = 12;
const int freeRunRight_btn = 43;
const int freeRunRight_led = 13;
const int gotoP1_btn = 41;
const int gotoP1_led = 4;
const int gotoP2_btn = 49;
const int gotoP2_led = 5;
const int ms1_pin = 48;
const int ms2_pin = 50;
const int ms3_pin = 52;
const int p1_led = 9;
const int p2_led = 11;
const int setP1_btn = 39;
const int setP2_btn = 37;
const int speed_pin = A1;
const int speedX01_btn = 51;
const int speedX01_led = 2;
const int speedX10_led = 3;
const int speedX10_btn = 35;
const int step_pin = 36; //50;           
const int stopLeft_led = 8;
const int stopRight_led = 10;
const int temp_pin = A0;

// initiate the variables for the states of the buttons
int clear_state = 0;
int dampingLeft_state = 0;
int dampingRight_state = 0;
int freeRunLeft_state = 0;
int freeRunRight_state = 0;
int gotoP1_state = 0;
int gotoP2_state = 0;
int setP1_state = 0;
int setP2_state = 0;
int speedX01_state = 0;
int speedX10_state = 0;
int mode = 0;
int LCDmode = 0;
int dampingMode = 0;
int speedMode = 0;

// values
unsigned long speed_value = 1;
int damping_value = 1;
int temp_value = 0;
unsigned long stepperSpeed = 0;
int time_value = 0;

// timer variables
unsigned long ct = 0;  // current Time
unsigned long lt = 0;  // last timer
unsigned long lastRESET = 500000;
unsigned long lastBUTTONS = 0;
unsigned long lastMODES = 0;
unsigned long lastTEMPERATURE = 0;
unsigned long lastSTEP = 0;
long stepperPosition = 0;
long stepperPositionP1 = 0;
long stepperPositionP2 = 0;
long stepperDirection = 0;

// ############### TEMPORARY VARIABLES ##############
int tempI = 0;
int tempTEMP = 0;
// ############### SETUP ###############
void setup() {
  pinMode(clear_btn,INPUT);
  pinMode(dampingLeft_btn,INPUT);
  pinMode(dampingLeft_led,OUTPUT);
  pinMode(dampingRight_btn,INPUT);
  pinMode(dampingRight_led,OUTPUT);
  pinMode(dir_pin,OUTPUT);
  pinMode(freeRunLeft_btn,INPUT);
  pinMode(freeRunLeft_led,OUTPUT);
  pinMode(freeRunRight_btn,INPUT);
  pinMode(freeRunRight_led,OUTPUT);
  pinMode(gotoP1_led,OUTPUT);
  pinMode(gotoP2_btn,INPUT);
  pinMode(gotoP2_led,OUTPUT);
  pinMode(ms1_pin,OUTPUT);
  pinMode(ms2_pin,OUTPUT);
  pinMode(ms3_pin,OUTPUT);
  pinMode(p1_led,OUTPUT);
  pinMode(p2_led,OUTPUT);
  pinMode(setP1_btn,INPUT);
  pinMode(setP2_btn,INPUT);
  pinMode(speedX01_btn,INPUT);
  pinMode(speedX01_led,OUTPUT);
  pinMode(speedX10_btn,INPUT);
  pinMode(speedX10_led,OUTPUT);
  pinMode(step_pin,OUTPUT);
  pinMode(stopLeft_led,OUTPUT);
  pinMode(stopRight_led,OUTPUT);

  digitalWrite(ms1_pin,HIGH);
  digitalWrite(ms2_pin,HIGH);
  digitalWrite(ms3_pin,HIGH);
  digitalWrite(dir_pin,LOW);
  digitalWrite(step_pin,LOW);

  lcd.init();                // initialize the lcd 
  lcd.backlight();           // switch on backlight 
  anzeige();                 // refresh display
  //delay(4000);              // show splashscreen
  for (tempI=0;tempI<4;tempI++){
    delay(100);
    digitalWrite(stopRight_led,LOW);
    digitalWrite(stopLeft_led,HIGH);    
    delay(100);
    digitalWrite(stopRight_led,HIGH);
    digitalWrite(stopLeft_led,LOW);
  }
  digitalWrite(stopRight_led,LOW);
  digitalWrite(stopLeft_led,LOW);
}
// ############################# MAIN LOOP #########################
void loop() {
  ct = micros();   // sets the current Time for timing events
  buttons();      // read the buttons
  modes();        // set modes for slide
  if (mode == 1 || mode == 2){    // if the mode is FreeRun
    runStepperFree();             // call the routine to drive
  }
  if (mode == 3 || mode == 4){    // if the mode is GotoPosition
    runStepperPos();              // call the routine to drive
  }
}


// ############### FUNKTIONEN ###############
void runStepperPos(){ // gotoPosition
  if (ct - lastSTEP > stepperSpeed){  // ct = aktuelle Zeit in microSekunden
    // drive left
    if (stepperPosition > stepperPositionP1 && stepperDirection == 0){ 
      digitalWrite(step_pin,HIGH);      // make a step
      delayMicroseconds(motorDelay);           // wait for some time
      stepperPosition-=1;          
      digitalWrite(step_pin,LOW);       // end of the step
    }
    // nach rechts
    if (stepperPosition < stepperPositionP2 && stepperDirection == 1){    
      digitalWrite(step_pin,HIGH);      // make a step
      delayMicroseconds(motorDelay);           // wait for some time
      stepperPosition+=1;
      digitalWrite(step_pin,LOW);      // end of the step
    }
    lastSTEP = ct;              
  }
}
void runStepperFree(){ // freeRun
  if (ct - lastSTEP > stepperSpeed){ 
    digitalWrite(step_pin,HIGH);      // make a step
    delayMicroseconds(motorDelay);           // keep the pin HIGH for 800icroseconds
    if (stepperDirection == 1){       // set the new stepper position
      stepperPosition+=1;
    }
    else {
      stepperPosition-=1;
    }    
    digitalWrite(step_pin,LOW);      // end of the step
    lastSTEP = ct;              
  }
}
// 
// read modes for the slider
void modes(){  
    mode = 0;  // clear Mode
    if (freeRunLeft_state == LOW){
      mode = 1;  // free run left
      digitalWrite(dir_pin,LOW);
    }
    if (freeRunRight_state == LOW){
      mode = 2;  // free run right
      digitalWrite(dir_pin,HIGH);
    }  
    if (gotoP1_state == LOW && stepperPositionP1 != 0){
      mode = 3;  // goto Position 1 if position is saved
      digitalWrite(dir_pin,LOW);

    }  
    if (gotoP2_state == LOW && stepperPositionP2 != 0){
      mode = 4;  // goto Position 2 if position is saved
      digitalWrite(dir_pin,HIGH);
    }
  if (ct - lastMODES > 100000){
    // MODE

    // SPEED
    speedMode = 0;    // clear the speed mode
    if (speedX01_state == LOW){
      speedMode = 1;  // set the speed mode to /10
    }
    if (speedX10_state == LOW){
      speedMode = 2;  // set the speed mode to *10
    }

    // switch the LEDs
    switch (mode){
      // none
    case 0:
      digitalWrite(freeRunLeft_led,LOW);
      digitalWrite(freeRunRight_led,LOW);
      digitalWrite(gotoP1_led,LOW);
      digitalWrite(gotoP2_led,LOW);
      stepperDirection = 0;
      break;
    case 1:
      digitalWrite(freeRunLeft_led,HIGH);
      digitalWrite(freeRunRight_led,LOW);
      digitalWrite(gotoP1_led,LOW);
      digitalWrite(gotoP2_led,LOW);
      stepperDirection = 0;
      LCDmode = 3;
      break;
    case 2:
      digitalWrite(freeRunLeft_led,LOW);
      digitalWrite(freeRunRight_led,HIGH);
      digitalWrite(gotoP1_led,LOW);
      digitalWrite(gotoP2_led,LOW);
      stepperDirection = 1;
      LCDmode = 3;
      break;  
    case 3:
      digitalWrite(freeRunLeft_led,LOW);
      digitalWrite(freeRunRight_led,LOW);
      digitalWrite(gotoP1_led,HIGH);
      digitalWrite(gotoP2_led,LOW);
      stepperDirection = 0;
      LCDmode = 4;
      break;  
    case 4:
      digitalWrite(freeRunLeft_led,LOW);
      digitalWrite(freeRunRight_led,LOW);
      digitalWrite(gotoP1_led,LOW);
      digitalWrite(gotoP2_led,HIGH);
      stepperDirection = 1;
      LCDmode = 4;
      break;  
    }
    switch (speedMode){
    case 0:
      digitalWrite(speedX01_led,LOW);
      digitalWrite(speedX10_led,LOW);
      stepperSpeed = speed_value;
      break; 
    case 1:
      digitalWrite(speedX01_led,HIGH);
      digitalWrite(speedX10_led,LOW);
      if (speed_value>1){
        stepperSpeed = speed_value * 10; // recalculate the speed mode * 10
      }
      break; 
    case 2:
      digitalWrite(speedX01_led,LOW);
      digitalWrite(speedX10_led,HIGH);
      stepperSpeed = speed_value / 10; // recalculate the speed mode / 10
      break; 
    }

    // Position save
    if (setP1_state == LOW)
    {
      stepperPositionP1 = stepperPosition;
      a = "Position 1:";
      b = stepperPositionP1;
      digitalWrite(p1_led,HIGH);
    }
    if (setP2_state == LOW)
    {
      stepperPositionP2 = stepperPosition;
      c = "Position 2:";
      d = stepperPositionP2;
      digitalWrite(p2_led,HIGH);
    }
    if (clear_state == LOW)
    {
      stepperPositionP1 = 0;
      stepperPositionP2 = 0;
      digitalWrite(p1_led,LOW);
      digitalWrite(p2_led,LOW);
    }
    lastMODES = ct;
  }
}
void buttons(){
//  if (ct - lastBUTTONS > 20000){
    freeRunLeft_state = digitalRead(freeRunLeft_btn);
    freeRunRight_state = digitalRead(freeRunRight_btn);
    gotoP1_state = digitalRead(gotoP1_btn);
    gotoP2_state = digitalRead(gotoP2_btn);
    if (mode == 0){
    // read the button pins
      clear_state = digitalRead(clear_btn);
      dampingLeft_state = digitalRead(dampingLeft_btn);
      dampingRight_state = digitalRead(dampingRight_btn);
      setP1_state = digitalRead(setP1_btn);
      setP2_state = digitalRead(setP2_btn);
      speedX01_state = digitalRead(speedX01_btn);
      speedX10_state = digitalRead(speedX10_btn);
      speed_value = analogRead(speed_pin);
      damping_value = analogRead(damping_pin);
      }
    lastBUTTONS = ct;
//  }
}
void anzeige(){   
  if (ct - lastRESET > 1000000 && mode == 0){ // currentTime - lastResetOfLCD > DELAY 
    if (a!=lastA || b!=lastB || c!=lastC || d!=lastD){        
      
      int aLength = a.length();
      int bLength = b.length();
      int cLength = c.length();
      int dLength = d.length();
      
      int abSpace = 16 - (aLength + bLength);
      int cdSpace = 16 - (cLength + dLength);
      
      String ax = "";
      for (int i=0;i<abSpace;i++){
        ax += " ";
      }
      String cx = "";
      for (int i=0;i<cdSpace;i++){
        cx += " ";
      }      
      lcd.setCursor(0, 0);
      lcd.print(a+ax+b);

      lcd.setCursor(0, 1);
      lcd.print(c+cx+d);

      lastA = a;
      lastB = b;
      lastC = c;
      lastD = d;  
      lastRESET = ct;
    }
  }
}



beta 0.6.0

Firmware 0.3.0beta


// Firmware 0.3.0beta
// This is the Firmware of the DIY camSlider 
// for a detailed description of the Slider visit http://www.stefankohler.de
//
// Copyright (C) 2011 Stefan Kohler
//
// If you have any questions or some ideas to improve the code, please write to info(at)stefankohler.de
//
// Use this code at your own risk.

#include <Wire.h>
#include <LiquidCrystal_I2C.h> 
LiquidCrystal_I2C lcd(0x27,16,2);

// ############### userdefined VARIABLES ###############
// you may have to change these settings, depending on you Motor and DC-Voltage
int speed_factor = 70;   // this is the gerneal speed-factor. higher = slower movements; range about 50 to 200 

int brightness = 50;     // sets the brightness of the LED's, usable range 1 - 255

// Maximum and Minimus values, used for mapping the Speed-Poti
int max_speed = 2000;
int min_speed = 200;

// ############### don't change anything beyond this point ###############
// display variables and splash-screen
String a = "CamSlider";
String b = "c2011";
String c = "Firmware";
String d = "0.3.0b";
String lastA = "";
String lastB = "";
String lastC = "";
String lastD = "";

// the Pins used on the Arduino Mega
// all buttons and switches are labeled in the namespace *_btn, for LED's i used *_led outputs for the easyDriver are labeled as *_pi
const int clear_btn = 33;      
const int dampingLeft_btn = 47;
const int dampingLeft_led = 7; 
const int dampingRight_btn = 53;
const int dampingRight_led = 6; 
const int damping_pin = A2;
const int dir_pin = 52;               
const int freeRunLeft_btn = 45;
const int freeRunLeft_led = 12;
const int freeRunRight_btn = 43;
const int freeRunRight_led = 13;
const int gotoP1_btn = 41;
const int gotoP1_led = 4;
const int gotoP2_btn = 49;
const int gotoP2_led = 5;
const int ms1_pin = 48;
const int ms2_pin = 46;
const int p1_led = 9;
const int p2_led = 11;
const int setP1_btn = 39;
const int setP2_btn = 37;
const int speed_pin = A1;
const int speedX01_btn = 51;
const int speedX01_led = 2;
const int speedX10_led = 3;
const int speedX10_btn = 35;
const int step_pin = 50;           
const int stopLeft_led = 8;
const int stopRight_led = 10;
const int temp_pin = A0;

// initiate the variables for the states of the buttons
int clear_state = 0;
int dampingLeft_state = 0;
int dampingRight_state = 0;
int freeRunLeft_state = 0;
int freeRunRight_state = 0;
int gotoP1_state = 0;
int gotoP2_state = 0;
int setP1_state = 0;
int setP2_state = 0;
int speedX01_state = 0;
int speedX10_state = 0;
int mode = 0;
int LCDmode = 0;
int dampingMode = 0;
int speedMode = 0;

// values
unsigned long speed_value = 1;
unsigned long speed_value_pin = 1;
int damping_value = 1;
int temp_value = 0;
unsigned long stepperSpeed = 0;
int time_value = 0;

// timer variables
unsigned long ct = 0;  // current Time
unsigned long lt = 0;  // last timer
unsigned long lastRESET = 500000;
unsigned long lastBUTTONS = 0;
unsigned long lastMODES = 0;
unsigned long lastTEMPERATURE = 0;
unsigned long lastSTEP = 0;
long stepperPosition = 8100;
long stepperPositionP1 = 0;
long stepperPositionP2 = 0;
long stepperDirection = 0;
int tempI = 0;


// ############### TEMPORARY VARIABLES ##############
int tempTEMP = 0;
// ############### SETUP ###############
void setup() {
Serial.begin(9600);
  pinMode(clear_btn,INPUT);
  pinMode(dampingLeft_btn,INPUT);
  pinMode(dampingLeft_led,OUTPUT);
  pinMode(dampingRight_btn,INPUT);
  pinMode(dampingRight_led,OUTPUT);
  pinMode(dir_pin,OUTPUT);
  pinMode(freeRunLeft_btn,INPUT);
  pinMode(freeRunLeft_led,OUTPUT);
  pinMode(freeRunRight_btn,INPUT);
  pinMode(freeRunRight_led,OUTPUT);
  pinMode(gotoP1_led,OUTPUT);
  pinMode(gotoP2_btn,INPUT);
  pinMode(gotoP2_led,OUTPUT);
  pinMode(ms1_pin,OUTPUT);
  pinMode(ms2_pin,OUTPUT);
  pinMode(p1_led,OUTPUT);
  pinMode(p2_led,OUTPUT);
  pinMode(setP1_btn,INPUT);
  pinMode(setP2_btn,INPUT);
  pinMode(speedX01_btn,INPUT);
  pinMode(speedX01_led,OUTPUT);
  pinMode(speedX10_btn,INPUT);
  pinMode(speedX10_led,OUTPUT);
  pinMode(step_pin,OUTPUT);
  pinMode(stopLeft_led,OUTPUT);
  pinMode(stopRight_led,OUTPUT);

  digitalWrite(ms1_pin,LOW);
  digitalWrite(ms2_pin,HIGH);
  digitalWrite(dir_pin,LOW);
  digitalWrite(step_pin,LOW);

  lcd.init();                // initialize the lcd 
  lcd.backlight();           // switch on backlight 
  anzeige();                 // refresh display
  delay(4000);              // show splashscreen
  digitalWrite(stopLeft_led,HIGH);
  delay(50);
  digitalWrite(stopLeft_led,LOW);
  digitalWrite(stopRight_led,HIGH);
  delay(50);
  digitalWrite(stopRight_led,LOW);
  digitalWrite(p1_led,HIGH);
  delay(50);
  digitalWrite(p1_led,LOW);
  digitalWrite(p2_led,HIGH);
  delay(50);
  digitalWrite(p2_led,LOW);
  digitalWrite(freeRunLeft_led,HIGH);
  delay(50);
  digitalWrite(freeRunLeft_led,LOW);
  digitalWrite(freeRunRight_led,HIGH);
  delay(50);
  digitalWrite(freeRunRight_led,LOW);
  digitalWrite(speedX01_led,HIGH);
  delay(50);
  digitalWrite(speedX01_led,LOW);
  digitalWrite(speedX10_led,HIGH);
  delay(50);
  digitalWrite(speedX10_led,LOW);
  digitalWrite(dampingLeft_led,HIGH);
  delay(50);
  digitalWrite(dampingLeft_led,LOW);
  digitalWrite(dampingRight_led,HIGH);
  delay(50);
  digitalWrite(dampingRight_led,LOW);
  digitalWrite(gotoP1_led,HIGH);
  delay(50);
  digitalWrite(gotoP1_led,LOW);
  digitalWrite(gotoP2_led,HIGH);
  delay(50);
  digitalWrite(gotoP2_led,LOW);
}
  
// ############################# MAIN LOOP #########################
void loop() {
  ct = micros();   // sets the current Time for timing events
  anzeige();      // refresh display
  buttons();      // read the buttons
  modes();        // set modes for slide
  stepperSpeed = speed_value * speed_factor;  // recalculate the speedvalue
  if (mode == 0){
     temperature();  // read the temperature
     a="Position:";
     b= stepperPosition;
     c="Temperature:";
     d = temp_value;
  }
  if (mode == 1 || mode == 2){    // if the mode is FreeRun
    runStepperFree();             // call the routine to drive
  }
  if (mode == 3 || mode == 4){    // if the mode is GotoPosition
    runStepperPos();              // call the routine to drive
  }
}


// ############### FUNKTIONEN ###############
void runStepperPos(){ // gotoPosition
  if (ct - lastSTEP > stepperSpeed00000000000,){ 
    // drive left
    if (stepperPosition > stepperPositionP1 && stepperDirection == 0){       
      digitalWrite(step_pin,HIGH);      // make a step
      delayMicroseconds(799);           // wait for some time
      stepperPosition-=1;          
      digitalWrite(step_pin,LOW);       // end of the step
    }
    // nach rechts
    if (stepperPosition < stepperPositionP2 && stepperDirection == 1){       
      digitalWrite(step_pin,HIGH);      // make a step
      delayMicroseconds(799);           // wait for some time
      stepperPosition+=1;
      digitalWrite(step_pin,LOW);      // end of the step
    }
    lastSTEP = ct;              
  }
}
void runStepperFree(){ // freeRun
  if (ct - lastSTEP > stepperSpeed && stepperPosition > 0){ 
    digitalWrite(step_pin,HIGH);      // make a step
    delayMicroseconds(800);           // keep the pin HIGH for 800icroseconds
    if (stepperDirection == 1){       // set the new stepper position
      stepperPosition+=1;
    }
    else {
      stepperPosition-=1;
    }    
    digitalWrite(step_pin,LOW);      // end of the step
    lastSTEP = ct;              
  }
}
// read Temperature 
void temperature(){
  if (ct - lastTEMPERATURE > 2000000){
    for (tempI = 0 ; tempI < 5 ; tempI++){  // read the temperature pin 5 times
      tempTEMP = tempTEMP + analogRead(temp_pin);
    }
    temp_value = tempTEMP / 5 / 2;
    tempTEMP = 0;
    lastTEMPERATURE = ct;
  }
}
// read modes for the slider
void modes(){  
  if (ct - lastMODES > 100000){
    // MODE
    mode = 0;  // clear Mode
    if (freeRunLeft_state == LOW){
      mode = 1;  // free run left
      digitalWrite(dir_pin,HIGH);
    }
    if (freeRunRight_state == LOW){
      mode = 2;  // free run right
      digitalWrite(dir_pin,LOW);
    }  
    if (gotoP1_state == LOW && stepperPositionP1 != 0){
      mode = 3;  // goto Position 1 if position is saved
      digitalWrite(dir_pin,HIGH);

    }  
    if (gotoP2_state == LOW && stepperPositionP2 != 0){
      mode = 4;  // goto Position 2 if position is saved
      digitalWrite(dir_pin,LOW);
    }
    // DAMPING
    dampingMode = 0;    // set the damping to both sides
    if (dampingLeft_state == LOW){
      dampingMode = 1;  // set the daping mode to "only left"
    }
    if (dampingRight_state == LOW){
      dampingMode = 2; // set the damping mode to "only right
    }
    // SPEED
    speedMode = 0;    // clear the speed mode
    if (speedX01_state == LOW){
      speedMode = 1;  // set the speed mode to /10
    }
    if (speedX10_state == LOW){
      speedMode = 2;  // set the speed mode to *10
    }

    // switch the LEDs
    switch (mode){
    case 0:
      digitalWrite(freeRunLeft_led,LOW);
      digitalWrite(freeRunRight_led,LOW);
      digitalWrite(gotoP1_led,LOW);
      digitalWrite(gotoP2_led,LOW);
      stepperDirection = 0;
      break;
    case 1:
      analogWrite(freeRunLeft_led,brightness);
      digitalWrite(freeRunRight_led,LOW);
      digitalWrite(gotoP1_led,LOW);
      digitalWrite(gotoP2_led,LOW);
      stepperDirection = 0;
      break;
    case 2:
      digitalWrite(freeRunLeft_led,LOW);
      analogWrite(freeRunRight_led,brightness);
      digitalWrite(gotoP1_led,LOW);
      digitalWrite(gotoP2_led,LOW);
      stepperDirection = 1;
      break;  
    case 3:
      digitalWrite(freeRunLeft_led,LOW);
      digitalWrite(freeRunRight_led,LOW);
      analogWrite(gotoP1_led,brightness);
      digitalWrite(gotoP2_led,LOW);
      stepperDirection = 0;
      break;  
    case 4:
      digitalWrite(freeRunLeft_led,LOW);
      digitalWrite(freeRunRight_led,LOW);
      digitalWrite(gotoP1_led,LOW);
      analogWrite(gotoP2_led,brightness);
      stepperDirection = 1;
      break;  
    }
    switch (speedMode){
    case 0:
      digitalWrite(speedX01_led,LOW);
      digitalWrite(speedX10_led,LOW);
      break; 
    case 1:
      analogWrite(speedX01_led,brightness);
      digitalWrite(speedX10_led,LOW);
      if (speed_value>1){
        speed_value = speed_value * 10; // recalculate the speed mode * 10
      }
      break; 
    case 2:
      digitalWrite(speedX01_led,LOW);
      analogWrite(speedX10_led,brightness);
      speed_value = speed_value / 10; // recalculate the speed mode / 10
      break; 
    }

    switch (dampingMode){
    case 0:
      analogWrite(dampingLeft_led,brightness);
      analogWrite(dampingRight_led,brightness);
      break; 
    case 1:
      analogWrite(dampingLeft_led,brightness);
      digitalWrite(dampingRight_led,LOW);
      break; 
    case 2:
      digitalWrite(dampingLeft_led,LOW);
      analogWrite(dampingRight_led,brightness);
      break; 
    }    
    // Position save
    if (setP1_state == LOW)
    {  
        stepperPositionP1 = stepperPosition;
        anzeige2s("Position 1:",stepperPosition,"","");
        digitalWrite(p1_led,HIGH);
    }
    if (setP2_state == LOW)
    {
        stepperPositionP2 = stepperPosition;
        anzeige2s("Position 2:",stepperPosition,"","");
        digitalWrite(p2_led,HIGH);
    }
    if (clear_state == LOW)
    {
      if (stepperPositionP1 != 0 || stepperPositionP2 != 0)
        {
        anzeige2s("Position","cleared","","");
        }
      stepperPositionP1 = 0;
      stepperPositionP2 = 0;
      digitalWrite(p1_led,LOW);
      digitalWrite(p2_led,LOW);
    }
    lastMODES = ct;
  }
}
void buttons(){
  if (ct - lastBUTTONS > 100000){
    // read the button pins
    clear_state = digitalRead(clear_btn);
    dampingLeft_state = digitalRead(dampingLeft_btn);
    dampingRight_state = digitalRead(dampingRight_btn);
    freeRunLeft_state = digitalRead(freeRunLeft_btn);
    freeRunRight_state = digitalRead(freeRunRight_btn);
    gotoP1_state = digitalRead(gotoP1_btn);
    gotoP2_state = digitalRead(gotoP2_btn);
    setP1_state = digitalRead(setP1_btn);
    setP2_state = digitalRead(setP2_btn);
    speedX01_state = digitalRead(speedX01_btn);
    speedX10_state = digitalRead(speedX10_btn);
    if (mode == 0)
      {
      speed_value_pin = map(analogRead(speed_pin),0,1023,min_speed,max_speed);  
      damping_value = map(analogRead(damping_pin),0,1023,1,1000);
      }
    speed_value = speed_value_pin;
    lastBUTTONS = ct;
  }
}
void anzeige(){   
  if (ct - lastRESET > 200000 && mode == 0){ // currentTime - lastResetOfLCD > DELAY 
    if (a!=lastA || b!=lastB || c!=lastC || d!=lastD || LCDmode == 1){        
      
      int aLength = a.length();
      int bLength = b.length();
      int cLength = c.length();
      int dLength = d.length();
      
      int abSpace = 16 - (aLength + bLength);
      int cdSpace = 16 - (cLength + dLength);
      
      String ax = "";
      for (int i=0;i<abSpace;i++){
        ax += " ";
      }
      String cx = "";
      for (int i=0;i<cdSpace;i++){
        cx += " ";
      }      
      
      lcd.setCursor(0, 0);
      lcd.print(a+ax+b);

      lcd.setCursor(0, 1);
      lcd.print(c+cx+d);
      
      lastA = a;
      lastB = b;
      lastC = c;
      lastD = d;  
      lastRESET = ct;
            
      LCDmode=0;      
    }
  }
}
void anzeige2s(String a2,String b2,String c2,String d2){   
      int aLength = a2.length();
      int bLength = b2.length();
      int cLength = c2.length();
      int dLength = d2.length();
      
      int abSpace = 16 - (aLength + bLength);
      int cdSpace = 16 - (cLength + dLength);
      
      String ax = "";
      for (int i=0;i<abSpace;i++){
        ax += " ";
      }
      String cx = "";
      for (int i=0;i<cdSpace;i++){
        cx += " ";
      }      
      
      lcd.setCursor(0, 0);
      lcd.print(a2+ax+b2);

      lcd.setCursor(0, 1);
      lcd.print(c2+cx+d2);
      delay(1000);
      LCDmode=1;    
}



beta 0.3.0
 



share it!