timer starten met knop ?

Arduino specifieke Software
Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

timer starten met knop ?

Berichtdoor dirk ambu » 16 Jun 2013, 20:20

beste

ik zoek een manier om een timer te gebruiken van een arduino uno
wat ik graag zou willen is het volgende
als ik op knop 1 druk dan schakelt er een relais om deze blijft bekrachtigt voor 1 uur na dat uur valt hij weer terug in zijn oude stand
tenzij ik binnen dat uur weer op de knop druk dan komt er 15 minuten bij en blijft hij zeg 1uur en 15 minuten bekrachtigt
iedere keer dat ik op de knop druk komt er een kwartier bij
als ik vervolgens de knop langer dan 5 seconden ingedrukt houd dan de timer op en valt terug naar 0 het relais valt ook terug

en dit zou ik dan 2 maal willen hebben op 1 arduino uno is dit mogelijk ?


kan iemand mij opweg helpen met de timer functie en hoe opdrachten uit te voeren via de timer
ik heb geen idee hoe dit werkt en via google kom ik er ook niet uit ik zoek denk ik op de verkeerde tekst

ik hoor het graag


groet dirk ambu

Advertisement

Gebruikers-avatar
Berichten: 21
Geregistreerd: 17 Mei 2013, 19:30
Woonplaats: Twello

Re: timer starten met knop ?

Berichtdoor Timpje » 17 Jun 2013, 19:54

Hallo Drik,

Als ik het goed begrijp wil je 2 dingen tegelijk laten lopen? Dat betekend dat de "delay" functie niet kan, deze vertraagd alles en in de delay periode wordt er niet meer naar de inputs gekeken en de outputs niet veranderd worden.
Ik weet niet of je de "blink without delay" voorbeeld programma al eens bekeken hebt? Want wat ik zou doen is denk ik die sketch nemen als basis en die veranderen.
Ik ben momenteel even druk met een toets week dus heb geen tijd om wat te proberen voor je..
Misschien heb je deze pagina al gezien, misschien ook niet: http://playground.arduino.cc/Code/SimpleTimer

Mvg Tim
Arduino Uno, duemilanove & wat losse Atmega 328 :)

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

Re: timer starten met knop ?

Berichtdoor nicoverduin » 17 Jun 2013, 20:12

Op zich is wat je wilt wel mogelijk, maar het ligt er een beetje aan hoe kritisch je het allemaal wilt hebben:
a) moet het exact zijn?
b) wat als je de knop op de allerlaatste seconde indrukt terwijl het uur (of 1:15 etc) net afloopt?
c) wil je de tijd op een scherm zien?

Kijk als het allemaal niet zo kritisch is(dus bij enkele seconden staat de tent niet gelijk in brand) dan zou je de afweging kunnen maken gebruik te maken van millis() functie.
Op het moment dat je de knop indruk vraag je de tijd op in millis() (=systeem tijd in milliseconden)
Daar tel je 1 uur bij op (60 x 60 x 1000);
Daarna kun je verder in de loop gewoon de knoppen aftesten ed., en als je er een indrukt kun je de desbetreffende tijd verhogen met 15 x 60 x 1000 milliseconden (= 15 minuten).
Meer doe je eigenlijk niet dus in de loop. Idem als de knop 5 seconden wordt ingedrukt.
Ik wil nog ff niets verklappen maar dat je het zelf eerst uitzoekt. maar dit kan.

suc6
Nico
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: timer starten met knop ?

Berichtdoor dirk ambu » 20 Jun 2013, 20:55

Timpje schreef:Hallo Drik,

Als ik het goed begrijp wil je 2 dingen tegelijk laten lopen? Dat betekend dat de "delay" functie niet kan, deze vertraagd alles en in de delay periode wordt er niet meer naar de inputs gekeken en de outputs niet veranderd worden.
Ik weet niet of je de "blink without delay" voorbeeld programma al eens bekeken hebt? Want wat ik zou doen is denk ik die sketch nemen als basis en die veranderen.
Ik ben momenteel even druk met een toets week dus heb geen tijd om wat te proberen voor je..
Misschien heb je deze pagina al gezien, misschien ook niet: http://playground.arduino.cc/Code/SimpleTimer

Mvg Tim


beste tim

bedankt voor de info

