Skocz do zawartości

Kurs Arduino II - #6 - wyświetlacze 7-segmentowe


Pomocna odpowiedź

 

switch (cyfra) {
    case 0: 
    lcd(1,1,1,0,1,0,1);
    break;
    
    case 1: 
    lcd(0,1,0,0,1,1,1);
    break;
  // etc 
    }

void lcd(bool a, bool b, bool c, bool d, bool e, bool f, bool g) {   
            digitalWrite(SEG_A ,a ) ;
            digitalWrite(SEG_B , b) ;
            digitalWrite(SEG_C , c) ;
            digitalWrite(SEG_D , d) ;
            digitalWrite(SEG_E , e) ;
            digitalWrite(SEG_F , f) ;
            digitalWrite(SEG_G , g) ;
            }

Możesz też dorzucić funkcję jak wyżej i kod będzie dużo krótszy bez powielania tych samych linii...😉

  • Lubię! 1

@Pierunek Dobry pomysł z użyciem funkcji 🙂 ewentualnie możnaby ten program fajnie urozmaicić dodając w argumencie własną strukturę np z unią w środku żeby dało się mieć tablicę ale zarazem odniesienie do konkretnych segmentów. Piny można by dodać do innej tablicy stałych, w w funkcji lcd użyć pętle for.

To bardziej zaawansowane, ale jak jesteś zainteresowany to daj znać 🙂 

  • 2 tygodnie później...

Mam problem z wgraniem programu, który używa biblioteki SevSeg. Biblioteka znajduje się w folderze libraries oraz wyświetla mi się folder sevseg w przykładach do arduino, jednak przy wgrywaniu skopiowanego wprost z tego artykułu kodu wyświeltla mi się błąd. Próbowałem reinstalować bibliotekę, ale bezskutecznie.

@Tymoteus upewnij się, że korzystasz z dokładnie tej samej biblioteki (a nie innej o takiej samej nazwie). Pokaż jaki błąd otrzymujesz to łatwiej będzie pomóc 🙂

  • 2 tygodnie później...

Cześć. Właśnie mam problem z wyświetlaczem 7-segmentowym. Mianowicie kiedy wszystko dobrze podłączyłem, na wyświetlaczu nic się nie wyświetla. Zamówiłem kolejny  i dalej ten sam problem. Czy mógłby ktoś pomóc, ponieważ nie wiem co zrobić. 

  • 4 miesiące później...

20230123_205648.thumb.jpg.4260e8955b42b3a028b8d5807f763b3b.jpg



#define SEG_C 2
#define SEG_E 3
#define SEG_D 4
#define SEG_B 5
#define SEG_G 9
#define SEG_A 7
#define SEG_F 8


