прошу помощи в создании скетча для контроля 4я реле с 2х кнопок и вывод инфо о батареи на экран
- Войдите на сайт для отправки комментариев
Втр, 26/10/2021 - 22:31
Друзья всем добрый день или вечер)
прошу в помощи объединения двух скетч и помочь и сказать как сделать рабочий скетч:
задачи-
1- надо контролировать 3 реле с одной кнопки (при нажатии кнопки 1- включении и выключение реле 1 и далее включение и выключение реле 2 и далее реле 3)
2- надо контролировать реле 4 с кнопки 2 (вкл -выкл)- независимо от задачи 1
3- надо выводить на OLED12864 i2c инфо вольтметр и состояние задачи
01 | //скетч 1- вкл и выкл реле 1-4 по кнопкам 1-2 |
02 | boolean btn1; |
03 | boolean btn2; |
04 | boolean btn1_flag = 0; |
05 | boolean btn2_flag = 0; |
06 | unsigned long last_press; |
07 | byte press_count = 0; |
08 | boolean flag = 0; |
09 |
10 | void 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 | } |
23 | void 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 |
11 | Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); |
12 |
13 |
14 |
15 | int analogInput = A0; |
16 | float vin = 0; |
17 |
18 | void setup () { |
19 | Serial .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 | } |
26 | display.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 |
38 | void loop () { |
39 |
40 | vin = float (analogRead(analogInput))/18.25; |
41 | display.clearDisplay(); |
42 | display.setTextSize(3); // Draw 2X-scale text |
43 | display.setTextColor(SSD1306_WHITE); // Draw white text |
44 | display.setCursor(4, 0); |
45 | display.println( "V:" ); |
46 | display.setCursor(54, 0); |
47 | display.println(vin ); |
48 | display.setCursor(4, 40); |
49 | display.println( "MODE 1" ); |
50 | delay (2000); |
51 | display.display(); |
52 |
53 | } |
при объединении двух скетч в один кнопки не работают (то есть реле)
прошу намекнуть куда копать ? спасибо что прочитали и надеюсь на пинок который откроет мне глаза)
Глаза откроют только знания, которых (судя по всему) у Вас нет. Если нужно «просто сделать» - обратитесь в раздел «Ищу исполнителя». Если самому разобраться, то:
1. Где Ваш объединённый скетч?
Это как минимум.
Спасибо за ответ - обращусь в ищу исполнителя так как надо сделать еще пару задач - на которые я точно не буду способен)))) спасибо тему можно закрывать)