소스 검색

#comit added readme and comments

faqmoroz 10 달 전
부모
커밋
e890e7b66a
3개의 변경된 파일164개의 추가작업 그리고 134개의 파일을 삭제
  1. 1 0
      readme.md
  2. 0 134
      timer.ino
  3. 163 0
      timer/timer.ino

+ 1 - 0
readme.md

@@ -0,0 +1 @@
+Простой таймер для фотоувеличителя. Используется клон arduino nano, модуль аналоговых кнопок (4 кнопки), реле и секторный экран.

+ 0 - 134
timer.ino

@@ -1,134 +0,0 @@
-#define CLK 2
-#define DIO 3
-#define RELEY_PIN 10
-#include "GyverTM1637.h"
-const int DISP_PIN = A1;
-
-int val = 0;
-int timer = 1;
-bool relayOpened = false;
-GyverTM1637 disp(CLK, DIO);
-void setup() {
-  // put your setup code here, to run once:  
-  pinMode(RELEY_PIN, OUTPUT);
-  closeRelay();
-  Serial.begin(9600);
-  disp.clear();
-  disp.brightness(0);
-}
-
-void loop() {
-  // put your main code here, to run repeatedly: 
-  val = analogRead(DISP_PIN);
-  switch (buttonFromValue(val))
-  {
-    case 1:
-      addTimer();
-    break;
-    case 2:
-      declineTimer();
-    break;
-     case 3:
-      shoot();
-    break;
-    case 4:
-      workingLight();
-    break;
-    
-  }
- disp.displayInt(timer); 
-}
-
-//Открывается по низкому сигналу, com с NO
-void openRelay()
-{
-  digitalWrite(RELEY_PIN, LOW);
-  relayOpened = true;
-}
-
-//Закрываясь замыкает com с NC
-void closeRelay(){
-  digitalWrite(RELEY_PIN, HIGH);
-  relayOpened = false;
-}
-
-void addTimer()
-{
-    delay(500);
-    if (buttonFromValue(analogRead(DISP_PIN)) == 1)
-    {
-      timer = timer * 2;  
-    }
-    else
-    {
-      timer++;  
-    }
-}
-
-void declineTimer()
-{
-    if(timer > 1)
-    {
-      delay(500);
-      if (buttonFromValue(analogRead(DISP_PIN)) == 2)
-      {
-       timer = timer / 2;  
-      }
-      else if (timer>1)
-      {
-        timer--;  
-      }  
-    }
-}
-
-void shoot()
-{
-  closeRelay();
-  int ms = timer * 1000;
-   delay(1000);
-   openRelay();
-   while (ms>0)
-   {
-      delay(1000);
-      ms = ms - 1000;
-      disp.displayInt(ms/1000); 
-   }
-   closeRelay();
-  
-}
-
-void workingLight()
-{
-  if ( relayOpened == true )
-  {
-    closeRelay();
-  }
-  else 
-  {
-    openRelay();
-  } 
-  delay(500);
-    
-}
-
-byte buttonFromValue(int analogValue)
-{
-  if (analogValue>950)
-  {
-    return 4;  
-  }
-  if (analogValue > 713 && analogValue <  950)
-  { 
-    return 3;
-  }
-  if (analogValue > 506 && analogValue < 713)
-  {
-    return 2;  
-  }
-  if (analogValue > 200 && analogValue < 506)
-  {
-    return 1;  
-  }
-  return 0;
-  
-}

+ 163 - 0
timer/timer.ino

