#26 2025-02-24 20:32:33

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

dimich пише:

Для одного реле

bool input1_prev { false };

// в loop():

bool input = (digitalRead(INPUT1)==LOW);
if (input != input1_prev) {
    if (input) {
        noInterrupts();
        relay1_time_left = relay1_delay_time;
        digitalWrite(j1, HIGH);
        Interrupts();
    }
    digitalWrite(led, input); // тут один led на 4 канала?
    input1_prev = input;
}

Щоб не дублювати код для кожного канала, зробіть масив.
Викиньте "while(1) {...}" із loop().
Можна легко обійтись без отого FlexiTimer2, воно тільки ускладнює програму.

А краще найміть спеціаліста, в якого є час і натхнення, нехай напише вам нормальний код.

не підходить ця частина коду,помилка коомпіляції для ардуіно про міні,ще щось можете порадити?

Неактивний

#27 2025-02-24 20:55:28

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 316

Re: Потрібна допомога в редагуванні скетчу для реле часу

Maikl123 пише:

не підходить ця частина коду,помилка коомпіляції для ардуіно про міні,ще щось можете порадити?

Яка саме помилка? Скопіюйте сюди її повний текст.
Куди і замість якої частини цю частину вставили? Який вигляд має loop() після зміни?

Неактивний

#28 2025-02-24 20:56:39

jokeer
Гість

Re: Потрібна допомога в редагуванні скетчу для реле часу

якщо помилка компіляції, значить щось не так. що саме не так - написано в тексті помилки. сорян, звідси не видно wink

#29 2025-02-24 20:57:58

jokeer
Гість

Re: Потрібна допомога в редагуванні скетчу для реле часу

я підозрюю що хтось неакуратно вирізав while (1)

#30 2025-02-24 21:16:45

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

dimich пише:

Яка саме помилка? Скопіюйте сюди її повний текст.
Куди і замість якої частини цю частину вставили? Який вигляд має loop() після зміни?

/*---Segment Display Screen----
--A--
F---B
--G--
E---C
--D--
__  __   __  __
|__||__|.|__||__|
|__||__|'|__||__|
----------------------*/   


#include "FlexiTimer2.h"
#define uchar unsigned char
#define uint  unsigned int

int display_dat;
int key_value;

const int led = 13;

//Pin connected to latch of Digital Tube Module
const int latch = 8;
//Pin connected to click of Digital Tube Module
const int clock = 9;
//Pin connected to data of Digital Tube Module
const int data = 7;

const int K1 = 2;
const int K2 = 3;
const int K3 = 4;
const int K4 = 5;

const int INPUT1 = A1;
const int INPUT2 = A0;
const int INPUT3 = A3;
const int INPUT4 = A2;

const int j1 = 10;
const int j2 = 11;
const int j3 = 12;
const int j4 = 6;

int relay1_delay_time = 5;//1-9999 seconds,Modify the number change the delay time
int relay2_delay_time = 5;//1-9999 seconds,Modify the number change the delay time
int relay3_delay_time = 5;//1-9999 seconds,Modify the number change the delay time
int relay4_delay_time = 5;//1-9999 seconds,Modify the number change the delay time

int relay1_time_left;
int relay2_time_left;
int relay3_time_left;
int relay4_time_left;

int relay1_display;
int relay2_display;
int relay3_display;
int relay4_display;



/*       NO.:0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 23 24 25 26 27 28     
/*Character :0,1,2,3,4,5,6,7,8,9,A, b, C, c, d, E, F, H, h, L, n, N, o, P, r, t, U, -,  ,*/
uchar  TUBE_SEG[] =
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa7,0xa1,0x86,0x8e,0x89,0x8b,0xc7,0xab,0xc8,0xa3,0x8c,0xaf,0x87,0xc1,0xbf,0xff};//Common anode Digital Tube Character Gallery

