/* BINARY COUNTER
BY MATTHEW STUART
https://www.landofarduino.co.uk
примерный вид программ управления реле трансформатора
для получения выходного напряжения 0...255в с шагом 1в.
вместо светодиодов надо установить блок реле.
*/
#include <TM1637.h>
#include <EncButton.h>
#define ENCODER_CLK 11
#define ENCODER_DT 12
#define ENCODER_SW 10
#define DISPLAY_DIO A2
#define DISPLAY_CLK A1
#define SW A3
EncButton eb(ENCODER_CLK, ENCODER_DT, ENCODER_SW);
TM1637 tm(DISPLAY_CLK, DISPLAY_DIO);
// Define Arduino pins that LEDs will be connected to with an array
// int ledPins[] = {9, 8, 7, 6, 5, 4, 3, 2};
byte ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9};
// The number to display
byte count;
int lastClk = HIGH;
// Set each pin as an output and default to zero
void setup(void) {
for (byte i = 0; i < 8; i++) {
pinMode(ledPins[i], OUTPUT);
}
count = 0; //здесь можно присвоить сохраненное значение из памяти
Serial.begin(115200);
/*pinMode(ENCODER_CLK, INPUT);
pinMode(ENCODER_DT, INPUT);
pinMode(ENCODER_SW, INPUT_PULLUP);
pinMode(SW, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);*/
tm.init();
tm.set(BRIGHT_TYPICAL);
tm_Output();
}
// Constantly increase, display, and delay.
void loop(void)
{
eb.tick();
// обработка поворота раздельная
if (eb.left()) {
count --;
tm_Output();
Serial.println("left");
}
if (eb.right()) {
count ++;
tm_Output();
Serial.println("right");
}
if (eb.leftH()) Serial.println("leftH");
if (eb.rightH()) Serial.println("rightH");
if (digitalRead(SW) == LOW) {
digitalWrite(LED_BUILTIN, 1);
if (digitalRead(ENCODER_SW)== LOW)dispBinary(count);
} else {
digitalWrite(LED_BUILTIN, 0);
dispBinary(0);
}
}
// Show a single number.
void dispBinary(byte n)
{
for (byte i = 0; i < 8; i++) {
digitalWrite(ledPins[i], n & 1);
n /= 2;
}
}
void tm_Output() {
//tm.display(0, (count / 1000) % 10);
tm.display(1, (count / 100) % 10);
tm.display(2, (count / 10) % 10);
tm.display(3, count % 10);
}