void setup() {
//Konfiguracja pinow  jako wyjscie
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);

  //Test segmentow
 
  
  


  digitalWrite(SEG_A, HIGH);
  delay(800);
  digitalWrite(SEG_B, HIGH);
  delay(800);
  digitalWrite(SEG_C, HIGH);
  delay(800);
  digitalWrite(SEG_D, HIGH);
  delay(800);
  digitalWrite(SEG_E, HIGH);
  delay(800);
  digitalWrite(SEG_F, HIGH);
  delay(800);
  digitalWrite(SEG_G, HIGH);
  delay(800);
  digitalWrite(SEG_A, LOW);
  digitalWrite(SEG_B, LOW);
  digitalWrite(SEG_C, LOW);
  digitalWrite(SEG_D, LOW);
  digitalWrite(SEG_E, LOW);
  digitalWrite(SEG_F, LOW);
  digitalWrite(SEG_G, LOW);
}  
  void loop() {
   //Petla for od 0 do 10
int i = 0;
    for(i=0; i < 11; i++){
       wyswietlacz(i);    //wyswietla zawartosc na wyswietlaczu
       delay(500);
    }
}
void wyswietlacz(int cyfra) {
    //Instrukcja switch ustawia odpowiednie stany wyjcja
    // w zaleznosci od podanej cyfry
  switch (cyfra) {
    case 0:
          digitalWrite(SEG_A, HIGH);
          digitalWrite(SEG_B, HIGH);          
          digitalWrite(SEG_C, HIGH);
          digitalWrite(SEG_D, HIGH);
          digitalWrite(SEG_E, HIGH);
          digitalWrite(SEG_F, HIGH);
          digitalWrite(SEG_G, HIGH);
     break;

     case 1:     
          digitalWrite(SEG_A, LOW);
          digitalWrite(SEG_B, HIGH);          
          digitalWrite(SEG_C, HIGH);
          digitalWrite(SEG_D, LOW);
          digitalWrite(SEG_E, LOW);
          digitalWrite(SEG_F, LOW);
          digitalWrite(SEG_G, LOW);
      break;

      case 2:
          digitalWrite(SEG_A, HIGH);
          digitalWrite(SEG_B, HIGH);          
          digitalWrite(SEG_C, LOW);
          digitalWrite(SEG_D, HIGH);
          digitalWrite(SEG_E, HIGH);
          digitalWrite(SEG_F, LOW);
          digitalWrite(SEG_G, HIGH);
      break;

      case 3:
          digitalWrite(SEG_A, HIGH);
          digitalWrite(SEG_B, HIGH);          
          digitalWrite(SEG_C, HIGH);
          digitalWrite(SEG_D, HIGH);
          digitalWrite(SEG_E, LOW);
          digitalWrite(SEG_F, LOW);
          digitalWrite(SEG_G, HIGH);
      break;   

      case 4:
          digitalWrite(SEG_A, LOW);
          digitalWrite(SEG_B, HIGH);          
          digitalWrite(SEG_C, HIGH);
          digitalWrite(SEG_D, LOW);
          digitalWrite(SEG_E, LOW);
          digitalWrite(SEG_F, HIGH);
          digitalWrite(SEG_G, HIGH);
     break;           
  
     case 5 :
          digitalWrite(SEG_A, HIGH);
          digitalWrite(SEG_B, LOW);          
          digitalWrite(SEG_C, HIGH);
          digitalWrite(SEG_D, HIGH);
          digitalWrite(SEG_E, LOW);
          digitalWrite(SEG_F, HIGH);
          digitalWrite(SEG_G, HIGH);
          
      break;

        case 6:
          digitalWrite(SEG_A,HIGH);
          digitalWrite(SEG_B,LOW);     
          digitalWrite(SEG_C, HIGH);
          digitalWrite(SEG_D, HIGH);
          digitalWrite(SEG_E, HIGH);
          digitalWrite(SEG_F, HIGH);
          digitalWrite(SEG_G, HIGH);
        break;   

        case 7:   
          digitalWrite(SEG_A, HIGH);
          digitalWrite(SEG_B, HIGH);          
          digitalWrite(SEG_C, HIGH);
          digitalWrite(SEG_D, LOW);
          digitalWrite(SEG_E, LOW);
          digitalWrite(SEG_F, LOW);
          digitalWrite(SEG_G, LOW);
        break;
          
        case 8:
          digitalWrite(SEG_A, HIGH);
          digitalWrite(SEG_B, HIGH);          
          digitalWrite(SEG_C, HIGH);
          digitalWrite(SEG_D, HIGH);
          digitalWrite(SEG_E, HIGH);
          digitalWrite(SEG_F, HIGH);
          digitalWrite(SEG_G, HIGH);
        break;  
        
        case 9:
          digitalWrite(SEG_A, HIGH);
          digitalWrite(SEG_B, HIGH);          
          digitalWrite(SEG_C, HIGH);
          digitalWrite(SEG_D, HIGH);
          digitalWrite(SEG_E, LOW);
          digitalWrite(SEG_F, HIGH);
          digitalWrite(SEG_G, HIGH);
       break;

       case 10:
          digitalWrite(SEG_A, HIGH);
          digitalWrite(SEG_B, LOW);          
          digitalWrite(SEG_C, LOW);
          digitalWrite(SEG_D, HIGH);
          digitalWrite(SEG_E, LOW);
          digitalWrite(SEG_F, LOW);
          digitalWrite(SEG_G, HIGH);
          delay(500);
        break;
          
       
       
  }
}       
         

 

  • 2 miesiące później...

Witam, zrobiłem tą część kursu na wyświetlaczu 4-cyfrowym. Wszystko tak sobie przekształcałem żeby wyświetlacz używał wszystkich liczb, jeszcze mój wyświetlacz jest w konfiguracji ze wspólną anodą.

Zad.1:

#define SEG_A 3
#define SEG_B 4
#define SEG_C 5
#define SEG_D 6
#define SEG_G 9
#define SEG_F 8
#define SEG_E 7
#define SEG_DP 10

#define BUT_1 13
#define BUT_2 12
#define BUT_3 11