@@ -0,0 +1,163 @@
+#define CLK 2
+#define DIO 3
+#define RELEY_PIN 10
+#include "GyverTM1637.h"
+const int DISP_PIN = A1;
+
+/**Переменная для хранения значения аналогового входа A1 */
+int val = 0;
+/**Переменная, для хранения заданного значения таймера */
+int timer = 1;
+/**Переменная, для хранения статуса реле*/
+bool relayOpened = false;
+/**Настройка сегментного экрана */
+GyverTM1637 disp(CLK, DIO);
+
+/**Метод запускающийся при старте */
+void setup() {
+  // put your setup code here, to run once:  
+  pinMode(RELEY_PIN, OUTPUT);
+  closeRelay();
+  Serial.begin(9600);
+  disp.clear();
+  disp.brightness(0);
+}
+
+/**Метод работы платы */
+void loop() {
+  // put your main code here, to run repeatedly: 
+  val = analogRead(DISP_PIN);
+  switch (buttonFromValue(val))
+  {
+    case 1:
+      addTimer();
+    break;
+    case 2:
+      declineTimer();
+    break;
+     case 3:
+      shoot();
+    break;
+    case 4:
+      workingLight();
+    break;
+    
+  }
+ disp.displayInt(timer); 
+}
+
+/** Открыть реле - подать значение для соединения выводов COM с NO 
+ * Прим.: в моем случае использовалось реле низкого уровня, поэтому 
+ * подается низкий логический уровень
+*/
+void openRelay()
+{
+  digitalWrite(RELEY_PIN, LOW);
+  relayOpened = true;
+}
+
+/**Закрыть реле - соединяет выводы COM с NC */
+void closeRelay(){
+  digitalWrite(RELEY_PIN, HIGH);
+  relayOpened = false;
+}
+
+/**Добавить значение таймеру - может не лучшим образом проверяет не было
+ * ли нажатие на кнопку долгим, при долгом умножает значение таймера
+ * (удобно для фотоувеличителя как изменение экспозиции на один стоп),
+ * при коротком прибавляет единицу.
+ */
+void addTimer()
+{
+    delay(500);
+    if (buttonFromValue(analogRead(DISP_PIN)) == 1)
+    {
+      timer = timer * 2;  
+    }
+    else
+    {
+      timer++;  
+    }
+}
+
+/**Убавить значение таймера - при коротком нажатии убавляет единицу, 
+ * при длинном делит на двое. Минимальное значение таймера - 1.
+ */
+void declineTimer()
+{
+    if(timer > 1)
+    {
+      delay(500);
+      if (buttonFromValue(analogRead(DISP_PIN)) == 2)
+      {
+       timer = timer / 2;  
+      }
+      else if (timer>1)
+      {
+        timer--;  
+      }  
+    }
+}
+
+/**Функция активации фотоувеличителя на заданное таймером время
+ * Предварительно закрывает реле, если фотоувеличитель находился в пилотном режиме
+ */
+void shoot()
+{
+  closeRelay();
+  int ms = timer * 1000;
+   delay(1000);
+   openRelay();
+   while (ms>0)
+   {
+      delay(1000);
+      ms = ms - 1000;
+      disp.displayInt(ms/1000); 
+   }
+   closeRelay();
+  
+}
+
+/**Пероключатель пилотного режима фотоувеличителя, меняет состояние реле
+ * на противоположное
+ */
+void workingLight()
+{
+  if ( relayOpened == true )
+  {
+    closeRelay();
+  }
+  else 
+  {
+    openRelay();
+  } 
+  delay(500);
+    
+}
+
+/**Функция получения номера нажатой кнопки, т.к.
+ * кнопки аналоговые, сигнал подвержен помехам, поэтому каждому
+ * значению нажатой кнопки задаеться диапазон измеренного значения на 
+ * аналоговом входе
+ */
+byte buttonFromValue(int analogValue)
+{
+  if (analogValue>950)
+  {
+    return 4;  
+  }
+  if (analogValue > 713 && analogValue <  950)
+  { 
+    return 3;
+  }
+  if (analogValue > 506 && analogValue < 713)
+  {
+    return 2;  
+  }
+  if (analogValue > 200 && analogValue < 506)
+  {
+    return 1;  
+  }
+  return 0;
+  
+}