maar ik zal proberen het nog iets beter te omschrijven wat ik wil hebben

ik wil hebben 1 kasje met 2 knopjes
als ik knopje 1 indruk dan gaat er een timer aftellen van 60 minuten en gaat er een uitgang zeg even port 13 van laag naar hoog dat blijft hij tot dat de 60 minuten om zijn
maar druk ik tijdens de 60 minuten zeg dat de timer nog maar 15 minuten te gaan had dan komt er 15 minuten bij en duurt het 30 minuten voordat de timer uit geteld is
druk ik schakelaar 1 zeg 5 seconden in dan gaat de timer altijd terug naar 0 en gaat port 13 naar laag

en dat dan 2 maal

wat ik graag eerst zou willen maken is 1 schakelaar die een timer start van 10 minuten waardoor port 13 van laag naar hoog gaat
ik begrijp niet hoe ik een timer kan koppelen aan een uitgang
ik begrijp wel hoe ik dat met delay zou kunnen maken maar daar heb ik in dit geval niets aan

helaas is mijn engels niet zo goed waardoor het lastig is om de website goed te begrijpen

groet dirk ambu

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: timer starten met knop ?

Berichtdoor dirk ambu » 20 Jun 2013, 21:03

nicoverduin schreef:Op zich is wat je wilt wel mogelijk, maar het ligt er een beetje aan hoe kritisch je het allemaal wilt hebben:
a) moet het exact zijn?
b) wat als je de knop op de allerlaatste seconde indrukt terwijl het uur (of 1:15 etc) net afloopt?
c) wil je de tijd op een scherm zien?

Kijk als het allemaal niet zo kritisch is(dus bij enkele seconden staat de tent niet gelijk in brand) dan zou je de afweging kunnen maken gebruik te maken van millis() functie.
Op het moment dat je de knop indruk vraag je de tijd op in millis() (=systeem tijd in milliseconden)
Daar tel je 1 uur bij op (60 x 60 x 1000);
Daarna kun je verder in de loop gewoon de knoppen aftesten ed., en als je er een indrukt kun je de desbetreffende tijd verhogen met 15 x 60 x 1000 milliseconden (= 15 minuten).
Meer doe je eigenlijk niet dus in de loop. Idem als de knop 5 seconden wordt ingedrukt.
Ik wil nog ff niets verklappen maar dat je het zelf eerst uitzoekt. maar dit kan.

suc6
Nico


beste nico

bedankt voor je reactie
even de antwoorden op jou vragen
a) moet het exact zijn? nee niet echt het gaat meer om minuten dan om secondes
b) wat als je de knop op de allerlaatste seconde indrukt terwijl het uur (of 1:15 etc) net afloopt?de kans dat dit gebeurd is zo klein dat dit te verwaarlozen is
c) wil je de tijd op een scherm zien? ja dat wel maar daar wil ik pas later aan gaan werken eerst maar eens zien of ik het werkend krijg zonder scherm dat is al moeilijk genoeg

ik ga maar eens kijken of ik eruit kom al zou het wel wenselijk zijn als je iets zou verklappen maar met zelf uitzoek leer ik zeker meer

groet dirk ambu

Berichten: 85
Geregistreerd: 10 Jan 2013, 14:51
Woonplaats: Waddinxveen

Re: timer starten met knop ?

Berichtdoor Karel » 20 Jun 2013, 21:57

Hoi Dirk,

Je zou kunnen denken aan het vastleggen van het moment van aflopen van de timer. Dat kan 1 timer zijn, maar kunnen er ook meerdere zijn. Er is er in je programma maar 1 van belang, en dat is de timer die het eerste afloopt.

Meer zeg nog niet, ik wil Nico niet teveel gras voor de voeten wegmaaien.

Groet, Karel
If you think education is expensive, try ignorance! (Derek Bok)

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: timer starten met knop ?

Berichtdoor dirk ambu » 20 Jun 2013, 23:31

beste

ik probeer nu eerst om twee programma,s samen te voegen door Blink without Delay en button uit de software voorbeelden samen te voegen maar het lukt niet :|
wat ik nu doe lijkt niet te kunnen
kan iemand kijken wat ik fout doe ik krijg nu een foutmelding die ik niet opgelost krijg
Code: Alles selecteren
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  13;      // the number of the LED pin