#define WYSW_3 A5
#define WYSW_2 A4
#define WYSW_1 A3
#define WYSW_4 A2

int i = 0;

void setup() {
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT); 

  pinMode(BUT_1, INPUT_PULLUP);
  pinMode(BUT_2, INPUT_PULLUP);
  pinMode(BUT_3, INPUT_PULLUP);

  pinMode(WYSW_1, OUTPUT);
  pinMode(WYSW_2, OUTPUT);
  pinMode(WYSW_3, OUTPUT);
  pinMode(WYSW_4, OUTPUT);

  ustawieniePinow();

  Serial.begin(9600);
}

void loop() {
 digitalWrite(WYSW_1, HIGH);
 digitalWrite(WYSW_2, LOW);
 digitalWrite(WYSW_3, LOW);
 digitalWrite(WYSW_4, LOW);
 wyswietlacz(2);
 delay(200);
 
 digitalWrite(WYSW_1, LOW);
 digitalWrite(WYSW_2, HIGH);
 digitalWrite(WYSW_3, LOW);
 digitalWrite(WYSW_4, LOW);
 wyswietlacz(1);
 delay(200);
 
 digitalWrite(WYSW_1, LOW);
 digitalWrite(WYSW_2, LOW);
 digitalWrite(WYSW_3, HIGH);
 digitalWrite(WYSW_4, LOW);
 wyswietlacz(3);
 delay(200);
 
 digitalWrite(WYSW_1, LOW);
 digitalWrite(WYSW_2, LOW);
 digitalWrite(WYSW_3, LOW);
 digitalWrite(WYSW_4, HIGH);
 wyswietlacz(7);
 delay(200);
 
}

void ustawieniePinow(){ // ta funkcj sprawia ze na star wyswietlacz ma wszystkie diody wylaczone gdyz uzywam wyswietlacza ze wspolna anoda
  digitalWrite(SEG_A, HIGH);
  digitalWrite(SEG_B, HIGH);
  digitalWrite(SEG_C, HIGH);
  digitalWrite(SEG_D, HIGH);
  digitalWrite(SEG_E, HIGH);
  digitalWrite(SEG_F, HIGH);
  digitalWrite(SEG_G, HIGH);
  digitalWrite(SEG_DP, HIGH);
}

void wyswietlacz(int cyfra) {
  switch (cyfra) {
    case 0:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, HIGH);
    break;
    
    case 1:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH);
    break;
    
    case 2:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, HIGH);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, LOW);
    break;
    
    case 3:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, LOW);
    break;
    
    case 4:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
    break;
    
    case 5:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
   break;
   
   case 6:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
   break;
   
   case 7:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH);
   break;
   
   case 8:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
   break;
   
   case 9:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
  break;
  }
  if (cyfra >= 10 or cyfra < 0){ //Funkcja mówiąca o przekroczonym zakresie
       digitalWrite(SEG_A, LOW);
       digitalWrite(SEG_B, HIGH);
       digitalWrite(SEG_C, HIGH);
       digitalWrite(SEG_D, LOW);
       digitalWrite(SEG_E, HIGH);
       digitalWrite(SEG_F, HIGH);
       digitalWrite(SEG_G, LOW);
  }
}

Zad.2:

#define SEG_A 3
#define SEG_B 4
#define SEG_C 5
#define SEG_D 6
#define SEG_G 9
#define SEG_F 8
#define SEG_E 7
#define SEG_DP 10

#define BUT_1 13
#define BUT_2 12
#define BUT_3 11

#define WYSW_1 A0
#define WYSW_2 A1
#define WYSW_3 A2
#define WYSW_4 A3

int i = 0;

void setup() {
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT); 

  pinMode(BUT_1, INPUT_PULLUP);
  pinMode(BUT_2, INPUT_PULLUP);
  pinMode(BUT_3, INPUT_PULLUP);

  pinMode(WYSW_1, OUTPUT);
  pinMode(WYSW_2, OUTPUT);
  pinMode(WYSW_3, OUTPUT);
  pinMode(WYSW_4, OUTPUT);

  ustawieniePinow();

  Serial.begin(9600);
}

void loop() {
  
  wyswietlacz(i); //wyswietlanie

  if(digitalRead(BUT_1) == 0){ //dodawanie
    i++;
    delay(200);
  }
  else if(digitalRead(BUT_2) == 0){ //odejmowanie
    i--;
    delay(200);
  }
  else if(digitalRead(BUT_3) == 0){ //reset
    i = 0;
    delay(200);
  } 
}

