прошу помощи в создании скетча для контроля 4я реле с 2х кнопок и вывод инфо о батареи на экран

mitofun
Offline
Зарегистрирован: 04.10.2021

Друзья всем добрый день или вечер)

прошу в помощи объединения двух скетч и помочь и сказать как сделать рабочий скетч:

задачи-

1- надо контролировать 3 реле с одной кнопки (при нажатии кнопки 1- включении и выключение реле 1 и далее включение и выключение реле 2 и далее реле 3)

2- надо контролировать реле 4 с кнопки 2 (вкл -выкл)- независимо от задачи 1

3- надо выводить на OLED12864 i2c инфо вольтметр и состояние задачи 

01//скетч 1- вкл и выкл реле 1-4 по кнопкам 1-2
02boolean btn1;
03boolean btn2;
04boolean btn1_flag = 0;
05boolean btn2_flag = 0;
06unsigned long last_press;
07byte press_count = 0;
08boolean flag = 0;
09 
10void setup() {
11  pinMode(2, INPUT_PULLUP);   // сюда подключена кнопка
12  pinMode(3, INPUT_PULLUP);
13  Serial.begin(9600);
14  pinMode(5, OUTPUT);
15  pinMode(6, OUTPUT);
16  pinMode(7, OUTPUT);
17  pinMode(8, OUTPUT);
18  digitalWrite (5, 0);
19  digitalWrite (6, 0);
20  digitalWrite (7, 0);
21  digitalWrite (8, 0);
22  }
23void loop() {
24  btn1 = !digitalRead(2); // считать текущее положение кнопки
25     if (btn1 == 1 && btn1_flag == 0 && millis() - last_press > 50) {
26    btn1_flag = 1;
27     if (press_count > 3){
28        press_count = 0;
29        }
30         press_count ++;
31        if (press_count == 1) {
32   Serial.println("realy 1");
33    digitalWrite(5, 1);
34    digitalWrite(6, 1);
35    digitalWrite(7, 1);
36    
37        }
38        if (press_count == 2) {
39   Serial.println("relay 2");
40    digitalWrite(5, 0);
41    digitalWrite(6, 1);
42    digitalWrite(7, 1);
43     
44        }
45      if (press_count == 3) {
46   Serial.println("relay 3");
47     digitalWrite(5, 1);
48     digitalWrite(6, 0);
49     digitalWrite(7, 1);
50      
51        }
52        if (press_count == 4) {
53   Serial.println("relay 4");
54     digitalWrite(5, 1);
55     digitalWrite(6, 1);
56     digitalWrite(7, 0);
57      
58        }
59        if (press_count == 5) {
60   Serial.println("relay 5");
61     digitalWrite(5, 1);
62     digitalWrite(6, 1);
63     digitalWrite(7, 1);
64      
65        }
66    last_press = millis();
67  }
68  if (btn1 == 0 && btn1_flag == 1 && press_count >= 0 && millis() - last_press > 50) {
69   btn1_flag = 0;
70   last_press = millis();
71  }
72 
73  btn2 = !digitalRead(3);  // считать текущее положение кнопки
74 
75  if (btn2 == 1 && btn2_flag == 0 && millis() - last_press > 50) {  // если кнопка НАЖАТА, до этого была была ОТПУЩЕНА
76    btn2_flag = 1;                    // запоминаем, что нажимали кнопку
77    flag = !flag;                     // инвертируем флажок
78    last_press = millis();            // запоминаем время
79 
80    digitalWrite(8, flag);    // подаём сигнал на пин реле / светодиода
81  }
82  if (btn2 == 0 && btn2_flag == 1) {  // если кнопка ОТПУЩЕНА, и до этого была НАЖАТА
83    btn2_flag = 0;                    // запоминаем, что отпустили кнопку
84  }
85}

вот второй скетч

01//при включении лого- далее вольтметр и состояние задачи
02#include <SPI.h>
03#include <Wire.h>
04#include <Adafruit_GFX.h>
05#include <Adafruit_SSD1306.h>
06 
07#define SCREEN_WIDTH 128 // OLED display width, in pixels
08#define SCREEN_HEIGHT 64 // OLED display height, in pixels
09#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
10#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
11Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
12 
13 
14 
15int analogInput = A0;
16float vin = 0;
17 
18void setup() {
19Serial.begin(9600);
20 
21  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
22  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
23    Serial.println(F("SSD1306 allocation failed"));
24    for(;;); // Don't proceed, loop forever
25  }
26display.display();
27  delay(2000); // Pause for 3 seconds
28  display.clearDisplay();
29  display.invertDisplay(true);
30  delay(1000);
31  display.invertDisplay(false);
32  delay(1000);
33  display.clearDisplay();
34 
35}
36 
37 
38void loop() {
39 
40vin = float(analogRead(analogInput))/18.25;
41display.clearDisplay();
42display.setTextSize(3);             // Draw 2X-scale text
43display.setTextColor(SSD1306_WHITE);        // Draw white text
44display.setCursor(4, 0);
45display.println("V:");
46display.setCursor(54, 0);
47display.println(vin );
48display.setCursor(4, 40);
49display.println("MODE 1");
50delay (2000);
51display.display();
52 
53}

при объединении двух скетч в один кнопки не работают (то есть реле)

прошу намекнуть куда копать ? спасибо что прочитали и надеюсь на пинок который откроет мне глаза)

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Глаза откроют только знания, которых (судя по всему) у Вас нет. Если нужно «просто сделать» - обратитесь в раздел «Ищу исполнителя». Если самому разобраться, то:

1. Где Ваш объединённый скетч?

Это как минимум. 

mitofun
Offline
Зарегистрирован: 04.10.2021

Спасибо за ответ - обращусь в ищу исполнителя так как надо сделать еще пару задач - на которые я точно не буду способен)))) спасибо тему можно закрывать)