
Вот весь код который я написал, не судите строго мой первый блин:
- Код: Выделить всё • Развернуть
- #include <LiquidCrystal.h>
 LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
 int TestPin = 03; // кнопка тест на 03 пине
 int StartPin = 02; // кнопка Start
 int CameraPin = 13; // пин на камеру
 int PrivodPin = 11; // пин на привод
 int FlashPin = 12; // пин на вспышку
 int m=0; // переменные для меню
 int CamT=0; // переменная для интервала камеры
 int PrivT1=100; // для импульса 2
 int PrivT2=0; // для импульса 2
 int PrivT3=0; // для импульса 3
 int PrivT4=0;
 int FlashT=0;
 int flag=0; // кнопка тест
 long previousMillis = 0;
 long interval = 5000;
 byte key(){
 int val = analogRead(0);
 if (val < 50) return 5; // в право
 else if (val < 150) return 3; // в верх // Meny
 else if (val < 350) return 4; // в низ // Meny
 else if (val < 500) return 2; // в лево
 else if (val < 800) return 1; // select
 else return 0;
 }
 // --- конец функции кнопок
 void setup() {
 pinMode(TestPin, INPUT); // кнопка Тест вход
 pinMode(StartPin, INPUT); // кнопка Тест вход
 pinMode(CameraPin, OUTPUT); // затвор камеры выход
 pinMode(PrivodPin, OUTPUT); // реле привода выход
 pinMode(FlashPin, OUTPUT); // реле вспышки выход
 lcd.begin(16, 2); // инициализация экрана
 lcd.clear ();
 }
 void loop(){
 /////////// кнопка Test с одиночным срабатыванием
 if(TestPin==HIGH&&flag==0)
 { // поставить небольшую задержку
 digitalWrite(PrivodPin, HIGH);
 delay (100);
 digitalWrite(PrivodPin, LOW);
 flag=1;
 }
 if(TestPin==LOW&&flag==1)
 {
 flag=0;
 }
 ///////////// КонеЦ /////////////////////////
 /////////// Кнопка Start с одиночным срабатыванием
 if(StartPin==HIGH&&flag==0)
 {
 int x = 500;
 int x1= ((x + PrivT2)+100);
 int x2= ((x1 + PrivT3)+100);
 int x3= ((x2 + PrivT4)+100);
 int y = (x+CamT);
 int z = (y+50);
 delay (x); // поставить небольшую задержку
 digitalWrite(PrivodPin, HIGH); // вкл 1-ый импульс
 delay (100);
 digitalWrite(PrivodPin, LOW); // выкл
 delay (x1);
 digitalWrite(PrivodPin, HIGH); // вкл 2-ой импульс
 delay (100);
 digitalWrite(PrivodPin, LOW); // выкл
 delay (x2);
 digitalWrite(PrivodPin, HIGH); // вкл 3-ий импульс
 delay (100);
 digitalWrite(PrivodPin, LOW); // выкл
 delay (x3);
 digitalWrite(PrivodPin, HIGH); // вкл 4-ый импульс
 delay (100);
 digitalWrite(PrivodPin, LOW);
 delay (y);
 digitalWrite(CameraPin, HIGH); // вкл Фотоаппарат
 delay (100);
 digitalWrite(CameraPin, LOW);
 delay (y);
 digitalWrite(FlashPin, HIGH); // вкл Вспышка
 delay (FlashT);
 digitalWrite(FlashPin, LOW);
 }
 if(TestPin==LOW&&flag==1)
 {
 flag=0;
 }
 /////////////
 unsigned long currentMillis = millis(); //обработка кнопки 4 в низ
 if ((key()==4)==HIGH)
 {
 m++;
 lcd.clear ();
 previousMillis = currentMillis; // если кнопка была нажата сбросить счетчик автовозврата к главному экрану
 delay(100);
 if ((key()==4)==LOW)
 {
 lcd.clear ();
 }
 if (m>4) // если уровень больше 3
 {
 m=0; // то вернуться к началу
 }
 }
 if ((key()==3)== HIGH) // Обработка нажатия кнопки PREV
 {
 m--;
 previousMillis = currentMillis;
 delay (100);
 if ((key()==3)== LOW)
 {
 lcd.clear ();
 }
 if (m<0)
 {
 m=4;
 }
 }
 // тут код для уменьшения значений
 // аналогичен коду увеличения если нужно
 
 //Вывод меню
 //Описание экранов меню
 if (m==0)
 {
 lcd.setCursor(0, 0);
 lcd.print("1.Camera");
 lcd.setCursor(0, 1);
 lcd.print("Tm:-");
 lcd.print(CamT/10); // переменная Интервал камеры
 lcd.setCursor(7, 1);
 lcd.print("msec");
 if(key()==5)CamT+=5; // управление переменной кнопка 5 + 5мсек
 if(key()==3)CamT-=5; // управление переменной кнопка 3 - 5мсек
 if(CamT < 10)CamT=995;
 if(CamT > 995)CamT=10;
 }
 else if (m==1)
 {
 lcd.setCursor(0, 0);
 lcd.print("2.*Impuls-2");
 lcd.setCursor(0, 1);
 lcd.print("Tm:-");
 lcd.print(PrivT2/10);
 lcd.setCursor(7, 1);
 lcd.print(" msec");
 if(key()==5)PrivT2+=5; // управление переменной кнопка 5 + 5мсек
 if(key()==3)PrivT2-=5; // управление переменной кнопка 3 - 5мсек
 if(PrivT2 < 0)PrivT2=295;
 if(PrivT2 > 295)PrivT2=0;
 }
 else if (m==2)
 {
 lcd.setCursor(0, 0);
 lcd.print("3.*Impuls-3");
 lcd.setCursor(0, 1);
 lcd.print("Tm:-");
 lcd.print(PrivT3/10);
 lcd.setCursor(7, 1);
 lcd.print("msec");
 if(key()==5)PrivT3+=5; // управление переменной кнопка 5 + 5мсек
 if(key()==3)PrivT3-=5; // управление переменной кнопка 3 - 5мсек
 if(PrivT3 < 0)PrivT3=295;
 if(PrivT3 > 295)PrivT3=0;
 }
 else if (m==3)
 {
 lcd.setCursor(0, 0);
 lcd.print("4.*Impuls-4");
 lcd.setCursor(0, 1);
 lcd.print("Tm:-");
 lcd.print(PrivT4/10);
 lcd.setCursor(7, 1);
 lcd.print("msec");
 if(key()==5)PrivT4+=5; // управление переменной кнопка 5 + 5мсек
 if(key()==3)PrivT4-=5; // управление переменной кнопка 3 - 5мсек
 if(PrivT4 < 0)PrivT3=295;
 if(PrivT4 > 295)PrivT3=0;
 }
 else if (m==4)
 {
 lcd.setCursor(0, 0);
 lcd.print("5.***Flash***");
 lcd.setCursor(0, 1);
 lcd.print("Tm:-");
 lcd.print(FlashT);
 lcd.setCursor(7, 1);
 lcd.print("msec");
 if(key()==5)FlashT+=5; // управление переменной кнопка 5 + 5мсек
 if(key()==3)FlashT-=5; // управление переменной кнопка 3 - 5мсек
 if(FlashT < 0)FlashT=95;
 if(FlashT > 95)FlashT=0;
 }
 
 //Проверка автовозврата
 if(currentMillis - previousMillis > interval && m !=0) //Если счетчик
 {
 previousMillis = currentMillis; //достиг интервала
 lcd.clear();
 m=0; //то отобразить главный экран
 }
 }
 
