tellen met een sevensegment display

Geef hier suggesties voor extra onderwerpen of andere dingen die je graag gewijzigd zou willen zien
Berichten: 1
Geregistreerd: 14 Jan 2020, 12:29

tellen met een sevensegment display

Berichtdoor N&Y » 14 Jan 2020, 12:47

hallo,

voor ons school project willen we een teller maken. door op een knopje te drukken moet het getal optellen.
we gebruiken een 4x seven segment display commanCathode. na een antal weken prutsen zijn we zover dat er getallen in voor komen. helaas loopt dit niet lekker.
de getallen lopen niet mooi en de display telt met de eerste 3 displays. de 4e telt alleen de tiende tallen.

in de code wordt alles goed getoont, we komen niet verder, kan iemand ons hier mee helpen.

/*

/** This code is edited by http://www.easymades.com **/


int Ntime = 0;
int Otime = 0;
float X = 0;
int time = 4;

int pinA = 2;
int pinB = 3;
int pinC = 4;
int pinD = 5;
int pinE = 6;
int pinF = 7;
int pinG = 8;
int pinDP = 9;

int DIG1 = 13;
int DIG2 = 12;
int DIG3 = 11;
int DIG4 = 10;

void choose_digit(char num) {
switch (num) {
default:
digitalWrite(pinA, LOW);
digitalWrite(pinB, LOW);
digitalWrite(pinC, LOW);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, HIGH);
break;
case 0:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, LOW);
break;
case 1:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, LOW);
break;
case 2:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, LOW);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, LOW);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, LOW);
break; case 3:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, LOW);
break; case 4:
digitalWrite(pinA, LOW);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, LOW);
break; case 5:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, LOW);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, LOW);
break; case 6:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, LOW);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, LOW);
break; case 7:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, LOW);
digitalWrite(pinE, LOW);
digitalWrite(pinF, LOW);
digitalWrite(pinG, LOW);
digitalWrite(pinDP, LOW);
break; case 8:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, HIGH);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, LOW);
break; case 9:
digitalWrite(pinA, HIGH);
digitalWrite(pinB, HIGH);
digitalWrite(pinC, HIGH);
digitalWrite(pinD, HIGH);
digitalWrite(pinE, LOW);
digitalWrite(pinF, HIGH);
digitalWrite(pinG, HIGH);
digitalWrite(pinDP, LOW);
break;
;
}
}

void pick_digit(int digit) {
digitalWrite(DIG1, LOW);
digitalWrite(DIG2, LOW);
digitalWrite(DIG3, LOW);
digitalWrite(DIG4, LOW);
switch (digit) {
case 1: digitalWrite(DIG1, HIGH);
break;
case 2: digitalWrite(DIG2, HIGH);
break;
case 3: digitalWrite(DIG3, HIGH);
break;
case 4: digitalWrite(DIG4, HIGH);
break;
}

}

void decimal_place() {
digitalWrite(pinDP, LOW);
}

void seven_segment(int number) {
unsigned char thousands = int (number / 1000);
unsigned char hundreds = int ((number / 100) % 100);
unsigned char tens = int ((number / 10) % 10);
unsigned char ones = int (number % 10); //1234
Serial.print(thousands);Serial.print(" ");
Serial.print(hundreds);Serial.print(" ");
Serial.print(tens);Serial.print(" ");
Serial.println(ones);

if (thousands > 0) {
choose_digit(thousands);
pick_digit(1);
}

if ((hundreds > 0) | (thousands > 0)) {
delay(time); choose_digit(hundreds);
pick_digit(2);
}

if ((tens > 0) | (hundreds > 0) | (thousands > 0)) {
//decimal_place();
delay(time); choose_digit(tens);
pick_digit(3);
}

// add decimal point
if (( ones >0) | (tens > 0) | (hundreds > 0) | (thousands > 0)) {
delay(time); choose_digit(ones);
pick_digit(4);
}

delay(time);

}

void setup() {
pinMode(DIG1, OUTPUT);
pinMode(DIG2, OUTPUT);
pinMode(DIG3, OUTPUT);
pinMode(DIG4, OUTPUT);
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
pinMode(pinE, OUTPUT);
pinMode(pinF, OUTPUT);
pinMode(pinG, OUTPUT);
pinMode(pinDP, OUTPUT);
Serial.begin(9600);
}

void loop() {
//float sensor_value = map(analogRead(A0),0,1023,0,3000); // for Flood level Sensor this Eg:3000 is the maximum level




// Continue counter and Visitors counter

Ntime = millis();
if (analogRead(A0) > 0) {

if ((Ntime - Otime) > 200) {
X = X + 1;
//Otime = Ntime; // Active this to visitors counter
{
if (X == 9999) {
X = 0;
}
}
}
Otime = Ntime; // Active this to continue counter

}

float sensor_value = X;




seven_segment(sensor_value);

}

Advertisement

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: tellen met een sevensegment display

Berichtdoor shooter » 14 Jan 2020, 22:40

Juliie zijn prima op weg hoor.
als je iets berekent in arduino moet je opletten dat je de volgorde van rekenen goed doet zoals /1000 %1000 beter op een losse regel.
een int is ook geen char , laat maar gewoon in int staan, het display ziet toch alleen maar int.
want een switch case kan alleen in int.
en zet er voor jezelf een paar serial.prints tussen dan weet je wat er gebeurt.
en ja het mag in engels, hoor geem probleem, maar dan wel met commentaar dus meer // gebruiken en zinnig natuurlijk.
ruim het ook een beetje op dus eerst de declaraties bovenaan
dan setup dan de loop en daaronder nog de functies die je gebruikt. met documentatie
bovenaan jullie namen en dergelijke.
En maak een schema in fritzing.
en tenslotte ook nog een mooi verslag met inhoudsopgave en lijsten en natuurlijk jullie programma.
paul deelen
shooter@home.nl

Terug naar Forum suggesties

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten