Нужна помощь с выводом значений на 7сегментном модуле 74hc595

Тема в разделе "Arduino & Shields", создана пользователем Alex196, 19 мар 2018.

  1. Alex196

    Alex196 Нуб

    Здравствуйте, Подскажите, пожалуйста, как сделать вывод информации на 4х цифровой дисплей 74hc595.

    Код (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;
      }
    }
     
    Последнее редактирование: 19 мар 2018
  2. b707

    b707 Гуру

    помощь-то какая нужна? Если что-то не работает - пишите что именно. Если вообще ничего не понимаете и нужно написать все за вас - размещайте пост в раздел "Закажу проект"
     
  3. Alex196

    Alex196 Нуб

    тут все готово просто нужно чтобы значения encoderPos выводились на модуль, я не знаю как это сделать.
     
  4. Alex196

    Alex196 Нуб