Здравствуйте, Подскажите, пожалуйста, как сделать вывод информации на 4х цифровой дисплей 74hc595. Спойлер: модуль https://ru.aliexpress.com/item/4-Bi...32341627107.html?spm=a2g0s.9042311.0.0.mGY69l Код (C++): #include<Four7Seg74hc595.h> #define SCLK 12 // пины ардуины #define RCLK 11 #define DIO 10 int ssr = 5; //Реле enum PinAssignments { encoderPinA = 2, // увеличение таймера encoderPinB = 3, // уменьшение таймера fireButton = 4 // кнопка }; volatile int encoderPos = 40; int lastReportedPos = 1; static boolean rotating=false; boolean A_set = false; boolean B_set = false; byte digitBuffer[4]; void showDisplay(){ const byte digit[10] = {0b11000000,0b11111001,0b10100100,0b10110000,0b10011001,0b10010010,0b10000010,0b11111000,0b10000000, 0b10010000}; const byte chr[4] = {0b00001000,0b00000100,0b00000010,0b00000001}; for(byte i = 0; i <= 3; i++){digitalWrite(RCLK, LOW);shiftOut(DIO, SCLK, MSBFIRST, digit[digitBuffer[i]]);shiftOut(DIO, SCLK, MSBFIRST, chr[i]);digitalWrite(RCLK, HIGH);delay(1);} } void setup() { Serial.begin(9600); pinMode(RCLK, OUTPUT); pinMode(SCLK, OUTPUT); pinMode(DIO, OUTPUT); pinMode(encoderPinA, INPUT_PULLUP); pinMode(encoderPinB, INPUT_PULLUP); pinMode(fireButton, INPUT_PULLUP); pinMode(ssr, OUTPUT); attachInterrupt(0, doEncoderA, CHANGE); attachInterrupt(1, doEncoderB, CHANGE); } void fire() { digitalWrite(ssr, HIGH); delay (encoderPos); digitalWrite(ssr, LOW); } void loop() { digitBuffer[0] = 1; digitBuffer[1] = 2; digitBuffer[2] = 3; digitBuffer[3] = 4; showDisplay(); rotating = true; if (encoderPos <= 10 ){ encoderPos = 10; lastReportedPos = 10; } if (encoderPos >= 2001 ){ encoderPos = 2001; lastReportedPos = 2001; } else {if (lastReportedPos != encoderPos) { Serial.print("Index:"); Serial.println(encoderPos, DEC); lastReportedPos = encoderPos; }} if (digitalRead(fireButton) == LOW ) { Serial.print("Fire"); Serial.println(DEC); fire(); delay(1000); } } void doEncoderA(){ if ( rotating ) delay (1); if( digitalRead(encoderPinA) != A_set ) { A_set = !A_set; if ( A_set && !B_set ) encoderPos += 1; rotating = false; } } void doEncoderB(){ if ( rotating ) delay (1); if( digitalRead(encoderPinB) != B_set ) { B_set = !B_set; if( B_set && !A_set ) encoderPos -= 1; rotating = false; } }
помощь-то какая нужна? Если что-то не работает - пишите что именно. Если вообще ничего не понимаете и нужно написать все за вас - размещайте пост в раздел "Закажу проект"
тут все готово просто нужно чтобы значения encoderPos выводились на модуль, я не знаю как это сделать.