Помогите со скетчем плиз
- Войдите на сайт для отправки комментариев
Вс, 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
Спасибо разобрался извините за беспокойство
Спасибо разобрался извините за беспокойство
С первой ссылкой не до конца разобрался.