Помогите со скетчем плиз
- Войдите на сайт для отправки комментариев
Вс, 21/02/2021 - 21:09
Прошу вашей помощи помогите исправить скетч так чтобы после ввода времени таймер повторялся бесконечно с выполнением функций. И перезагрузки Ардуино с ново можно было вводить время. Очень прошу. Ардуино нано Дисплей TM1637
#include "TM1637.h" //используется для включчения сторонних библиотек в ваш скетч #include <EEPROM.h> //Энергозависима внутренняя память Аруино #include <TM1637.h> //используется для включчения сторонних библиотек в ваш скетч #define CLK 2 //Присваевает пин #define DIO 3 //Присваевает пин #define Buz A1 //Присваевает пин #define Butt 6 //Присваевает пин #define addr_min 0 //Присваевает значение #define addr_sec 1 //Присваевает значение #define Out A2 //Присваевает пин TM1637 disp(CLK, DIO); // активмрует выходы дисплея int8_t TimeDisp[] = {0x00,0x00,0x00,0x00}; //1 байт -128… 127 Целочисленный тип byte minute = 0; //uint8_t 1 байт 0… 255 Целочисленный тип byte second = 0; //uint8_t 1 байт 0… 255 Целочисленный тип byte S_minute = 0; // minutes byte S_second = 0; // sec. byte Step = 0; byte start = false; byte bl = false; const int pin_A = 4; const int pin_B = 5; unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev=0; unsigned char encoder_B_prev=0; ISR (TIMER1_COMPA_vect) // эта функция вызывается прерыванием по таймеру и используется для учета времени для подсчета емкости { start = true; // и разрешаем измерение силы тока (емкости) 1 раз в секунду } void setup() { // put your setup code here, to run once: minute = EEPROM.read(addr_min); second = EEPROM.read(addr_sec); if (minute > 99){ minute = 0; EEPROM.write(addr_min, minute); } if (second > 59){ second = 0; EEPROM.write(addr_sec, second); } byte S_minute = minute; // minutes byte S_second = second; // sec. pinMode(pin_A, INPUT_PULLUP); pinMode(pin_B, INPUT_PULLUP); pinMode(Buz, OUTPUT); digitalWrite(Buz, LOW); pinMode(Butt, INPUT_PULLUP); digitalWrite(Butt, HIGH); pinMode(Out, OUTPUT); digitalWrite(Out, LOW); disp.set(7); // яркость, 0 - 7 (минимум - максимум) disp.init(); // инициализация disp.point(POINT_ON); cli(); // запрещаем перывания TCCR1A = 0; // устанавливаем настройки таймеря для учета времени TCCR1B = (1<<WGM12) | (1<<CS12); // mode 4 и делитель 256 TIMSK1 |=(1<<OCIE1A); // прерывание по совпадению TCNT1 = 0; // OCR1A = 62499U; // sei(); // разрешаем прерывания } void loop() { button(); switch (Step) { case 1 ... 2: encoder(); break; case 4: if (start) { start = false; if (second > 0) second--; else{ if( minute > 0){ minute--; second = 59; } else{ Step++; digitalWrite(Out, LOW); } } } break; case 5: disp.point(POINT_OFF); for (int i=0; i<3; i++){ digitalWrite(Buz, HIGH); delay(600); digitalWrite(Buz, LOW); delay(400); } disp.point(POINT_ON); Step=0; minute = S_minute; second = S_second; break; } draw(); } void button(){ if (!digitalRead(Butt)){ delay(300); Step++; if(Step > 4) Step = 0; if(Step < 3){ disp.clearDisplay(); } digitalWrite(Out, LOW); if(Step == 4){ EEPROM.write(addr_min, S_minute); EEPROM.write(addr_sec, S_second); digitalWrite(Out, HIGH); delay(1000); } } } void draw(){ TimeDisp[0] = minute / 10; TimeDisp[1] = minute % 10; TimeDisp[2] = second / 10; TimeDisp[3] = second % 10; switch (Step) { case 0: disp.display(TimeDisp); break; case 1: disp.display(2, TimeDisp[2]); disp.display(3, TimeDisp[3]); break; case 2: disp.display(0, TimeDisp[0]); disp.display(1, TimeDisp[1]); break; case 3 ... 4: disp.display(TimeDisp); break; } } void encoder(){ encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю if(encoder_B) { if (Step == 1){ if(second < 59) second++; else second=0; } else if (Step == 2){ if(minute < 99) minute++; else minute=0; } } else { if (Step == 1){ if(second > 0) second--; else second=59; } else if (Step == 2){ if(minute > 0) minute--; else minute=99; } } S_minute = minute; S_second = second; } encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла }
Для начала: https://docviewer.yandex.ru/?lang=ru&tm=1613927668&tld=ru&name=bystry_russkiy_vsya_grammatika_v_skhemakh_i_tablitsakh.pdf&text=грамматика+русского+языка&url=https%3A//nsportal.ru/sites/default/files/2018/12/08/bystry_russkiy_vsya_grammatika_v_skhemakh_i_tablitsakh.pdf&lr=213&mime=pdf&l10n=ru&sign=a9cb32300caf7986708071e886a9efcd&keyno=0
Если желание совершенствоваться не появится, то сюда: http://arduino.ru/forumy/ishchu-ispolnitelya
Спасибо разобрался извините за беспокойство
Спасибо разобрался извините за беспокойство
С первой ссылкой не до конца разобрался.