void ustawieniePinow(){ // ta funkcj sprawia ze na star wyswietlacz ma wszystkie diody wylaczone gdyz uzywam wyswietlacza ze wspolna anoda
  digitalWrite(SEG_A, HIGH);
  digitalWrite(SEG_B, HIGH);
  digitalWrite(SEG_C, HIGH);
  digitalWrite(SEG_D, HIGH);
  digitalWrite(SEG_E, HIGH);
  digitalWrite(SEG_F, HIGH);
  digitalWrite(SEG_G, HIGH);
  digitalWrite(SEG_DP, HIGH);
}

void wyswietlacz(int cyfra) {
  switch (cyfra) {
    case 0:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, HIGH);
    break;
    
    case 1:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH);
    break;
    
    case 2:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, HIGH);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, LOW);
    break;
    
    case 3:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, LOW);
    break;
    
    case 4:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
    break;
    
    case 5:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
   break;
   
   case 6:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
   break;
   
   case 7:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH);
   break;
   
   case 8:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
   break;
   
   case 9:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
  break;
  }
  if (cyfra >= 10 or cyfra < 0){ //Funkcja mówiąca o przekroczonym zakresie
       digitalWrite(SEG_A, LOW);
       digitalWrite(SEG_B, HIGH);
       digitalWrite(SEG_C, HIGH);
       digitalWrite(SEG_D, LOW);
       digitalWrite(SEG_E, HIGH);
       digitalWrite(SEG_F, HIGH);
       digitalWrite(SEG_G, LOW);
  }
}

Zad.3:

#define SEG_A 3
#define SEG_B 4
#define SEG_C 5
#define SEG_D 6
#define SEG_G 9
#define SEG_F 8
#define SEG_E 7
#define SEG_DP 10

#define BUT_1 13
#define BUT_2 12
#define BUT_3 11

#define WYSW_3 A5
#define WYSW_2 A4
#define WYSW_1 A3
#define WYSW_4 A2

int i = 9900;
int liczba_1;
int liczba_2;
int liczba_3;
int liczba_4;

int jednosci = 0;
int dziesiatki = 0;
int setki = 0;
int tysieczne = 0;

void setup() {
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(SEG_DP, OUTPUT); 

  pinMode(BUT_1, INPUT_PULLUP);
  pinMode(BUT_2, INPUT_PULLUP);
  pinMode(BUT_3, INPUT_PULLUP);

  pinMode(WYSW_1, OUTPUT);
  pinMode(WYSW_2, OUTPUT);
  pinMode(WYSW_3, OUTPUT);
  pinMode(WYSW_4, OUTPUT);

  ustawieniePinow();

  Serial.begin(9600);
} 
  
void loop() {
  if(digitalRead(BUT_1) == 0){
    i++;
    delay(10);
  }
  
  if(i < 10){
   jednosci = i;
   liczba_1 = jednosci;
  }
  
  else if(i >= 10 && i < 100){
  dziesiatki = i / 10;
  jednosci = i - 10 * dziesiatki;
  liczba_1 = dziesiatki;
  liczba_2 = jednosci; 
  }
  
  else if(i >= 100 && i < 1000){
    setki = i / 100; 
    liczba_1 = setki;
    dziesiatki = (i - setki * 100) / 10;
    jednosci = i - setki * 100 - dziesiatki * 10;
    liczba_2 = dziesiatki ;
    liczba_3 = jednosci;
  }
  else if(i >= 1000 && i < 10000){
    tysieczne = i / 1000;
    setki = (i - tysieczne * 1000) / 100;
    dziesiatki = (i - tysieczne * 1000 - setki * 100) / 10;
    jednosci = i - tysieczne * 1000 - setki * 100 - dziesiatki * 10; 
    liczba_1 = tysieczne;
    liczba_2 = setki;
    liczba_3 = dziesiatki;
    liczba_4 = jednosci;
  }
  if(i < 10000){
  digitalWrite(WYSW_1, HIGH);
  digitalWrite(WYSW_2, LOW);
  digitalWrite(WYSW_3, LOW);
  digitalWrite(WYSW_4, LOW);
  wyswietlacz(liczba_1);
  delay(5);
  }
  if(i >= 10 && i < 10000){
  digitalWrite(WYSW_1, LOW);
  digitalWrite(WYSW_2, HIGH);
  digitalWrite(WYSW_3, LOW);
  digitalWrite(WYSW_4, LOW);
  wyswietlacz(liczba_2);
  delay(5);
  }
  if(i >= 100 & i < 10000){
  digitalWrite(WYSW_1, LOW);
  digitalWrite(WYSW_2, LOW);
  digitalWrite(WYSW_3, HIGH);
  digitalWrite(WYSW_4, LOW);
  wyswietlacz(liczba_3);
  delay(5);
  }
  if(i >= 1000 && i < 10000){
  digitalWrite(WYSW_1, LOW);
  digitalWrite(WYSW_2, LOW);
  digitalWrite(WYSW_3, LOW);
  digitalWrite(WYSW_4, HIGH);
  wyswietlacz(liczba_4);
  delay(5);
  }
  if (i >= 10000 or i < 0){ //Funkcja mówiąca o przekroczonym zakresie
   digitalWrite(WYSW_1, HIGH);
   digitalWrite(WYSW_2, HIGH);
   digitalWrite(WYSW_3, HIGH);
   digitalWrite(WYSW_4, HIGH);
       
   wyswietlacz(-1);
 }
} 
  
