tijd stopwatch instellen
3 berichten
• Pagina 1 van 1
- johannes261
- Berichten: 3
- Geregistreerd: 20 Okt 2013, 15:51
tijd stopwatch instellen
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
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: tijd stopwatch instellen
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.
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.
Re: tijd stopwatch instellen
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)
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
shooter@home.nl
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 41 gasten