Задать вопрос
  • Написание динамической индикации для 7-сегментного индикатора?

    @Seldy Автор вопроса
    SunTechnik,
    Вот код всей программы:
    #define byte uint8_t
    unsigned long drawtime, looptime;
    byte nums[12]{0x3f,  // 0 
                  0x06,  // 1 
                  0x5b,  // 2 
                  0x4f,  // 3 
                  0x66,  // 4 
                  0x6d,  // 5 
                  0x7d,  // 6 
                  0x07,  // 7 
                  0x7f,  // 8 
                  0x6f,  // 9
                  0x5e,  // D
                  0x00}; // empty
    void draw(){}
    void sep_num(){}
    void setup() {
      for(uint8_t ch = 2; ch < 12; ch++) pinMode(ch, OUTPUT);
      randomSeed(analogRead(0));
      Serial.begin(9600);
    }
    
    void loop() {
      byte drawdata;
      unsigned long time = millis();
      if((time - looptime)  > 3000){
        looptime = millis();
        drawdata = sep_num(random(1, 101));
        Serial.println("num sep");
      }
      draw(drawdata);
    }
    
    void draw(byte *numdraw ) {
      byte b = 0;
      for(byte i = 9; i < 12; i++ ){
          digitalWrite(i, 1);
          byte a = 0;
          for( byte j = 2; j < 9; j++){ 
            bool flag = bitRead(numdraw[a], b);
            digitalWrite(j, flag);
            a++;
            }
          delay(10);
          digitalWrite(i, 0);
          b++;
          }   
    }
    
    byte sep_num(byte ranum){
      byte n = 100;
      byte list[3];
      Serial.println(ranum); 
      for(byte i = 0; i < 3; i++){
        byte data = (ranum / n) % 10;
        list[i] = data;
        n /= 10;
      }
      return *list;
    }
    Написано
  • Написание динамической индикации для 7-сегментного индикатора?

    @Seldy Автор вопроса
    SunTechnik,
    1. Еще один цикл используется для разбиения числа на разряды:
    byte sep_num(byte ranum){
      byte n = 100;
      byte list[3];
      Serial.println(ranum); 
      for(byte i = 0; i < 3; i++){
        byte data = (ranum / n) % 10;
        list[i] = data;
        n /= 10;
      }
      return *list;
    }


    2. Цифры перестают полноценно отрисовываться, при этом вся программа до отрисовки работает корректно. Если числа передавать в ручную то отображается все нормально.

    3. Сегменты подключены к пинам со 2 по 8, разряды к пинам с 9 по 11.

    4.Данная функция работала исправно до добавления выше указанной.
    Написано