А вот то что меня интересует, как реализовать сам процесс импульсов и интервалов, у меня получилось вот так но не работает. И с условием для импульсов привода если какой либо интервал =0, следующих импульсов нет, вообще не могу реализовать, че-то туплю безобразно. Вот этот отрывок кода:
- Код: Выделить всё • Развернуть
- if(StartPin==HIGH&&flag==0)
 {
 int x = 500;
 int x1= ((x + PrivT2)+100);
 int x2= ((x1 + PrivT3)+100);
 int x3= ((x2 + PrivT4)+100);
 int y = (x+CamT);
 int z = (y+50);
 delay (x); // поставить небольшую задержку
 digitalWrite(PrivodPin, HIGH); // вкл 1-ый импульс
 delay (100);
 digitalWrite(PrivodPin, LOW); // выкл
 delay (x1);
 digitalWrite(PrivodPin, HIGH); // вкл 2-ой импульс
 delay (100);
 digitalWrite(PrivodPin, LOW); // выкл
 delay (x2);
 digitalWrite(PrivodPin, HIGH); // вкл 3-ий импульс
 delay (100);
 digitalWrite(PrivodPin, LOW); // выкл
 delay (x3);
 digitalWrite(PrivodPin, HIGH); // вкл 4-ый импульс
 delay (100);
 digitalWrite(PrivodPin, LOW);
 delay (y);
 digitalWrite(CameraPin, HIGH); // вкл Фотоаппарат
 delay (100);
 digitalWrite(CameraPin, LOW);
 delay (y);
 digitalWrite(FlashPin, HIGH); // вкл Вспышка
 delay (FlashT);
 digitalWrite(FlashPin, LOW);
 }
 if(TestPin==LOW&&flag==1)
 {
 flag=0;
 }
 /////////////