void ustawieniePinow(){ // ta funkcj sprawia ze na star wyswietlacz ma wszystkie diody wylaczone gdyz uzywam wyswietlacza ze wspolna anoda
  digitalWrite(SEG_A, HIGH);
  digitalWrite(SEG_B, HIGH);
  digitalWrite(SEG_C, HIGH);
  digitalWrite(SEG_D, HIGH);
  digitalWrite(SEG_E, HIGH);
  digitalWrite(SEG_F, HIGH);
  digitalWrite(SEG_G, HIGH);
  digitalWrite(SEG_DP, HIGH);
} 
  
void wyswietlacz(int cyfra) {
  switch (cyfra) {
    case 0:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, HIGH);
    break;
    
    case 1:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH);
    break;
    
    case 2:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, HIGH);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, LOW);
    break;
    
    case 3:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, LOW);
    break;
    
    case 4:
        digitalWrite(SEG_A, HIGH);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
    break;
    
    case 5:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
   break;
   
   case 6:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, HIGH);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
   break;
   
   case 7:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, HIGH);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, HIGH);
        digitalWrite(SEG_G, HIGH);
   break;
   
   case 8:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, LOW);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
   break;
   
   case 9:
        digitalWrite(SEG_A, LOW);
        digitalWrite(SEG_B, LOW);
        digitalWrite(SEG_C, LOW);
        digitalWrite(SEG_D, LOW);
        digitalWrite(SEG_E, HIGH);
        digitalWrite(SEG_F, LOW);
        digitalWrite(SEG_G, LOW);
  break;
  }
  if (cyfra >= 10 or cyfra < 0){ //Funkcja mówiąca o przekroczonym zakresie
       digitalWrite(SEG_A, LOW);
       digitalWrite(SEG_B, HIGH);
       digitalWrite(SEG_C, HIGH);
       digitalWrite(SEG_D, LOW);
       digitalWrite(SEG_E, HIGH);
       digitalWrite(SEG_F, HIGH);
       digitalWrite(SEG_G, LOW);
  }
}

Oto zadanie. Oczywiście, będę bardzo wdzięczny za ocenę jakości wykonania zadań. 

338359292_716778746843540_8746120557462602976_n.jpg

  • Lubię! 1

@solowkidamian korzystasz z innych elementów niż te, które były opisane w kursie, więc nie będę tutaj za mocno analizował programów, ale na pierwszy rzut oka wszystko wygląda dobrze. Jeśli będziesz miał jakieś konkretne pytania to załóż najlepiej osobny temat, aby już "nie mieszać" w komentarzach, bo często czytelnicy szukają tu programów, a "gotowce" bazujące na innym sprzęcie mogą niektórym narobić kłopotów 😉 

  • Lubię! 1
  • 4 miesiące później...
(edytowany)

Witam. Oto co mi się udało popełnić odnośnie zad. 6.3

#define SEG_C 2
#define SEG_E 3
#define SEG_D 4
#define SEG_B 5
#define SEG_G 6
#define SEG_A 7
#define SEG_F 8
#define S1 14
#define S2 15
#define S3 16
#define WYSW_1 10
#define WYSW_2 9

