• Welcome to LusoRobótica - Robótica em Português.
 

Display de segmentos 4 e 2 Digitos

Started by almamater, 24 de February de 2011, 11:57

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

almamater

Bom.. já consegui acho eu...

Alterei o código e adaptei para:


// Segments that make each number when lit:
// 0 => ABCDEF
// 1 => BC
// 2 => ABDEG
// 3 => ABCDG
// 4 => BCFG
// 5 => ACDFG
// 6 => ACDEFG
// 7 => ABC
// 8 => ABCDEFG
// 9 => ABCDFG

#define A 4
#define B 9
#define C 8
#define D 6
#define E 7
#define F 5
#define G 2

#define T1 10 //Transistor 1
#define T2 11 //Transistor 2

// Pins for A B C D E F G, in sequence
const int segs[7] = { 4, 9, 8, 6, 7, 5, 2 };

// Segments that make each number
const byte numbers[10] = { 0b1000000, 0b1111001, 0b0100100, 0b0110000, 0b0011001, 0b0000010,
0b0000010, 0b1111000, 0b0000000, 0b0010000 };


// Common ANODE;
// OFF when pin is high
// and ON when pin is LOW

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  digitalWrite(T1, LOW);
  digitalWrite(T2, LOW);
}

void loop() {
  for (int digit1=0; digit1 < 10; digit1++) {
    for (int digit2=0; digit2 < 10; digit2++) {
      unsigned long startTime = millis();
      for (unsigned long elapsed=0; elapsed < 400; elapsed = millis() - startTime) {   //rapidez na passagem dos números/ incremento
        lightDigit1(numbers[digit1]);
        delay(5);
        lightDigit2(numbers[digit2]);
        delay(5);
      }
    }
  }
}

void lightDigit1(byte number) {
  digitalWrite(T1, HIGH);
  digitalWrite(T2, LOW);
  lightSegments(number);
}

void lightDigit2(byte number) {
  digitalWrite(T1, LOW);
  digitalWrite(T2, HIGH);
  lightSegments(number);
}

void lightSegments(byte number) {
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}



Resultado:
Segment Dual Digit Test II

A única coisa que me está a fazer confusão, mas que tb não é nenhum drama, é a passagem do 6 para o 7 (no 2º display)  parece que tem uma paragem... mas já revi e revi os ciclos e parece estar tudo Ok..  ::)





almamater

 ;D  ;D  ;D  ;D  ;D  :o  :o LOL

Por culpa das horas a que fiz isto e do sono associado.. nem reparei que passada do 4 para o 6.. :) Resolvido.  8)

almamater

Já agora, para alguém interessado em fazer algo parecido, aqui fica o resultado para o de 4 dígitos (ÂNODO COMUM):

Segment 4 Digit Display

Passo a passo aqui: https://sites.google.com/site/grcbyte/electronica/arduino/segment-4-digit

Código usado:

// Seven-segment LED Display
// Common ANODE pins 6, 8, 9, 12

// Segments that make each number when lit:
// 0 => ABCDEF
// 1 => BC
// 2 => ABDEG
// 3 => ABCDG
// 4 => BCFG
// 5 => ACDFG
// 6 => ACDEFG
// 7 => ABC
// 8 => ABCDEFG
// 9 => ABCDFG

// Arduino digital pins used to light up
// corresponding segments on the LED display

#define A 4
#define B 9
#define C 8
#define D 6
#define E 7
#define F 5
#define G 2

#define T1 10 //Transistor 1
#define T2 11 //Transistor 2
#define T3 12 //Transistor 3
#define T4 3  //Transistor 4


// Pins for A B C D E F G, in sequence
const int segs[7] = {4, 9, 8, 6, 7, 5, 2};

// Segments that make each number
const byte numbers[10] = { 0b0111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101,
0b1111101, 0b0000111, 0b1111111, 0b1101111 };

// Common ANODE;
// ON when pin is high
// and OFF when pin is LOW

//#define ON HIGH
//#define OFF LOW

void setup() {
  pinMode(A, OUTPUT);
  pinMode(B, OUTPUT);
  pinMode(C, OUTPUT);
  pinMode(D, OUTPUT);
  pinMode(E, OUTPUT);
  pinMode(F, OUTPUT);
  pinMode(G, OUTPUT);
  pinMode(T1, OUTPUT);
  pinMode(T2, OUTPUT);
  pinMode(T3, OUTPUT);
  pinMode(T4, OUTPUT);
  digitalWrite(T1, LOW);
  digitalWrite(T2, LOW);
  digitalWrite(T3, LOW);
  digitalWrite(T4, LOW);
}

void loop() {
  for (int digit1=0; digit1 < 10; digit1++) { // DISPLAY 1
       unsigned long startTime = millis();
      for (unsigned long elapsed=0; elapsed < 400; elapsed = millis() - startTime) {   //rapidez na passagem dos números/ incremento
        lightDigit1(numbers[digit1]);
        delay(5);
        }
    }
   
     for (int digit2=0; digit2 < 10; digit2++) {  // DISPLAY 2
      unsigned long startTime = millis();
      for (unsigned long elapsed=0; elapsed < 400; elapsed = millis() - startTime) {   //rapidez na passagem dos números/ incremento
          lightDigit2(numbers[digit2]);
        delay(5);
      }
     }
     
       for (int digit3=0; digit3 < 10; digit3++) {  // DISPLAY 3
      unsigned long startTime = millis();
      for (unsigned long elapsed=0; elapsed < 400; elapsed = millis() - startTime) {   //rapidez na passagem dos números/ incremento
          lightDigit3(numbers[digit3]);
        delay(5);
      }
     }
     
       for (int digit4=0; digit4 < 10; digit4++) { // DISPLAY 4
      unsigned long startTime = millis();
      for (unsigned long elapsed=0; elapsed < 400; elapsed = millis() - startTime) {   //rapidez na passagem dos números/ incremento
          lightDigit4(numbers[digit4]);
        delay(5);
      }
     }
     
     
     
       for (int digit=0; digit < 10; digit++) {  // DISPLAY 1 + 2 + 3 + 4
      unsigned long startTime = millis();
      for (unsigned long elapsed=0; elapsed < 500; elapsed = millis() - startTime) {   //rapidez na passagem dos números/ incremento
         lightDigit1(numbers[digit]);
        delay(5);
          lightDigit2(numbers[digit]);
        delay(5);
        lightDigit3(numbers[digit]);
        delay(5);
        lightDigit4(numbers[digit]);
        delay(5);
      }       
        }
       
       
}


void lightDigit1(byte number) {
  digitalWrite(T1, HIGH);
  digitalWrite(T2, LOW);
  digitalWrite(T3, LOW);
  digitalWrite(T4, LOW);
  lightSegments(number);
}

void lightDigit2(byte number) {
  digitalWrite(T1, LOW);
  digitalWrite(T2, HIGH);
  digitalWrite(T3, LOW);
  digitalWrite(T4, LOW);
  lightSegments(number);
}

void lightDigit3(byte number) {
  digitalWrite(T1, LOW);
  digitalWrite(T2, LOW);
  digitalWrite(T3, HIGH);
  digitalWrite(T4, LOW);
  lightSegments(number);
}

void lightDigit4(byte number) {
  digitalWrite(T1, LOW);
  digitalWrite(T2, LOW);
  digitalWrite(T3, LOW);
  digitalWrite(T4, HIGH);
  lightSegments(number);
}

void lightSegments(byte number) {
  for (int i = 0; i < 7; i++) {
    int bit = bitRead(number, i);
    digitalWrite(segs[i], bit);
  }
}