Go Down

Topic: timer probleempje  (Read 3690 times) previous topic - next topic

Smitty12


Daar mijn starterkit nog onderweg is, ben ik begonnen met "droogprogrammeren" van mijn eerste projectje.

Ik wil een timer maken die dmv 1 input , 4 tijden opslaat en deze vervolgens aftrekt van de eerste tijd.
Daarna moeten deze 4 tijden worden getoond.
Onderstaand staat het programmatje.
Ik heb behoorlijk door het forum heengefiets om de nodige info te verzamelen.


Mijn vragen :
1)  kunnen jullie er es naar kijken en op- en aanmerkingen maken.

2) is float lap1a;  // is  "float goed om van milli seconde te delen door 1000 ?

3) if ((X=1) && (val==HIGH)) {X=2; digitalWrite(ledpin,LOW); delay(500)};
worden {X=2; digitalWrite(ledpin,LOW); delay(500)} alle 3 uitgevoerd?

4) if ((X=8) && (val==HIGH)) {(X=1)}; //     geeft foutmelding bij compileren expected ':' before '}'token  :wat is er fout?

5) kan ik ergens  op het forum wat uitgebreidere voorbeelden vinden van de vergelijkingen?

Code: [Select]
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int inputPin = 7;
int ledpin=13;
int val=0;
int X=1;

void setup() {
  // put your setup code here, to run once:
int start=0;
int lap1=0;
int lap2=0;
int lap3=0;
int einde=0;
float lap1a;  // is  "float goed om van milli seconde te delen door 1000 ?
float lap2a;
float lap3a;
float eindea;

pinMode (ledpin,OUTPUT);
pinMode(inputPin, INPUT);

lcd.begin(16,2);
lcd.print("program smitty");
lcd.noCursor();
delay (3000);
}

void loop() {
  // put your main code here, to run repeatedly:
lcd.clear();
digitalWrite(ledpin, HIGH);
lcd.setCursor(0,0);
lcd.print("wacht tot begin");
val = digitalRead(inputPin); // leest of input hoog is.
if ((X=1) && (val==HIGH)) {X=2; digitalWrite(ledpin,LOW); delay(500)};//            is dit wel goed? worden deze 3 statements zo afgehandeld?
if ((X=2) && (val==HIGH)) {X=3; start=millis(); delay(500)};//                      slaat begin tijd op.
if ((X=3) && (val==HIGH)) {X=4; lap1=millis(); delay(500)}; //                      slaat 2e tijd op
if ((X=4) && (val==HIGH)) {X=5; lap2=millis(); delay(500)}; //                      slaat 3e tijd op
if ((X=5) && (val==HIGH)) {X=6; lap3=millis(); delay(500)}; //                      slaat 4e tijd op
if ((X=6) && (val==HIGH)) {X=7; einde=millis(); delay(1000)};//                     slaat 5e tijd op
if (X=7){X=8; lap1a=(lap1-start)/1000; lap2a=(lap2-start)/1000; lap3a=(lap3-start)/1000; eindea=(einde-start)/1000}; // berekend 4 tijden
delay(1500);
lcd.print(lap1a; lap2a); //                                                         laat 2 tijden zien op eerste regel lcd
lcd.setCursor(0,1);
lcd.print (lap3a; eindea);//                                                        laat 2 tijden zien op 2e regel lcd
if ((X=8) && (val==HIGH)) {(X=1)}; //                                               geeft foutmelding expected ':' before '}'token  :wat is er fout?
delay(1500);
}



weer bedankt voor de reacties.

nicoverduin

Dit gaat niet werken. Als jij een variabele maakt in de setup() dan is deze onbekend in o.a. loop().
zie: https://www.arduino.cc/en/Reference/Scope
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

Smitty12

dat stuk is duidelijk.
(Ik moet dus die variabelen naar boven de setup verplaatsen).

Heb je ook antwoord op mijn andere vragen?



Smitty12

Voor de eerste keer zonder fouten gecompileerd.
Opmerking van Nico aangepast.
Ook hoe het op scherm komt is denk ik nu wel goed.
Ik ben nog wel benieuwd naar de antwoorden op mijn andere vragen..


Code: [Select]
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int inputPin = 7;
int ledpin=13;
int val=0;
int X=1;
int start=0;
int lap1=0;
int lap2=0;
int lap3=0;
int einde=0;
float lap1a;  // is  "float goed om van milli seconde te delen door 1000 ?
float lap2a;
float lap3a;
float eindea;

