Всем привет! Люди может ли кто нить помочь в поправке скетча что бы вместо обычного двигателя работал шаговый вот скетч: Заранее благодарен всем кто поможет .... очень надо .... Код (Text): /* #include <AFMotor.h> /* LCD screen for motorized camera dolly Code written by: Philip Sorri */ #include <LiquidCrystal.h> //LCD library #include <Bounce.h> //debounce library int button3 = A0; //button pins int button2 = 7; int button1 = 8; int startStop = 9; int runTime1; int show = 1; //what menu to show int dollySpeedNum = 0; //number of the speed int delayTime = 100; //delay after pressedbutton (see the functions) int delayDolly = 0; //delay before running int runTime = 0; //time to run after delay int motorPin = 0; int motorPin1 = 1; int motorPin2 = 6; int motorPin3 = 13; int val4; int shutter = 1; int shutterCount = 0; int shutterVal = 0; int angle=200*22/360; int panstep=1500; int IN1=4; int IN2=5; int IN3=6; int IN4=7; AF_Stepper motor(200, 1); Bounce bouncer1 = Bounce(button1, 15); //deblounce (button, milliseconds) Bounce bouncer2 = Bounce(button2, 15); Bounce bouncer3 = Bounce(button3, 15); Bounce bouncer4 = Bounce(startStop, 15); LiquidCrystal lcd(12,11,5,4,3,2); //pins of the LCD to arduino void setup() { pinMode(button1, INPUT); //button as inputs pinMode(button2, INPUT); pinMode(button3, INPUT); pinMode(startStop, INPUT); pinMode(motorPin, OUTPUT); pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(shutter, OUTPUT); motor.setSpeed (4); motor.step(angle*2, BACKWARD, INTERLEAVE); motor.release(); lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("DOLLYDUINO V 1.1"); lcd.setCursor(0,1); lcd.print("By ThePhilleBoy"); delay(3000); } void loop() { motor.step(2, BACKWARD, MICROSTEP); if(shutterVal > 1) { shutterVal = 0; } runTime1 = runTime; if(runTime == 0) { runTime1 = 10; } else { runTime1 = runTime; } bouncer1.update(); //update the buttons bouncer2.update(); bouncer3.update(); bouncer4.update(); int val1 = bouncer1.read(); //reads the value int val2 = bouncer2.read(); //and sets the new variables to it int val3 = bouncer3.read(); //So if button is pressed value = HIGH val4 = bouncer4.read(); if (show > 4) { //Number of menus show = 1; } if(val3 == HIGH) { //scroll through the different menus show = show + 1; //the show number indicates which menu we're in delay(delayTime * 5); } if(show == 1) { //if show is 1 the dollySpeed function is chosen/shown dollySpeed(val1, val2); //To change values in this menu with same buttons } //in all the menus else if(show == 2) { //if show is 2 delay function is chosen/shown on LCD dollyDelay(val1, val2); } else if(show == 3) { runningTime(val1, val2); } else if(show == 4) { //shows all the setting that are chosen settings(); if(val1 == HIGH || val2 == HIGH) { shutterVal = shutterVal + 1; delay(delayTime*3); } } if(val4 == HIGH && shutterVal == 0){ motorOn(); } if(val4 == LOW){ analogWrite(motorPin, LOW); analogWrite(motorPin1, LOW); analogWrite(motorPin2, LOW); analogWrite(motorPin3, LOW); } if(val4 == HIGH && shutterVal == 1) { motorOn(); lcd.setCursor(0,0); lcd.print("P:"); lcd.setCursor(4,0); lcd.print(shutterCount); } } void dollySpeed(int num1, int num2) { lcd.setCursor(0,0); //sets the startpoint of the text to (0,0) lcd.print("Dolly speed: "); //Writes "Dolly speed:" to the LCD if(num1 == HIGH) { //if num1 which is val1/button1 is pressed the speed dollySpeedNum = dollySpeedNum + 1; //increases with 1 delay(delayTime); //delay before next press, otherwise it would } //scroll fast as hell if(num2 == HIGH) { //if button2 is pressed decrease with 1 dollySpeedNum = dollySpeedNum - 1; delay(delayTime); } lcd.setCursor(0,1); //sets the starting point of the print lcd.print(dollySpeedNum); //prints to the start point (0,1) if(dollySpeedNum < 10) { lcd.setCursor(1, 1); lcd.print("% "); //makes a percent sign after the number } //the space after it is to hide numbers that might if(dollySpeedNum >= 10 && dollySpeedNum < 100) { //be shown from the last lcd.setCursor(2, 1); //menu that we scrolled from. lcd.print("% "); //if the speed if over 10 and less than 100 it moves } //the percentsign one step to the right. if(dollySpeedNum == 100) { //same here lcd.setCursor(3, 1); lcd.print("% "); } if(dollySpeedNum > 100) { //I wanted the speed to be in percent so I dollySpeedNum = 0; //have to limit the value of dollySpeedNum. } //if the value is higher than 100 it makes it to 0 if(dollySpeedNum < 0) { //and if it's lower than 0 it goes to 100. dollySpeedNum = 100; } } void dollyDelay(int but1, int but2) { int decimal; decimal = delayDolly%10; lcd.setCursor(0,0); lcd.print("Delay: "); if(but1 == HIGH) { delayDolly = delayDolly + 1; delay(delayTime); } if(but2 == HIGH) { delayDolly = delayDolly - 1; delay(delayTime); } lcd.setCursor(0,1); lcd.print(delayDolly/10); if(delayDolly < 10) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal); lcd.setCursor(3,1); lcd.print(" s "); } if(delayDolly >= 10 && delayDolly < 100) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal); lcd.setCursor(3,1); lcd.print(" s "); } if(delayDolly > 99) { lcd.setCursor(2, 1); lcd.print("."); lcd.setCursor(3,1); lcd.print(decimal); lcd.setCursor(4,1); lcd.print(" s "); } if(delayDolly > 999) { delayDolly = 0; } if(delayDolly < 0) { delayDolly = 999; } } void runningTime(int num1, int num2) { int decimal1; decimal1 = runTime%10; lcd.setCursor(0,0); lcd.print("Run time: "); if(num1 == HIGH) { runTime = runTime + 1; delay(delayTime); } if(num2 == HIGH) { runTime = runTime - 1; delay(delayTime); } lcd.setCursor(0,1); lcd.print(runTime/10); if(runTime < 10) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal1); lcd.setCursor(3,1); lcd.print(" s "); } if(runTime >= 10 && runTime < 100) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal1); lcd.setCursor(3,1); lcd.print(" s "); } if(runTime > 99) { lcd.setCursor(2, 1); lcd.print("."); lcd.setCursor(3,1); lcd.print(decimal1); lcd.setCursor(4,1); lcd.print(" s "); } if(runTime > 999) { runTime = 0; } if(runTime < 0) { runTime = 999; } } void settings() { int decimal1; int decimal2; decimal1 = runTime%10; decimal2 = delayTime%10; lcd.setCursor(0,0); lcd.print("S: "); lcd.setCursor(3,0); lcd.print(dollySpeedNum); if(dollySpeedNum < 10) { lcd.setCursor(4,0); lcd.print("% "); } if(dollySpeedNum >= 10 && dollySpeedNum < 100) { lcd.setCursor(5,0); lcd.print("% "); } if(dollySpeedNum == 100) { lcd.setCursor(6,0); lcd.print("% "); } lcd.setCursor(8,0); lcd.print("R: "); lcd.setCursor(11,0); lcd.print(runTime/10); if(runTime < 10) { lcd.setCursor(12, 0); lcd.print("."); lcd.setCursor(13,0); lcd.print(decimal1); lcd.setCursor(14,0); lcd.print("s"); } if(runTime >= 10 && runTime < 100) { lcd.setCursor(12,0); lcd.print("."); lcd.setCursor(13,0); lcd.print(decimal1); lcd.setCursor(14,0); lcd.print("s"); } if(runTime > 99) { lcd.setCursor(13,0); lcd.print("."); lcd.setCursor(14,0); lcd.print(decimal1); lcd.setCursor(15,0); lcd.print("s"); } lcd.setCursor(0,1); lcd.print("D: "); lcd.setCursor(3,1); lcd.print(delayDolly/10); if(delayDolly < 10) { lcd.setCursor(4, 1); lcd.print("."); lcd.setCursor(5,1); lcd.print(decimal1); lcd.setCursor(6,1); lcd.print("s"); } if(delayDolly >= 10 && delayDolly < 100) { lcd.setCursor(4,1); lcd.print("."); lcd.setCursor(5,1); lcd.print(decimal2); lcd.setCursor(6,1); lcd.print("s"); } if(delayDolly > 99) { lcd.setCursor(5, 1); lcd.print("."); lcd.setCursor(6,1); lcd.print(decimal1); lcd.setCursor(7,1); lcd.print("s"); } if(val4 == LOW) { if(shutterVal == 0) { lcd.setCursor(10,1); lcd.print("I=OFF"); } if(shutterVal == 1) { lcd.setCursor(10,1); lcd.print("I=ON "); } } } void motorOn () { int speedValue = map(dollySpeedNum, 200, 100, 50, 4); analogWrite(motorPin, speedValue); analogWrite(motorPin1, speedValue); analogWrite(motorPin2, speedValue); analogWrite(motorPin3, speedValue); delay(runTime1*100); if(delayDolly > 0) { analogWrite(motorPin, LOW); analogWrite(motorPin1, LOW); analogWrite(motorPin2, LOW); analogWrite(motorPin3, LOW); picture(); shutterCount = shutterCount + 1; delay(delayDolly*100); } } void picture() { pinMode(shutter, HIGH); delay(50); pinMode(shutter, LOW); } }
Господи ... я же не прошу вас переписывать весь код ... я прошу подсказать в каком направление двигаться что менять ... неужели ни кто не знает?
Да пробовал , вот эту AFMotor.h но подключал его через motor shield а сейчас ШД на макетной плате поставил через драйвер с мотор шиелд L293D. проблема в том что шаговый двигатель реагирует и работает но не так как надо. когда включаешь его он делает так ... 1 шаг по часовой 1 против .и такое ощущение что не хватает напряжения ему вал не проворачивается . У меня проблема в коде на мой взгляд т.к. ШД подключен к каналам (0,1,6,13) и я немогу понять как ему сказать что двигатель подключен к этим выходам(входам) что бы плата поняла что это выходы .Компиляция проходит но он ШД делает то что я описал выше +1 по часовой -1 шаг против. Так же менял комбинацию подключения самого шагового двигателя на макетной плате ... ничего не дало . Так же пробовал использовать библиотеку #include <Stepper.h> компиляция не проходит выдает ошибку в строке с выходами Steper steper(Steps, 0, 1, 6, 13);
Библиотека AFMotor рассчитана на шилд Adafruit, там непрямое управлкние, она вам не нужна. Какие проблемы с подключением Stepper? Покажите код примера.
Это я пытался изменить код . подключаю Шаговый Двигатель через MotorShield. Сейчас шаговый двигатель выполняет несколько шагов без управления через меню . и потом останавливается. Основная проблема в том что я не знаю как прописать в программе что шаговый двигатель подключен через моторшиелд и что управляться он долежен через менб которое уже создано Код (Text): #include <AFMotor.h> /* LCD screen for motorized camera dolly Code written by: Philip Sorri */ #include <LiquidCrystal.h> //LCD library #include <Bounce.h> //debounce library int button3 = A3; //button pins int button2 = A4; int button1 = A5; int startStop = A2; int runTime1; int show = 1; //what menu to show int dollySpeedNum = 0; //number of the speed int delayTime = 100; //delay after pressedbutton (see the functions) int delayDolly = 0; //delay before running int runTime = 0; //time to run after delay int motorPin = 10; int val4; int shutter = 1; int shutterCount = 0; int shutterVal = 0; Bounce bouncer1 = Bounce(button1, 15); //deblounce (button, milliseconds) Bounce bouncer2 = Bounce(button2, 15); Bounce bouncer3 = Bounce(button3, 15); Bounce bouncer4 = Bounce(startStop, 15); LiquidCrystal lcd(4, 5, 10, 11, 12, 13); //pins of the LCD to arduino int angle=200*22/360; int panstep=1500; AF_Stepper motor(200, 1); void setup() { pinMode(button1, INPUT); //button as inputs pinMode(button2, INPUT); pinMode(button3, INPUT); pinMode(startStop, INPUT); pinMode(motorPin, OUTPUT); pinMode(shutter, OUTPUT); motor.setSpeed (4); for(int i=0; i<=panstep; i++); motor.step(angle*2, BACKWARD, INTERLEAVE); lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("DOLLYDUINO V 1.1"); lcd.setCursor(0,1); lcd.print("By ThePhilleBoy"); delay(3000); } void loop() { if(shutterVal > 1) { shutterVal = 0; } runTime1 = runTime; if(runTime == 0) { runTime1 = 10; } else { runTime1 = runTime; } bouncer1.update(); //update the buttons bouncer2.update(); bouncer3.update(); bouncer4.update(); int val1 = bouncer1.read(); //reads the value int val2 = bouncer2.read(); //and sets the new variables to it int val3 = bouncer3.read(); //So if button is pressed value = HIGH val4 = bouncer4.read(); if (show > 4) { //Number of menus show = 1; } if(val3 == HIGH) { //scroll through the different menus show = show + 1; //the show number indicates which menu we're in delay(delayTime * 5); } if(show == 1) { //if show is 1 the dollySpeed function is chosen/shown dollySpeed(val1, val2); //To change values in this menu with same buttons } //in all the menus else if(show == 2) { //if show is 2 delay function is chosen/shown on LCD dollyDelay(val1, val2); } else if(show == 3) { runningTime(val1, val2); } else if(show == 4) { //shows all the setting that are chosen settings(); if(val1 == HIGH || val2 == HIGH) { shutterVal = shutterVal + 1; delay(delayTime*3); } } if(val4 == HIGH && shutterVal == 0){ motorOn(); } if(val4 == LOW){ analogWrite(motorPin, LOW); } if(val4 == HIGH && shutterVal == 1) { motorOn(); lcd.setCursor(0,0); lcd.print("P:"); lcd.setCursor(4,0); lcd.print(shutterCount); } } void dollySpeed(int num1, int num2) { lcd.setCursor(0,0); //sets the startpoint of the text to (0,0) lcd.print("Dolly speed: "); //Writes "Dolly speed:" to the LCD if(num1 == HIGH) { //if num1 which is val1/button1 is pressed the speed dollySpeedNum = dollySpeedNum + 1; //increases with 1 delay(delayTime); //delay before next press, otherwise it would } //scroll fast as hell if(num2 == HIGH) { //if button2 is pressed decrease with 1 dollySpeedNum = dollySpeedNum - 1; delay(delayTime); } lcd.setCursor(0,1); //sets the starting point of the print lcd.print(dollySpeedNum); //prints to the start point (0,1) if(dollySpeedNum < 10) { lcd.setCursor(1, 1); lcd.print("% "); //makes a percent sign after the number } //the space after it is to hide numbers that might if(dollySpeedNum >= 10 && dollySpeedNum < 100) { //be shown from the last lcd.setCursor(2, 1); //menu that we scrolled from. lcd.print("% "); //if the speed if over 10 and less than 100 it moves } //the percentsign one step to the right. if(dollySpeedNum == 100) { //same here lcd.setCursor(3, 1); lcd.print("% "); } if(dollySpeedNum > 100) { //I wanted the speed to be in percent so I dollySpeedNum = 0; //have to limit the value of dollySpeedNum. } //if the value is higher than 100 it makes it to 0 if(dollySpeedNum < 0) { //and if it's lower than 0 it goes to 100. dollySpeedNum = 100; } } void dollyDelay(int but1, int but2) { int decimal; decimal = delayDolly%10; lcd.setCursor(0,0); lcd.print("Delay: "); if(but1 == HIGH) { delayDolly = delayDolly + 1; delay(delayTime); } if(but2 == HIGH) { delayDolly = delayDolly - 1; delay(delayTime); } lcd.setCursor(0,1); lcd.print(delayDolly/10); if(delayDolly < 10) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal); lcd.setCursor(3,1); lcd.print(" s "); } if(delayDolly >= 10 && delayDolly < 100) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal); lcd.setCursor(3,1); lcd.print(" s "); } if(delayDolly > 99) { lcd.setCursor(2, 1); lcd.print("."); lcd.setCursor(3,1); lcd.print(decimal); lcd.setCursor(4,1); lcd.print(" s "); } if(delayDolly > 999) { delayDolly = 0; } if(delayDolly < 0) { delayDolly = 999; } } void runningTime(int num1, int num2) { int decimal1; decimal1 = runTime%10; lcd.setCursor(0,0); lcd.print("Run time: "); if(num1 == HIGH) { runTime = runTime + 1; delay(delayTime); } if(num2 == HIGH) { runTime = runTime - 1; delay(delayTime); } lcd.setCursor(0,1); lcd.print(runTime/10); if(runTime < 10) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal1); lcd.setCursor(3,1); lcd.print(" s "); } if(runTime >= 10 && runTime < 100) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal1); lcd.setCursor(3,1); lcd.print(" s "); } if(runTime > 99) { lcd.setCursor(2, 1); lcd.print("."); lcd.setCursor(3,1); lcd.print(decimal1); lcd.setCursor(4,1); lcd.print(" s "); } if(runTime > 999) { runTime = 0; } if(runTime < 0) { runTime = 999; } } void settings() { int decimal1; int decimal2; decimal1 = runTime%10; decimal2 = delayTime%10; lcd.setCursor(0,0); lcd.print("S: "); lcd.setCursor(3,0); lcd.print(dollySpeedNum); if(dollySpeedNum < 10) { lcd.setCursor(4,0); lcd.print("% "); } if(dollySpeedNum >= 10 && dollySpeedNum < 100) { lcd.setCursor(5,0); lcd.print("% "); } if(dollySpeedNum == 100) { lcd.setCursor(6,0); lcd.print("% "); } lcd.setCursor(8,0); lcd.print("R: "); lcd.setCursor(11,0); lcd.print(runTime/10); if(runTime < 10) { lcd.setCursor(12, 0); lcd.print("."); lcd.setCursor(13,0); lcd.print(decimal1); lcd.setCursor(14,0); lcd.print("s"); } if(runTime >= 10 && runTime < 100) { lcd.setCursor(12,0); lcd.print("."); lcd.setCursor(13,0); lcd.print(decimal1); lcd.setCursor(14,0); lcd.print("s"); } if(runTime > 99) { lcd.setCursor(13,0); lcd.print("."); lcd.setCursor(14,0); lcd.print(decimal1); lcd.setCursor(15,0); lcd.print("s"); } lcd.setCursor(0,1); lcd.print("D: "); lcd.setCursor(3,1); lcd.print(delayDolly/10); if(delayDolly < 10) { lcd.setCursor(4, 1); lcd.print("."); lcd.setCursor(5,1); lcd.print(decimal1); lcd.setCursor(6,1); lcd.print("s"); } if(delayDolly >= 10 && delayDolly < 100) { lcd.setCursor(4,1); lcd.print("."); lcd.setCursor(5,1); lcd.print(decimal2); lcd.setCursor(6,1); lcd.print("s"); } if(delayDolly > 99) { lcd.setCursor(5, 1); lcd.print("."); lcd.setCursor(6,1); lcd.print(decimal1); lcd.setCursor(7,1); lcd.print("s"); } if(val4 == LOW) { if(shutterVal == 0) { lcd.setCursor(10,1); lcd.print("I=OFF"); } if(shutterVal == 1) { lcd.setCursor(10,1); lcd.print("I=ON "); } } } void motorOn () { int speedValue = map(dollySpeedNum, 0, 100, 0, 255); analogWrite(motorPin, speedValue); delay(runTime1*100); if(delayDolly > 0) { analogWrite(motorPin, LOW); picture(); shutterCount = shutterCount + 1; delay(delayDolly*100); } } void picture() { pinMode(shutter, HIGH); delay(50); pinMode(shutter, LOW); }
Все немного сделал ... осталось я так понимаю разобраться с логикой ... шаговый стал работать нормально подключил его через мотор шиелд ..... теперь осталось правильно прописать цепочку действий .. и как всегда вопрос )) как ??? я так полагаю надо правильно указать карту шаговика ... + прописать что бы меню Dolly speed выставлялось количество шагов(количество кадров), а в delayTime какая пауза между шагами ... Run time ненужен вот такой код получился. Код (Text): /* LCD screen for motorized camera dolly Code written by: Philip Sorri */ #include <AFMotor.h> #include <LiquidCrystal.h> //LCD library #include <Bounce.h> //debounce library int button3 = A5; //button pins int button2 =A4; int button1 = A3; int startStop = A2; int runTime1; int show = 1; //what menu to show int dollySpeedNum = 0; //number of the speed int delayTime = 100; //delay after pressedbutton (see the functions) int delayDolly = 0; //delay before running int runTime = 0; //time to run after delay int motorPin = 10; int angle=200*22/360; //задание числа шагов Ш.двигателя на один кадр, используемый Ш.двигатель совершает 200 шагов на полный оборот int panstep=1500; //задание числа снимков int shotPin=0; //определение контакта управления съемкой через USB int pause=1000; //определение паузы для процесса съемки int shot=0; //определение длительности сигнала USB 5В управления съемкой AF_Stepper motor(200, 1); int val4; int shutter = 1; int shutterCount = 0; int shutterVal = 0; Bounce bouncer1 = Bounce(button1, 15); //deblounce (button, milliseconds) Bounce bouncer2 = Bounce(button2, 15); Bounce bouncer3 = Bounce(button3, 15); Bounce bouncer4 = Bounce(startStop, 15); LiquidCrystal lcd(4, 5, 10, 11, 12, 13); //pins of the LCD to arduino void setup() { pinMode(button1, INPUT); //button as inputs pinMode(button2, INPUT); pinMode(button3, INPUT); pinMode(startStop, INPUT); pinMode(motorPin, OUTPUT); pinMode(shutter, OUTPUT); lcd.begin(16,2); lcd.setCursor(0,0); lcd.print("DOLLYDUINO V 1.1"); lcd.setCursor(0,1); lcd.print("By ThePhilleBoy"); delay(3000); } void loop() { if(shutterVal > 1) { shutterVal = 0; } runTime1 = runTime; if(runTime == 0) { runTime1 = 10; } else { runTime1 = runTime; } bouncer1.update(); //update the buttons bouncer2.update(); bouncer3.update(); bouncer4.update(); int val1 = bouncer1.read(); //reads the value int val2 = bouncer2.read(); //and sets the new variables to it int val3 = bouncer3.read(); //So if button is pressed value = HIGH val4 = bouncer4.read(); if (show > 4) { //Number of menus show = 1; } if(val3 == HIGH) { //scroll through the different menus show = show + 1; //the show number indicates which menu we're in delay(delayTime * 5); } if(show == 1) { //if show is 1 the dollySpeed function is chosen/shown dollySpeed(val1, val2); //To change values in this menu with same buttons } //in all the menus else if(show == 2) { //if show is 2 delay function is chosen/shown on LCD dollyDelay(val1, val2); } else if(show == 3) { runningTime(val1, val2); } else if(show == 4) { //shows all the setting that are chosen settings(); if(val1 == HIGH || val2 == HIGH) { shutterVal = shutterVal + 1; delay(delayTime*3); } } if(val4 == HIGH && shutterVal == 0){ motorOn(); } if(val4 == LOW){ analogWrite(motorPin, LOW); } if(val4 == HIGH && shutterVal == 1) { motorOn(); lcd.setCursor(0,0); lcd.print("P:"); lcd.setCursor(4,0); lcd.print(shutterCount); } } void dollySpeed(int num1, int num2) { lcd.setCursor(0,0); //sets the startpoint of the text to (0,0) lcd.print("Dolly speed: "); //Writes "Dolly speed:" to the LCD if(num1 == HIGH) { //if num1 which is val1/button1 is pressed the speed dollySpeedNum = dollySpeedNum + 1; //increases with 1 delay(delayTime); //delay before next press, otherwise it would } //scroll fast as hell if(num2 == HIGH) { //if button2 is pressed decrease with 1 dollySpeedNum = dollySpeedNum - 1; delay(delayTime); } lcd.setCursor(0,1); //sets the starting point of the print lcd.print(dollySpeedNum); //prints to the start point (0,1) if(dollySpeedNum < 10) { lcd.setCursor(1, 1); lcd.print("% "); //makes a percent sign after the number } //the space after it is to hide numbers that might if(dollySpeedNum >= 10 && dollySpeedNum < 100) { //be shown from the last lcd.setCursor(2, 1); //menu that we scrolled from. lcd.print("% "); //if the speed if over 10 and less than 100 it moves } //the percentsign one step to the right. if(dollySpeedNum == 100) { //same here lcd.setCursor(3, 1); lcd.print("% "); } if(dollySpeedNum > 100) { //I wanted the speed to be in percent so I dollySpeedNum = 0; //have to limit the value of dollySpeedNum. } //if the value is higher than 100 it makes it to 0 if(dollySpeedNum < 0) { //and if it's lower than 0 it goes to 100. dollySpeedNum = 100; } } void dollyDelay(int but1, int but2) { int decimal; decimal = delayDolly%10; lcd.setCursor(0,0); lcd.print("Delay: "); if(but1 == HIGH) { delayDolly = delayDolly + 1; delay(delayTime); } if(but2 == HIGH) { delayDolly = delayDolly - 1; delay(delayTime); } lcd.setCursor(0,1); lcd.print(delayDolly/10); if(delayDolly < 10) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal); lcd.setCursor(3,1); lcd.print(" s "); } if(delayDolly >= 10 && delayDolly < 100) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal); lcd.setCursor(3,1); lcd.print(" s "); } if(delayDolly > 99) { lcd.setCursor(2, 1); lcd.print("."); lcd.setCursor(3,1); lcd.print(decimal); lcd.setCursor(4,1); lcd.print(" s "); } if(delayDolly > 999) { delayDolly = 0; } if(delayDolly < 0) { delayDolly = 999; } } void runningTime(int num1, int num2) { int decimal1; decimal1 = runTime%10; lcd.setCursor(0,0); lcd.print("Run time: "); if(num1 == HIGH) { runTime = runTime + 1; delay(delayTime); } if(num2 == HIGH) { runTime = runTime - 1; delay(delayTime); } lcd.setCursor(0,1); lcd.print(runTime/10); if(runTime < 10) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal1); lcd.setCursor(3,1); lcd.print(" s "); } if(runTime >= 10 && runTime < 100) { lcd.setCursor(1, 1); lcd.print("."); lcd.setCursor(2,1); lcd.print(decimal1); lcd.setCursor(3,1); lcd.print(" s "); } if(runTime > 99) { lcd.setCursor(2, 1); lcd.print("."); lcd.setCursor(3,1); lcd.print(decimal1); lcd.setCursor(4,1); lcd.print(" s "); } if(runTime > 999) { runTime = 0; } if(runTime < 0) { runTime = 999; } } void settings() { int decimal1; int decimal2; decimal1 = runTime%10; decimal2 = delayTime%10; lcd.setCursor(0,0); lcd.print("S: "); lcd.setCursor(3,0); lcd.print(dollySpeedNum); if(dollySpeedNum < 10) { lcd.setCursor(4,0); lcd.print("% "); } if(dollySpeedNum >= 10 && dollySpeedNum < 100) { lcd.setCursor(5,0); lcd.print("% "); } if(dollySpeedNum == 100) { lcd.setCursor(6,0); lcd.print("% "); } lcd.setCursor(8,0); lcd.print("R: "); lcd.setCursor(11,0); lcd.print(runTime/10); if(runTime < 10) { lcd.setCursor(12, 0); lcd.print("."); lcd.setCursor(13,0); lcd.print(decimal1); lcd.setCursor(14,0); lcd.print("s"); } if(runTime >= 10 && runTime < 100) { lcd.setCursor(12,0); lcd.print("."); lcd.setCursor(13,0); lcd.print(decimal1); lcd.setCursor(14,0); lcd.print("s"); } if(runTime > 99) { lcd.setCursor(13,0); lcd.print("."); lcd.setCursor(14,0); lcd.print(decimal1); lcd.setCursor(15,0); lcd.print("s"); } lcd.setCursor(0,1); lcd.print("D: "); lcd.setCursor(3,1); lcd.print(delayDolly/10); if(delayDolly < 10) { lcd.setCursor(4, 1); lcd.print("."); lcd.setCursor(5,1); lcd.print(decimal1); lcd.setCursor(6,1); lcd.print("s"); } if(delayDolly >= 10 && delayDolly < 100) { lcd.setCursor(4,1); lcd.print("."); lcd.setCursor(5,1); lcd.print(decimal2); lcd.setCursor(6,1); lcd.print("s"); } if(delayDolly > 99) { lcd.setCursor(5, 1); lcd.print("."); lcd.setCursor(6,1); lcd.print(decimal1); lcd.setCursor(7,1); lcd.print("s"); } if(val4 == LOW) { if(shutterVal == 0) { lcd.setCursor(10,1); lcd.print("I=OFF"); } if(shutterVal == 1) { lcd.setCursor(10,1); lcd.print("I=ON "); } } } void motorOn () { motor.setSpeed (4); //скорость вращения Ш.двигателя 4 оборота в минуту motor.release(); //отключение питания Ш.двигателя для установки ракурса первого снимка int speedValue = map(dollySpeedNum,200, 100, 50, 4); analogWrite(motorPin, speedValue); delay(runTime1*100); if(delayDolly > 0) { analogWrite(motorPin, LOW); motor.step(speedValue, BACKWARD, INTERLEAVE); picture(); shutterCount = shutterCount + 1; delay(delayDolly*100); } } void picture() { pinMode(shutter, HIGH); delay(50); pinMode(shutter, LOW); }