byte i = 0;   //zmienne sterujace
byte j = 0;
byte l = 0;

void setup()
{
  //konfiguracja pinow
  pinMode(SEG_A, OUTPUT);
  pinMode(SEG_B, OUTPUT);
  pinMode(SEG_C, OUTPUT);
  pinMode(SEG_D, OUTPUT);
  pinMode(SEG_E, OUTPUT);
  pinMode(SEG_F, OUTPUT);
  pinMode(SEG_G, OUTPUT);
  pinMode(S1, INPUT_PULLUP);
  pinMode(S2, INPUT_PULLUP);
  pinMode(S3, INPUT_PULLUP);
  pinMode(WYSW_1, OUTPUT);
  pinMode(WYSW_2, OUTPUT);

  //test segmentow
  digitalWrite(WYSW_1, HIGH);
  digitalWrite(WYSW_2, HIGH);

  digitalWrite(SEG_A, HIGH);
  delay(800);
  digitalWrite(SEG_B, HIGH);
  delay(800);
  digitalWrite(SEG_C, HIGH);
  delay(800);
  digitalWrite(SEG_D, HIGH);
  delay(800);
  digitalWrite(SEG_E, HIGH);
  delay(800);
  digitalWrite(SEG_F, HIGH);
  delay(800);
  digitalWrite(SEG_G, HIGH);
  delay(800);
}

void loop()
{
  for(i = 0; i < 10; i ++)   //10 obiegow dla pierwszego wyswietlacza
  {
    for(j = 0; j < 10; j ++)   //10 obiegow dla drugiego wyswietlacza
    {
      for(l = 0; l < 30; l ++)   //multiplekser oraz zmiana szybkosci odliczania
      {
        digitalWrite(WYSW_1, HIGH);
        digitalWrite(WYSW_2, LOW);
        wyswietlacz(i);
        delay(10);
        digitalWrite(WYSW_1, LOW);
        digitalWrite(WYSW_2, HIGH);
        wyswietlacz(j);
        delay(10);

        sterowanie();
      }
    }
  }
}

void sterowanie(void)   //funkcja sterujaca stoperem: S1-stop, S2-start, S3-reset
{
  if(digitalRead(S3) == LOW)   //reset i ponowne uruchomienie
  {
    while(digitalRead(S3) == LOW)
    {
      delay(50);
    }
    i = 0;
    j = 0;
    l = 0;
    
  } else if(digitalRead(S1) == LOW)   //zatrzymanie
    {
      while(digitalRead(S1) == LOW)
      {
        delay(50);
      }
      
      digitalWrite(WYSW_1, HIGH);
      digitalWrite(WYSW_2, HIGH);
      wyswietlacz(0);
      while(digitalRead(S2) == HIGH && digitalRead(S3) == HIGH);   //S2 uruchamia po zatrzymaniu, S3 resetuje po zatrzymaniu i uruchamia ponownie
    }
}

void wyswietlacz(byte cyfra)   //funkcja wyswietlajaca znaki
{
  switch(cyfra)
  {
    case 0:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, HIGH);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, LOW);
    break;

    case 1:
      digitalWrite(SEG_A, LOW);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, LOW);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, LOW);
      digitalWrite(SEG_G, LOW);
    break;

    case 2:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, LOW);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, HIGH);
      digitalWrite(SEG_F, LOW);
      digitalWrite(SEG_G, HIGH);
    break;

    case 3:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, LOW);
      digitalWrite(SEG_G, HIGH);
    break;

    case 4:
      digitalWrite(SEG_A, LOW);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, LOW);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
    break;

    case 5:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, LOW);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
    break;

    case 6:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, LOW);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, HIGH);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
    break;

    case 7:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, LOW);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, LOW);
      digitalWrite(SEG_G, LOW);
    break;

    case 8:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, HIGH);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
    break;

    case 9:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, HIGH);
      digitalWrite(SEG_C, HIGH);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, LOW);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
    break;

    default:
      digitalWrite(SEG_A, HIGH);
      digitalWrite(SEG_B, LOW);
      digitalWrite(SEG_C, LOW);
      digitalWrite(SEG_D, HIGH);
      digitalWrite(SEG_E, HIGH);
      digitalWrite(SEG_F, HIGH);
      digitalWrite(SEG_G, HIGH);
    break;
  }
}

https://youtu.be/awKnlbrRjF0

Edytowano przez Piot3R
  • Lubię! 1

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...