Jednoduché počítadlo se zápisem na segmentový display

Odpovědět
Grymo
Příspěvky: 6
Registrován: 05 lis 2019, 22:53
Reputation: 0

Jednoduché počítadlo se zápisem na segmentový display

Příspěvek od Grymo » 05 lis 2019, 22:58

Dobrý den,
toto je kód pro jednoduché počítadlo. Čísla se na displeji zobrazují ve formátu: 0003, 0015 adt., potřeboval bych se těchto nul před čísly zbavit. Prosím pomožte mi s úpravou kódu. Děkuji!
Zde je kód:

Kód: Vybrat vše

#define pinLatch 4
#define pinClk 7
#define pinData 8
#define ON LOW
#define OFF HIGH
int counter = 0;
const byte mapSegment[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
const byte mapDigit[] = {0xF1,0xF2,0xF4,0xF8};
 
void setup () {
  pinMode(pinLatch, OUTPUT);
  pinMode(pinClk, OUTPUT);
  pinMode(pinData, OUTPUT);
  WriteNumberToSegment(3 , 0);
}

void WriteNumberToSegment(byte Segment, byte Value) {
  digitalWrite(pinLatch, LOW);
  shiftOut(pinData, pinClk, MSBFIRST, mapSegment[Value]);
  shiftOut(pinData, pinClk, MSBFIRST, mapDigit[Segment] );
  digitalWrite(pinLatch, HIGH);
}

void WriteNumberToDisplay(byte number) {
  WriteNumberToSegment(0 , number / 1000);
  WriteNumberToSegment(1 , (number / 100) % 10);
  WriteNumberToSegment(2 , (number / 10) % 10);
  WriteNumberToSegment(3 , number % 10);
}

void loop() {
  bool button1 = digitalRead(A1);
  bool button2 = digitalRead(A2);
  bool button3 = digitalRead(A3);
  if (button1 == ON) {
    counter++;
    if (counter > 9999) {
      counter = 9999;
    }
    delay(200);
  }
  if (button2 == ON) {
    counter--;
    if (counter < 0) {
      counter = 0;
    }
  delay(200);
  }
  if (button3 == ON) {
    counter = 0;
    delay(200);
    }
  WriteNumberToDisplay(counter);
}

gilhad
Příspěvky: 497
Registrován: 07 bře 2018, 11:22
Reputation: 5

Re: Jednoduché počítadlo se zápisem na segmentový display

Příspěvek od gilhad » 06 lis 2019, 00:55

Napriklad takto primocare:

Kód: Vybrat vše


void WriteNumberToDisplay(byte number) {
if (number>=1000) { WriteNumberToSegment(0 , number / 1000); } else {WriteSpaceToSegment(0););
if (number>=100) { WriteNumberToSegment(1 , (number / 100) % 10);} else {WriteSpaceToSegment(1););
if (number>=10) { WriteNumberToSegment(2 , (number / 10) % 10);} else {WriteSpaceToSegment(2););
WriteNumberToSegment(3 , number % 10);
}

a napsat tu WriteSpaceToSegment(byte Segment){};

Grymo
Příspěvky: 6
Registrován: 05 lis 2019, 22:53
Reputation: 0

Re: Jednoduché počítadlo se zápisem na segmentový display

Příspěvek od Grymo » 06 lis 2019, 12:43

Děkuji mockrát :)

AstroMiK
Příspěvky: 288
Registrován: 08 pro 2017, 19:05
Reputation: 1

Re: Jednoduché počítadlo se zápisem na segmentový display

Příspěvek od AstroMiK » 06 lis 2019, 23:08

A ještě pozor na to, že proměnná typu "byte" může být maximálně 255, takže se ten řád tisíců stejně nikdy nezobrazí.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 0 hostů