Добавить в корзинуПозвонить
Найти в Дзене
Shema_Tehnik

Счётчик витков на Arduino и герконе

Счетчик витков на герконе, ардуино, 4-х разрядный семисегментный индикатор с общими анодами , кнопка обнуления и при отключении питания число витков сохраняется. Максимальное значение — 9999, после чего счёт обнуляется. Кнопку сброса витков оставил штатную , только перерезал дорожку от микроконтроллера Reset и подпаял провод на A1. Сегменты a-g и dp → пины 2-9 через токоограничивающие резисторы 220 Ом Сегменты: Сегмент a -> Arduino Pin 2 Сегмент b -> Arduino Pin 3 Сегмент c -> Arduino Pin 4 Сегмент d -> Arduino Pin 5 Сегмент e -> Arduino Pin 6 Сегмент f -> Arduino Pin 7 Сегмент g -> Arduino Pin 8 Сегмент dp (точка) -> Arduino Pin 9 (Можно не подключать) Разряды (общие аноды): Разряд 1 -> Arduino Pin 10 Разряд 2 -> Arduino Pin 11 Разряд 3 -> Arduino Pin 12 Разряд 4 -> Arduino Pin 13 Подключение Кнопки: Кнопка обнуления → Arduino Pin 15 (A1), второй вывод кнопки на GND. Подключение Геркона: Геркон → Arduino Pin 14 (A0), второй вывод геркона на GND. #include <EEPROM.h> int segPins[8]

Счетчик витков на герконе, ардуино, 4-х разрядный семисегментный индикатор с общими анодами , кнопка обнуления и при отключении питания число витков сохраняется. Максимальное значение — 9999, после чего счёт обнуляется.

Кнопку сброса витков оставил штатную , только перерезал дорожку от микроконтроллера Reset и подпаял провод на A1.

-2
-3
-4

Сегменты a-g и dp → пины 2-9 через токоограничивающие резисторы 220 Ом

Сегменты:

Сегмент a -> Arduino Pin 2

Сегмент b -> Arduino Pin 3

Сегмент c -> Arduino Pin 4

Сегмент d -> Arduino Pin 5

Сегмент e -> Arduino Pin 6

Сегмент f -> Arduino Pin 7

Сегмент g -> Arduino Pin 8

Сегмент dp (точка) -> Arduino Pin 9 (Можно не подключать)

Разряды (общие аноды):

Разряд 1 -> Arduino Pin 10

Разряд 2 -> Arduino Pin 11

Разряд 3 -> Arduino Pin 12

Разряд 4 -> Arduino Pin 13

Подключение Кнопки:

Кнопка обнуления → Arduino Pin 15 (A1), второй вывод кнопки на GND.

Подключение Геркона:

Геркон → Arduino Pin 14 (A0), второй вывод геркона на GND.

КОД

#include <EEPROM.h>

int segPins[8] = {2,3,4,5,6,7,8,9};

int digitPins[4] = {13,12,11,10};

byte digits[10][8] = {

{0,0,0,0,0,0,1,1}, // 0

{1,0,0,1,1,1,1,1}, // 1

{0,0,1,0,0,1,0,1}, // 2

{0,0,0,0,1,1,0,1}, // 3

{1,0,0,1,1,0,0,1}, // 4

{0,1,0,0,1,0,0,1}, // 5

{0,1,0,0,0,0,0,1}, // 6

{0,0,0,1,1,1,1,1}, // 7

{0,0,0,0,0,0,0,1}, // 8

{0,0,0,0,1,0,0,1} // 9

};

int count = 0;

int lastReed = HIGH;

unsigned long lastSave = 0;

void setup() {

for (int i=0; i<8; i++) pinMode(segPins[i], OUTPUT);

for (int i=0; i<4; i++) pinMode(digitPins[i], OUTPUT);

pinMode(A0, INPUT_PULLUP);

pinMode(A1, INPUT_PULLUP);

digitalWrite(9, HIGH);

EEPROM.get(0, count);

if (count < 0 || count > 9999) count = 0;

}

void loop() {

if (digitalRead(A1) == LOW) { // кнопка

delay(50);

while(digitalRead(A1)==LOW){}

count=0;

EEPROM.put(0,count);

}

int reed = digitalRead(A0);

if(reed==LOW && lastReed==HIGH){

delay(20);

if(digitalRead(A0)==LOW) {

count=(count+1)%10000;

}

}

lastReed=reed;

if(millis()-lastSave>5000){

EEPROM.put(0,count);

lastSave=millis();

}

displayNum(count);

}

void displayNum(int n){

int d[4]={n/1000, (n/100)%10, (n/10)%10, n%10};

bool show[4]={n>=1000, n>=100, n>=10, true};

for(int dgt=0;dgt<4;dgt++){

for(int i=0;i<4;i++) digitalWrite(digitPins[i],LOW);

if(show[dgt]){

for(int s=0;s<8;s++) digitalWrite(segPins[s],digits[d[dgt]][s]);

digitalWrite(digitPins[dgt],HIGH);

}

delay(2);

}

}