Sida 1 av 2

Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 09:45:39
av basekson
Hej,

Jag försöker få till en kod som läser av knapptryck från en IR-kontroll och om jag trycker 1,2,3 på mindre än 2 sekunder så aktiverar man en funktion. Trycker jag 1,2,3 på 3 sekunder så ska inget hända.

Har någon ett kort exempel på hur man kan få in tid i ekvationen? :)

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 09:49:30
av cosmox
Hej igen,

Har du pillat något med arduino innan?

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 09:55:51
av basekson
Ja ganska mycket. Jag har fått allt att fungera men problemet är bara att få till upplåsning av funktionen via hemliga koden 1,2,3 inom en viss tid.

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 10:18:41
av RDX*
Tänk på problemet som en tillståndsmaskin, där du har en timer som nollställer tillståndet.
Bild

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 10:47:43
av basekson
Tackar! Tänkte mest hur jag får till det där med tiden, kan PHP och där finns ju time() osv.

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 10:50:44
av Icecap
Det behövs ju en timer!
Jag brukar ha en timer-interrupt på 10ms för såna grejer, interruptrutinen räknar sedan ner timer-variablen.

Du kan göra såhär:
1: Om '1' kommer in ska timer-variabeln ställas till 2 sek. Om du har en 100Hz interrupt blir det alltså 2000.
2: Du ska även ha en sekvensräknare som ställas till 1.
3: Om nästa tecknet är '2' ska sekvensräknaren räknas upp till 2, annars ska timer-variabeln nollas och sekvensräknaren nollas.
4: Samma som 3 fast med '3'.
5: Om timern är större än noll OCH sekvensräknaren == 3 är saken biff och du kan starta självdestruktionen eller vad du vill.

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 10:55:19
av basekson
Hänger med på det Icecap, tack!

Jag hänger dock inte med på hur man får en timer i Arduino? Kan 1% av c++ men fattar basic för att ta mig runt och koppla samman saker.

Jag förstod inte 100Hz interrupt, hur jag får en timer på 10ms och hur jag gör en self destruct, övrigt förstår jag.
Stort tack för att du tar dig tid! :)

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 10:58:45
av johano
Det räcker väl att timerinteruptet som körs var 2:a sekund nollar sekvensräknaren.
Om sekvensräknaren når 3 så körs funktionen, typ såhär nånting i lite pseudokod:

Kod: Markera allt


volatile int sequence = 0;

void TimerInterrupt() 
{
    sequence = 0;
}

void setup()
{
   // setup a timer interrupt to fire every 2seconds
}

void loop() 
{
    while(1) 
    {
       if(BUTTON1_PRESSED && sequence==0)
          sequence=1;
       if(BUTTON2_PRESSED && sequence==1)
          sequence=2;
       if(BUTTON3_PRESSED && sequence==2)
          sequence=3;

      if(sequence==3)
      {
            // kör funktionen som ska köras.

            sequence=0; // nollställ
      }

    }
}

/j

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 11:00:18
av Icecap
"Self destruct" var en joke, det är såklart "gör vad som ska göras om kombinationen är tryck inom given tid".

Då jag inte besmittar mig med Arduino kan jag knappast hjälpa dig med den delen, jag vet dock att det finns en systime() som stegar 1ms åt gången som kan användas.

Kommer det '1' kan du spara systime() + 2000 i en variabel och när kombinationen är inne OCH systime() <= variabeln är saken biff.

Johano: med en 2 sek. interrupt kan du inte veta om du börjar vid 1,99 eller 2,01.

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 11:02:20
av johano
Icecap: Ah du har helt rätt såklart!! :doh:

tänkte inte på det :-)

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 11:03:47
av Icecap
johano: det är lugnt - jag har lärt mig det den hårda vägen...

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 11:03:52
av basekson
Vilka gudar ni är, tack!! :)

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 11:25:28
av Klas-Kenny
I Arduino kan du använda millis() på ett liknande sätt som time() i PHP.

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 11:27:19
av SeniorLemuren
Om du söker på timer Arduino så hittar du massor av exempel på olika sätt att använda timers i Arduino Här kommer ett enkelt exempel som finns med i Arduinos IDE under Fil/Exempel/ElapsedMillis

Simple example of using elapsedMillis library

Kod: Markera allt

/*  
  Simple example of using elapsedMillis library
  
  This example does othing more than blinking a LED... but the difference 
  here to just using delay(1000) to control the delay between blinks is that 
  you can do more in the loop - like get user input, check buttons, get sensor
  input and other tasks that take time - while you wait for the next time the 
  LED is to change state. All you need to do is add it before or after the 
  'if' statement that controls the check of the time elapsed. 
  
  This example code is in the public domain.
*/

#include <elapsedMillis.h>

elapsedMillis timeElapsed; //declare global if you don't want it reset every time loop runs

// Pin 13 has an LED connected on most Arduino boards.
int led = 13;

// delay in milliseconds between blinks of the LED
unsigned int interval = 1000;

// state of the LED = LOW is off, HIGH is on
boolean ledState = LOW;

void setup() 
{                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

void loop()
{
  if (timeElapsed > interval) 
  {				
      ledState = !ledState;         // toggle the state from HIGH to LOW to HIGH to LOW ... 
      digitalWrite(led, ledState);
      timeElapsed = 0;              // reset the counter to 0 so the counting starts over...
  }
}

Re: Arduino - Om en kombination händer inom 2 sek

Postat: 9 januari 2019, 11:51:27
av basekson
Otroligt stort Tack alla för era inputs! Nu känner jag att jag har vad jag behöver för att lyckas när jag kommer hem ikväll.

Väldigt imponerad över detta forum med bra snabb feedback, tack vare er!