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
Link do komentarza
Share on other sites

@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ć 🙂 

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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ć. 

Link do komentarza
Share on other sites

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;
          
       
       
  }
}       
         

 

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

@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
Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.