// Variables will change:
int buttonState = 0;         // variable for reading the pushbutton status
int ledState = LOW;             // ledState used to set the LED
long previousMillis = 0;        // will store last time LED was updated

// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 1000;           // interval at which to blink (milliseconds)

void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);   
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin, INPUT);   
}

void loop()
{
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the
  // difference between the current time and last time you blinked
  // the LED is bigger than the interval at which you want to
  // blink the LED.
  unsigned long currentMillis = millis();
 
   // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  if (buttonState == HIGH)(currentMillis - previousMillis > interval)
    // save the last time you blinked the LED
   // previousMillis = currentMillis;
    else millis = 0
   
     if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}


ik hoor het graag

groet dirk ambu

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

Re: timer starten met knop ?

Berichtdoor nicoverduin » 21 Jun 2013, 13:41

Dat je foutmeldingen krijgt kan ik wel voorstellen:
Code: Alles selecteren
  if (buttonState == HIGH)(currentMillis - previousMillis > interval)

Wat wil je precies bereiken met dit statement? ALS button = HIGH EN als currentMillis - previousMillis > interval?

Code: Alles selecteren
    else millis = 0

";" ontbreekt en millis is een functie en geen variabele.

Daarnaast heb je een schakelaar die dicht is als hij ingedrukt is? of open? Kan jehier iets meer over vertellen. De reden is namelijk dat als je een schakelaar gebruikt die "dicht" is als hij is ingedrukt, je dan beter een pin aan de ingang zet en de ander naar GND. En tevens na het definieren als INPUT dit statement toevoegd:
Code: Alles selecteren
digitalWrite(buttonPin,HIGH);

Die zorgt dan dat er een "high" wordt gelezen als de knop niet is ingedrukt. Hij voegt namelijk een pull-up weerstand naar 5V aan de ingang zodat je altijd zeker weet wat de input heeft.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: timer starten met knop ?

Berichtdoor dirk ambu » 21 Jun 2013, 16:24

nicoverduin schreef:Dat je foutmeldingen krijgt kan ik wel voorstellen:
Code: Alles selecteren
  if (buttonState == HIGH)(currentMillis - previousMillis > interval)

Wat wil je precies bereiken met dit statement? ALS button = HIGH EN als currentMillis - previousMillis > interval?

Code: Alles selecteren
    else millis = 0

";" ontbreekt en millis is een functie en geen variabele.

Daarnaast heb je een schakelaar die dicht is als hij ingedrukt is? of open? Kan jehier iets meer over vertellen. De reden is namelijk dat als je een schakelaar gebruikt die "dicht" is als hij is ingedrukt, je dan beter een pin aan de ingang zet en de ander naar GND. En tevens na het definieren als INPUT dit statement toevoegd:
Code: Alles selecteren
digitalWrite(buttonPin,HIGH);

Die zorgt dan dat er een "high" wordt gelezen als de knop niet is ingedrukt. Hij voegt namelijk een pull-up weerstand naar 5V aan de ingang zodat je altijd zeker weet wat de input heeft.


hoi nico

ik was opzoek en ben dat nu nog om het programma blink without delay te starten via een knop maar daar kom ik niet uit
ik probeer meer te begrijpen van de timer functie maar ik loop vast en dan zo vast dat ik niet meer begrijp wat ik wilde bereiken

de knop die ik gebruik werkt nu als INPUT_PULLUP en dat werkt echter weet ik niet wat het in de toekomst zal worden ik weet niet wat beter werkt

maar om het simpel te houden ik zoek me rot en kan weinig vinden over gebruik van een timer
en als ik het lijkt gevonden te hebben begrijp ik het niet pff

maar al bij al ben ik nog geen steek verder maar wel 5 uur verder haha

groet dirk ambu

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

Re: timer starten met knop ?

Berichtdoor nicoverduin » 21 Jun 2013, 16:28

Ik heb hem al voor je klaar liggen voor 2 timers, maar dan is de lol eraf :) Maar als je hem perse wil hebben.... M.a.w. geef je nu al op...

Overigens de richting van millis() is goed. En in jouw geval zou ik me ff niet druk maken over een timer. hou het simpel Het programma is maar 1K6 groot.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 29 gasten