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

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

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

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

задачи-

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

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

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

//скетч 1- вкл и выкл реле 1-4 по кнопкам 1-2
boolean btn1;
boolean btn2;
boolean btn1_flag = 0;
boolean btn2_flag = 0;
unsigned long last_press;
byte press_count = 0;
boolean flag = 0;

void setup() {
  pinMode(2, INPUT_PULLUP);   // сюда подключена кнопка
  pinMode(3, INPUT_PULLUP);
  Serial.begin(9600);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  digitalWrite (5, 0);
  digitalWrite (6, 0);
  digitalWrite (7, 0);
  digitalWrite (8, 0);
  }
void loop() {
  btn1 = !digitalRead(2); // считать текущее положение кнопки
     if (btn1 == 1 && btn1_flag == 0 && millis() - last_press > 50) {
    btn1_flag = 1;
     if (press_count > 3){
        press_count = 0;
        }
         press_count ++;
        if (press_count == 1) {
   Serial.println("realy 1");
    digitalWrite(5, 1);
    digitalWrite(6, 1);
    digitalWrite(7, 1);
   
        }
        if (press_count == 2) {
   Serial.println("relay 2");
    digitalWrite(5, 0);
    digitalWrite(6, 1);
    digitalWrite(7, 1);
    
        }
      if (press_count == 3) {
   Serial.println("relay 3");
     digitalWrite(5, 1);
     digitalWrite(6, 0);
     digitalWrite(7, 1);
     
        }
        if (press_count == 4) {
   Serial.println("relay 4");
     digitalWrite(5, 1);
     digitalWrite(6, 1);
     digitalWrite(7, 0);
     
        }
        if (press_count == 5) {
   Serial.println("relay 5");
     digitalWrite(5, 1);
     digitalWrite(6, 1);
     digitalWrite(7, 1);
     
        }
    last_press = millis();
  }
  if (btn1 == 0 && btn1_flag == 1 && press_count >= 0 && millis() - last_press > 50) {
   btn1_flag = 0; 
   last_press = millis();
  }

  btn2 = !digitalRead(3);  // считать текущее положение кнопки

  if (btn2 == 1 && btn2_flag == 0 && millis() - last_press > 50) {  // если кнопка НАЖАТА, до этого была была ОТПУЩЕНА
    btn2_flag = 1;                    // запоминаем, что нажимали кнопку
    flag = !flag;                     // инвертируем флажок
    last_press = millis();            // запоминаем время

    digitalWrite(8, flag);    // подаём сигнал на пин реле / светодиода
  }
  if (btn2 == 0 && btn2_flag == 1) {  // если кнопка ОТПУЩЕНА, и до этого была НАЖАТА
    btn2_flag = 0;                    // запоминаем, что отпустили кнопку
  }
}

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

//при включении лого- далее вольтметр и состояние задачи 
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);



int analogInput = A0;
float vin = 0;

void setup() {
Serial.begin(9600);

  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
display.display();
  delay(2000); // Pause for 3 seconds
  display.clearDisplay();
  display.invertDisplay(true);
  delay(1000);
  display.invertDisplay(false);
  delay(1000);
  display.clearDisplay();

}


void loop() {

vin = float(analogRead(analogInput))/18.25;
display.clearDisplay();
display.setTextSize(3);             // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);        // Draw white text
display.setCursor(4, 0);
display.println("V:");
display.setCursor(54, 0);
display.println(vin );
display.setCursor(4, 40);
display.println("MODE 1");
delay (2000);
display.display();

}

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

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

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

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

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

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

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

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