void setup() {
  // put your setup code here, to run once:
pinMode (ledpin,OUTPUT);
pinMode(inputPin, INPUT);
lcd.begin(16,2);
lcd.print("program smitty");
lcd.noCursor();
delay (3000);
}

void loop() {
// put your main code here, to run repeatedly:
lcd.clear();
digitalWrite(ledpin, HIGH);
lcd.setCursor(0,0);
lcd.print("wacht tot begin");
val = digitalRead(inputPin); // leest of input hoog is.
if ((X=1) && (val==HIGH)) {X=2; digitalWrite(ledpin,LOW); delay(500);}//            is dit wel goed? worden deze 3 statements zo afgehandeld?
if ((X=2) && (val==HIGH)) {X=3; start=millis(); delay(500);}//                      slaat begin tijd op.
if ((X=3) && (val==HIGH)) {X=4; lap1=millis(); delay(500);} //                      slaat 2e tijd op
if ((X=4) && (val==HIGH)) {X=5; lap2=millis(); delay(500);} //                      slaat 3e tijd op
if ((X=5) && (val==HIGH)) {X=6; lap3=millis(); delay(500);} //                      slaat 4e tijd op
if ((X=6) && (val==HIGH)) {X=7; einde=millis(); delay(1000);}//                     slaat 5e tijd op
if (X=7){X=8; lap1a=(lap1-start)/1000; lap2a=(lap2-start)/1000; lap3a=(lap3-start)/1000; eindea=(einde-start)/1000;} // berekend 4 tijden
delay(1500);
//het op het scherm zetten van de 4 berekende tijden, 2 aan 2
lcd.setCursor(0,0);
lcd.print(lap1a);
lcd.setCursor(0,8);
lcd.print(lap2a); //                                                         
lcd.setCursor(1,0);
lcd.print(lap3a);
lcd.setCursor(1,8);
lcd.print (eindea);     //                                                       
//  wachten zodat de tijden opgeschreven kunnen worden op papier.
if ((X=8) && (val==HIGH)) {(X=1);}                                           
delay(1500);
}

nicoverduin

Samenvattend:
Een statement per regel
If (x=3. Is geen test of x 3 is.
En kijk eens naar switch case
Met vriendelijke groet / kindest regards
Nico Verduin
www.verelec.nl
Do not PM me for personal consultancy unless you are willing to pay for it.

Smitty12

Hallo Nico,

ik ben al aan het graven met "switch case"

Ik snap dan alleen niet het IF statement.

Het is toch een conditie en als die klopt wordt wat er wat er achterstaat uitgevoerd?


GijKieken

Hallo Smitty
Don't confuse the assignment operator [ = ] (single equal sign) with the comparison operator [ == ] (double equal signs), which evaluates whether two expressions are equal.

Smitty12

Hello Gij,

Are we switching to English?  ;-) (no problem for me).


is this then the correct code?
Code: [Select]
if ((X==1) && (val==HIGH)) {X=2; digitalWrite(ledpin,LOW); delay(500)};

shooter

de laatste ; moet voor het } staan, verder lijkt deze regel goed.
zoals jouw vraag 4 staat precies wat er fout is.

paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

GijKieken

Sorry was waarschijnlijk net daarvoor bezig op een anderstalig forum en van geen kwaad bewust.
Doe mij ook maar gewoon nederlands of vlaams.
Belangrijkste is dat je het snapt en dat het werkt.

Smitty12

Omdat de materialen nog niet binnen zijn, borrelt het (en dit zonder alcohol) verder. Ik zou graag in mijn timerproject, de laatst geklokt tijd via een speaker willen horen.

Nu heb ik al gezocht op "text to speech" en daar kwam meteen en dure module te voorschijn ( 59 dollar).

Ik zag ook iets via WAV langskomen.
Nu is het zo dat de eindtijden altijd tussen de 12 en 25 sec  zijn met 1 decimaal achter de komma.

Wat ik graag zou willen is, "Bose kwaliteit" geluid maar dan low budget.
Is dit mogelijk en hebben jullie een link hiervoor.
Ik ben hier waarschijnlijk technisch nog niet aan toe maar gezien de levertijd zou ik vast de spullen kunnen bestellen.






MAS3

