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

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
Grymo
Příspěvky: 2
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:

#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: 384
Registrován: 07 bře 2018, 11:22
Reputation: 4

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: 2
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: 214
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 2 hosti