tijd stopwatch instellen

Arduino specifieke Software
Berichten: 3
Geregistreerd: 20 Okt 2013, 15:51

tijd stopwatch instellen

Berichtdoor johannes261 » 20 Okt 2013, 16:06

halllo

ik heb een programma geschreven voor een stopwatch deze telt wel maar langzamer dan een seconde.
dus bij 10 zijn er niet 10 seconden verstreken maar ongeveer 15 seconden.
Mijn vraag is dus hoe kan ik dat in het programma veranderen?

dit is mijn code:

int number=0, i, x=1;
const int buttonPin = 8; // the number of the pushbutton pin
int buttonState = 0;

void setup(){
pinMode(2, OUTPUT);//Latch
pinMode(3, OUTPUT);//Clock
pinMode(4, OUTPUT);//Data


pinMode(buttonPin, INPUT);

digitalWrite(2, LOW);
Serial.begin(115200);

}


void loop(){
sevenseg(number);

number= number + x;

if (number>9999)
x=-1;

if (number<0)
x= 1;

// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
x=0;
}


}


void sevenseg(int input_number){
short ones, tens, hundreds, thousands;

thousands = int(input_number/1000);
thousands = (thousands<<4)+1;

hundreds = int(input_number/100);
hundreds = hundreds-(int(hundreds/10)*10);
hundreds = (hundreds<<4)+2;

tens = int(input_number/10);
tens = tens-(int(tens/10)*10);
tens = (tens<<4)+4;

ones = input_number-(int(input_number/10)*10);
ones = (ones<<4)+8;

Serial.print(thousands);
Serial.print(" ");
Serial.print(hundreds);
Serial.print(" ");
Serial.print(tens);
Serial.print(" ");
Serial.print(ones);
Serial.println(" ");

//for(i=0; i<5; i++){
if(input_number>=1000){
digitalWrite(2, LOW);
shiftOut(4, 3,MSBFIRST, thousands);//(datapin, clockpin, data)
digitalWrite(2, HIGH);
delay(5);}

if(input_number>=100){
digitalWrite(2, LOW);
shiftOut(4, 3,MSBFIRST, hundreds);//(datapin, clockpin, data)
digitalWrite(2, HIGH);
delay(5);}

if(input_number>=10){
digitalWrite(2, LOW);
shiftOut(4, 3,MSBFIRST, tens);//(datapin, clockpin, data)
digitalWrite(2, HIGH);
delay(5);}

digitalWrite(2, LOW);
shiftOut(4, 3,MSBFIRST, ones);//(datapin, clockpin, data)
digitalWrite(2, HIGH);
delay(5);

digitalWrite(2, LOW);
}//sevenseg

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: tijd stopwatch instellen

Berichtdoor nicoverduin » 20 Okt 2013, 16:16

Omdat je een heleboel rekenwerk aan het doen bent.
Als ik het goed begrijp, wil jij duizenden, hondersten en tiende van een seconde tonen op het 7 segment display?
Dat zou betekenen dat je alles moet doen binnen een milli seconde en moet tonen. Dat is niet veel.
Daarnaast stuur je ook nog data over Serial wat vrij duur in resource gebruik is. Daarnaast wacht je 5 milli seconden na elke shift operatie waarvan onduidelijk is wat je daar precies doet.
Al met al genoeg redenen om er vanuit te gaan dat je altijd achter de feiten aanloopt.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

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

Re: tijd stopwatch instellen

Berichtdoor shooter » 27 Okt 2013, 11:53

omdat je toch niet elke milliseconde kunt kijken, beter om te werken met de data komende van millis()
en deze dan op je display zetten.
jij gaat er nu vanuit dat jouw hele cyclus precies 1 millis duurt en dat is veel meer met de delays alleen 20 milliseconden.
je kunt overigens dan maar net zo precies meten als jouw dubbele cyclustijd.
vooral dat Serialprint heeft veel tijd nodig (niks mis mee, maar dan alleen maar schrijven als het nodig is, bijvoorbeeld elke seconde (ik schrijf overigens precies hetzelfde als jou door lekker veel variabelen op scherm te zetten voor debugging. (doe dat in een aparte sub dan roep je die gewoon af en toe aan)
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 41 gasten