Arduino - Om en kombination händer inom 2 sek
Arduino - Om en kombination händer inom 2 sek
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?
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
Hej igen,
Har du pillat något med arduino innan?
Har du pillat något med arduino innan?
Re: Arduino - Om en kombination händer inom 2 sek
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
Tänk på problemet som en tillståndsmaskin, där du har en timer som nollställer tillståndet.
Re: Arduino - Om en kombination händer inom 2 sek
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
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.
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
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!
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
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:
/j
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
}
}
}
Re: Arduino - Om en kombination händer inom 2 sek
"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.
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.
Senast redigerad av Icecap 9 januari 2019, 11:06:55, redigerad totalt 1 gång.
Re: Arduino - Om en kombination händer inom 2 sek
Icecap: Ah du har helt rätt såklart!!
tänkte inte på det
tänkte inte på det
Re: Arduino - Om en kombination händer inom 2 sek
johano: det är lugnt - jag har lärt mig det den hårda vägen...
- Klas-Kenny
- Inlägg: 11328
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: Arduino - Om en kombination händer inom 2 sek
I Arduino kan du använda millis() på ett liknande sätt som time() i PHP.
-
- Inlägg: 7803
- Blev medlem: 26 maj 2009, 12:20:37
- Ort: Kristinehamn
Re: Arduino - Om en kombination händer inom 2 sek
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
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
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!
Väldigt imponerad över detta forum med bra snabb feedback, tack vare er!