collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Display de segmentos 4 e 2 Digitos  (Lida 8483 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.918
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #15 em: 31 de Maio de 2011, 00:11 »
Bom.. já consegui acho eu...

Alterei o código e adaptei para:

Código: [Seleccione]
// 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:


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..  ::)





Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.918
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #16 em: 31 de Maio de 2011, 10:41 »
 ;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)

Offline almamater

  • Mini Robot
  • *
  • Mensagens: 1.918
    • GrcByte - Projectos
Re: Display de segmentos 4 e 2 Digitos
« Responder #17 em: 03 de Junho de 2011, 22:54 »
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:

Código: [Seleccione]
// 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);
  }
}