Замучился я с этим кодом, ничего у меня не получается помогите. Я делаю устройство для управления Фотокамерой, приводом, и вспышкой. Вот схема как я вижу работу данного устройства:
Вот весь код который я написал, не судите строго мой первый блин:
Код:
#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;
}
/////////////