derHerrKohler

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

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

Erste Kamerafahrten mit dem camSlider und Test des ...

Das ist das most annoying Instrument... ...
lötet.
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