"Bose kwaliteit" is een contradictio in terminis als je het mij vraagt.
Want wat dat merk doet, is een bewerking die een bepaald effect toevoegt aan het geluid, dat niet in de opname aanwezig is.
Dus dat spul komt bij mij het huis niet in.
Maar goed ik kan wel een voorstelling maken van wat je bedoelt.

Het is niet zo heel moeilijk hoor.
Zoek maar eens naar MP3 spelertjes voor Arduino.
Die zijn er (ruim voldoende), en niet erg duur.
Meestal gebruik je die met een SD kaartje (al dan niet in de micro uitvoering)
Nou hoor ik je al denken (ik ga ff door met het Bose effect), "MP3 is niet bepaald hoogste kwaliteit".
Maar de meeste van die dingen kunnen dus ook gewone *.wav bestanden afspelen.
En dat komt toch wel een heel eind in de buurt.
Nou moet je mij vooral niet op mijn woord geloven.
Dus moet je voor je er verder mee gaat eerst controleren of de oplossingen die je vindt, ook werkelijk in staat zijn om dat te doen.

Uiteraard ga je tegen dingen aanlopen.
Als je een navigatie systeem hebt zou je dat al eens tegengekomen kunnen zijn.
Zoals dat je dingen per woord gaat opslaan, maar losse woorden iets anders zijn als een zin die uitgesproken moet worden.
Bijvoorbeeld door intonatie.
En dat de losse woorden eerst even opgezocht moeten worden.
Dus dan krijg je mogelijk wat onnatuurlijke pauzes in de uit te spreken zinnen.
Maar het is natuurlijk wel een leuk ding om mee aan de slag te gaan.

En een serie *.wav bestanden gebruiken als zinnen, ga je die zelf inspreken ?
Dat je lekker de hele dag naar jezelf kunt luisteren ?
Ik zou het wel heel snel zat worden, maar dat ligt natuurlijk aan mijn eigen stem.
Je kunt ook aan iemand met een naar jouw smaak prettige stem vragen om de zaken in te spreken.
Maar dan moet je dat wel regisseren, vanwege de boven genoemde overwegingen.

Als je niet denkt (of niemand weet met de gewenste stem) aan een werkelijke stem, maar aan een synthetische, dan zal het een heel stevige uitdaging zijn om in de buurt te komen van de gewenste kwaliteit.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Smitty12

Aangezien het "Bose geluid" lastig wordt begrijp ik, gaan we voor het wat mindere Denon ;-)
Mijn doel is dat als bv de stopwatch 20.1 sec aangeeft op het display, dit dan ook gesproken wordt.

Kan ik dan de wav laten samen stellen door de 20 apart als wav, de . als wav en de 1 als wav te maken of moet ik voor elke mogelijk 1 wav maken?

Kun je een richting aangeven waar ik moet zoeken wat betreft speler?
(dit icm arduino uno) Ik zie van allerlei zaken langskomen..
 

GijKieken

Met deze zou je ook kunnen experimenteren.
<http://www.picaxe.com/docs/usb030.pdf>

MAS3

Quote from: Smitty12
Kan ik dan de wav laten samen stellen door de 20 apart als wav, de . als wav en de 1 als wav te maken of moet ik voor elke mogelijk 1 wav maken?
Dat is dus wat ik probeerde duidelijk te maken.
Als je het uit verschillende delen opbouwt, dan krijg je dus:

Quote
Twintig
Punt
Een
Als je het als een geheel gaat samenstellen, dan moet je dus een keuze maken uit (25-12)*10 = 130 bestanden.

Aangezien je een Uno hebt gekozen, heb je het gemak van de 'form factor'.
Dat is de unieke bouwvorm waar men voor gekozen heeft.
Daardoor kun je modules op je Uno prikken (maar ook op veel van diens broertjes).
Zulke modules worden shield genoemd.
Dus als je dan gaat zoeken naar "MP3 shield", dan vind je geheid een hoop Arduino compatibele producten.
De bekendste merken zijn wel zo'n beetje Sparkfun en Adafruit, en dat komt omdat die niet alleen het product aanbieden, maar ook ondersteuning.
Wat dat betreft staat Adafruit toch wel aan de top.
Have a look at "blink without delay".
Did you connect the grounds ?
Je kunt hier ook in het Nederlands terecht: http://arduino.cc/forum/index.php/board,77.0.html

Go Up