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