uchar TUBE_NUM[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//Tuble bit number

uchar dat_buf[8];

//***********************************************
// dat : Data to be displayed
// com_num :  Digital Tube Common
//***********************************************
uchar dat;
uchar com_num;
void TubeDisplayOneBit()
{
  uchar tube_dat;
  uchar bit_num;
   tube_dat = TUBE_SEG[dat]; //Common Cathode Digital Tube,bit negated
   bit_num = ~TUBE_NUM[com_num];
 
    //ground latchPin and hold low for as long as you are transmitting
     digitalWrite(latch, LOW);
     
     shiftOut(data, clock, MSBFIRST, bit_num);
     shiftOut(data, clock, MSBFIRST, tube_dat);   
     
     //return the latch pin high to signal chip that it
     //no longer needs to listen for information
     digitalWrite(latch, HIGH);
}

uchar OneSecondCnt;
void TubeDisplay4Bit(void)
{
  if(com_num<3) com_num ++;else com_num=0;
  dat = dat_buf[com_num];
  TubeDisplayOneBit();
 
  OneSecondCnt--;
  if(OneSecondCnt==0)
  {
    OneSecondCnt = 1000;
    if(relay1_time_left>0){relay1_time_left--; relay1_display = relay1_time_left;} else {digitalWrite(j1, LOW);relay1_display = relay1_delay_time;}
    if(relay2_time_left>0){relay2_time_left--; relay2_display = relay2_time_left;} else {digitalWrite(j2, LOW);relay2_display = relay2_delay_time;}
    if(relay3_time_left>0){relay3_time_left--; relay3_display = relay3_time_left;} else {digitalWrite(j3, LOW);relay3_display = relay3_delay_time;}
    if(relay4_time_left>0){relay4_time_left--; relay4_display = relay4_time_left;} else {digitalWrite(j4, LOW);relay4_display = relay4_delay_time;}
   
  }
 
  if(key_value==0) display_dat = relay1_display;
  else if(key_value==1) display_dat = relay2_display;
  else if(key_value==2) display_dat = relay3_display; 
  else  display_dat = relay4_display;
 
   dat_buf[0] = display_dat/1000;
   display_dat = display_dat%1000;
   dat_buf[1] = display_dat/100;
   display_dat = display_dat%100;
   dat_buf[2] = display_dat/10;
   dat_buf[3] = display_dat%10;
 
}

void setup() {
   //set pins to output because they are addressed in the main loop
   pinMode(led, OUTPUT);
   
   
   pinMode(latch, OUTPUT);
   pinMode(clock, OUTPUT);
   pinMode(data, OUTPUT);
   
   pinMode(K1, INPUT);
   pinMode(K2, INPUT);
   pinMode(K3, INPUT);
   pinMode(K4, INPUT);
   
   pinMode(INPUT1, INPUT);
   pinMode(INPUT2, INPUT);
   pinMode(INPUT3, INPUT);
   pinMode(INPUT4, INPUT);
   
   pinMode(j1, OUTPUT);
   pinMode(j2, OUTPUT);
   pinMode(j3, OUTPUT);
   pinMode(j4, OUTPUT);
   
  FlexiTimer2::set(5, 1.0/1000, TubeDisplay4Bit); // call every 5ms "ticks"
  FlexiTimer2::start();
 
  digitalWrite(j1, LOW);
  digitalWrite(j2, LOW);
  digitalWrite(j3, LOW);
  digitalWrite(j4, LOW);
 
  digitalWrite(INPUT1, HIGH);
  digitalWrite(INPUT2, HIGH);
  digitalWrite(INPUT3, HIGH);
  digitalWrite(INPUT4, HIGH);
 
 
  digitalWrite(K1, HIGH);
  digitalWrite(K2, HIGH);
  digitalWrite(K3, HIGH);
  digitalWrite(K4, HIGH);
 
  key_value = 0;
}
bool input1_prev { false };
void loop() {
 
  while(1)
  {

bool input = (digitalRead(INPUT1)==LOW);
if (input != input1_prev) {
    if (input) {
        noInterrupts();
        relay1_time_left = relay1_delay_time;
        digitalWrite(j1, HIGH);
       
    }
    digitalWrite(led, input); // тут один led на 4 канала?
    input1_prev = input;
   
   
    if     (digitalRead(K1)==LOW) {key_value = 0; }
    else if(digitalRead(K2)==LOW) {key_value = 1; }
    else if(digitalRead(K3)==LOW) {key_value = 2; }
    else if(digitalRead(K4)==LOW) {key_value = 3; }
  }
}}


в такому вигляді запрацювало,але при подачі сигнала реле спрацьовує і не відключається.таймер не працює

Неактивний

#31 2025-02-24 21:21:17

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

dimich пише:

Яка саме помилка? Скопіюйте сюди її повний текст.
Куди і замість якої частини цю частину вставили? Який вигляд має loop() після зміни?

по Interrupts(); ось така помилка



Arduino: 1.8.19 (Windows 7), Плата:"Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)"

C:UsersадминDesktopАрдуіноIO22C04 4 Channel Pro mini PLC Board_4ch_delay_relay_4ch_delay_relay.ino: In function 'void TubeDisplay4Bit()':

C:UsersадминDesktopАрдуіноIO22C04 4 Channel Pro mini PLC Board_4ch_delay_relay_4ch_delay_relay.ino:110:20: warning: large integer implicitly truncated to unsigned type [-Woverflow]

C:UsersадминDesktopАрдуіноIO22C04 4 Channel Pro mini PLC Board_4ch_delay_relay_4ch_delay_relay.ino: In function 'void loop()':

_4ch_delay_relay:189:9: error: 'Interrupts' was not declared in this scope

C:UsersадминDesktopАрдуіноIO22C04 4 Channel Pro mini PLC Board_4ch_delay_relay_4ch_delay_relay.ino:189:9: note: suggested alternative: 'interrupts'

exit status 1

'Interrupts' was not declared in this scope



Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"

Неактивний

#32 2025-02-24 21:22:43

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

jokeer пише:

я підозрюю що хтось неакуратно вирізав while (1)

якщо що,я не спеціально smile

Неактивний

#33 2025-02-24 21:32:33

jokeer
Гість

Re: Потрібна допомога в редагуванні скетчу для реле часу

от що мені в цьому форумі подобається, так те що іноді повідомлення зникає десь wink

#34 2025-02-24 21:39:26

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

jokeer пише:

от що мені в цьому форумі подобається, так те що іноді повідомлення зникає десь wink


яке повідомлення?

Неактивний

#35 2025-02-24 21:41:32

jokeer
Гість

Re: Потрібна допомога в редагуванні скетчу для реле часу

doc.arduino.ua/ru/prog/Interrupts

#36 2025-02-24 21:44:39

jokeer
Гість

Re: Потрібна допомога в редагуванні скетчу для реле часу

походу гостю не можна url відсилати wink

#37 2025-02-24 21:59:45

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 316

Re: Потрібна допомога в редагуванні скетчу для реле часу

Maikl123 пише:

Board_4ch_delay_relay:189:9: error: 'Interrupts' was not declared in this scope

А, це моя помилка. Воно "interrupts()", з маленької "i".
Хотів же ще cli() / sei() написати, але вирішив по-ардуінівськи hmm

Maikl123 пише:

в такому вигляді запрацювало,але при подачі сигнала реле спрацьовує і не відключається.таймер не працює

Звісно, обробку переривань вимкнули, а назад не увімкнули. Я б здивувався, якби запрацювало smile

Maikl123 пише:

Board_4ch_delay_relay_4ch_delay_relay.ino:110:20: warning: large integer implicitly truncated to unsigned type [-Woverflow]

Тут у вас 1000 не влазить в unsigned char. Максимум можна 255. І замість 1000 у вас записується 232.
А якщо тупо збільшите розрядність OneSecondCnt, тоді оте переповнення у OneSecondCnt-- створить на початку роботи затримку на 65535 одиниць замість 255.

Як обхідний варіант можете таки замість того "uchar OneSecondCnt;" зробити

unsigned int OneSecondCnt = 1;

Хоча по-хорошому, всю ту "логіку" потрібно переписувати.

Неактивний

#38 2025-02-24 22:36:10

jokeer
Гість

Re: Потрібна допомога в редагуванні скетчу для реле часу

github.com/ropolexi/IO22C04/tree/main/examples/basics

#39 2025-02-24 22:54:02

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

dimich пише:

А, це моя помилка. Воно "interrupts()", з маленької "i".
Хотів же ще cli() / sei() написати, але вирішив по-ардуінівськи hmm

оце вже запрацювало майже як треба,але є нюанс коли подається сигнал із датчика вмикається реле потім вимикається через вказаний час але коли зникає сигнал із датчика знову вмикається реле на вказаний час і вимикається,в чому ж проблема?

Неактивний

#40 2025-02-24 22:59:48

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

jokeer пише:

github.com/ropolexi/IO22C04/tree/main/examples/basics

оце вже дуже цікаво

Неактивний

#41 2025-02-24 23:38:54

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 316

Re: Потрібна допомога в редагуванні скетчу для реле часу

Maikl123 пише:

коли подається сигнал із датчика вмикається реле потім вимикається через вказаний час але коли зникає сигнал із датчика знову вмикається реле на вказаний час і вимикається,в чому ж проблема?

Може бути, що перед тим як зникнути сигнал тіліпається туди-сюди (той самий брязкіт), і відбувається перехід із високого рівня в низький, потім назад у високий. Я ж не знаю, що там за датчики і який характер сигналу на вході. Код розрахований на чіткі фронти.
Але додавати туди ще й фільтрацію по таймінгам - дійсно, простіше все з нуля переписати. У вигляді нормального конечного автомата.

Може бути і якась інша причина. Повставляйте Serial.print() у ключові точки та подивіться, що там відбувається.

PS: Опитування кнопок у вас чомусь під "if (input != input1_prev)" попало. Воно має бути ззовні блока if.

Неактивний

#42 2025-02-24 23:43:59

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

jokeer пише:

github.com/ropolexi/IO22C04/tree/main/examples/basics

але нажаль той скетч не підходить для ардуіно про міні roll

Неактивний

#43 2025-02-24 23:55:38

jokeer
Гість

Re: Потрібна допомога в редагуванні скетчу для реле часу

та ладно wink і що там особливого?

#44 2025-02-25 00:20:01

jokeer
Гість

Re: Потрібна допомога в редагуванні скетчу для реле часу

This arduino library is for IO22C04 board with either

ATmega32u4 (pro micro)
ATmega328 (pro mini)

#45 2025-02-25 01:00:15

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

dimich пише:

Може бути, що перед тим як зникнути сигнал тіліпається туди-сюди (той самий брязкіт), і відбувається перехід із високого рівня в низький, потім назад у високий. Я ж не знаю, що там за датчики і який характер сигналу на вході. Код розрахований на чіткі фронти.
Але додавати туди ще й фільтрацію по таймінгам - дійсно, простіше все з нуля переписати. У вигляді нормального конечного автомата.

Може бути і якась інша причина. Повставляйте Serial.print() у ключові точки та подивіться, що там відбувається.

PS: Опитування кнопок у вас чомусь під "if (input != input1_prev)" попало. Воно має бути ззовні блока if.

дуже дякую за допомогу,проблему вирішено за допомогою chat GPT

Неактивний

#46 2025-02-25 01:02:14

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

jokeer пише:

та ладно wink і що там особливого?

дуже дякую за допомогу,проблема криється швидше за все в бібліотеках додаткових,принаймні так уважає чат GPT big_smile

Неактивний

#47 2025-02-25 07:45:12

jokeer
Гість

Re: Потрібна допомога в редагуванні скетчу для реле часу

Ну я б таки рекомендував брати за базу нормально написаний код. Цікаво, що там не так з бібліотеками wink чому чатік так вирішив? що ви у нього питали?

#48 2025-02-25 11:34:50

dimich
Учасник
Зареєстрований: 2023-12-01
Повідомлень: 316

Re: Потрібна допомога в редагуванні скетчу для реле часу

Maikl123 пише:

проблему вирішено за допомогою chat GPT

Не вірю.

Неактивний

#49 2025-02-25 12:17:16

jokeR
Учасник
Зареєстрований: 2024-12-12
Повідомлень: 49

Re: Потрібна допомога в редагуванні скетчу для реле часу

Не вірю.

+1
Але цікаво було б побачити цю історію успіху wink

Неактивний

#50 2025-02-25 20:15:21

Maikl123
Учасник
Зареєстрований: 2023-01-25
Повідомлень: 28

Re: Потрібна допомога в редагуванні скетчу для реле часу

dimich пише:
Maikl123 пише:

проблему вирішено за допомогою chat GPT

Не вірю.

але то факт

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму