Arduino enkel handrörelse v1
Upptäcka hand rörelse riktning och hastighet.
Kan användas till att styra alla enheter... Jag låter dig magiska fantasin
Du behöver:
-1 * Arduino (Uno)
-3 eller 5 eller... IR-switch (jag använde E18D80NK) (6€)
-sladdar.
-3 * 1 k motstånd
-3 * lysdioder.
Koden:
---------------------------------------
#define sIRA 10
#define nu 8
#define sIRC 9
#define LED1 3
#define LED2 4
#define LED3 5
char order [3] = {'0', '0', '0'};
int indexOrder = 0;
hastigheten på upptäckt Ms
int Captspeed = 1;
långa tA;
långa tB;
långa tC;
void setup() {
Serial.BEGIN (9600);
för (int jag = 8; jag < = 10; i ++)
pinMode (i, ingång);
för (int jag = 3; jag < = 5; i ++)
pinMode (i, matas);
}
void loop() {
Återställningskommando efter 800 Msecond
om (millis () % 1000 > 800)
ResetCommand();
Om vi har 3 signaler, beräkna kommando
om (tA > 0 & & tB > 0 & & tC > 0)
{
int kommando = CalculateCommand();
om (kommandot < = 0)
DoCommand(command);
}
check för sensorer
IF(indexOrder > 2)
indexOrder = 0;
int vA = digitalRead(sIRA);
om (tA == 0 & & vA == 0) tA = millis();
int vB = digitalRead(sIRB);
om (tB == 0 & & vB == 0) tB = millis();
int vC = digitalRead(sIRC);
om (tC == 0 & & vC == 0) tC = millis();
Stoppa kommando
om (vA == 0 & & vB == 0 & & vC == 0)
{
DoCommand(0);
}
Delay(Captspeed);
}
int CalculateCommand(void)
{
Serial.Print ("tA =");
Serial.println(ta);
Serial.Print ("tB =");
Serial.println(tB);
Serial.Print ("tC =");
Serial.println(TC);
Delay(1);
om ((tA < = tB) & & tA < = tC)
återvända -3 ;// FORWRD
om ((tB < = tC) & & tB < = tA)
återvända -2 ;// vänster
om ((tC < = tB) & & tC < = tA)
retur -1; //RIGHT
Etc
tillbaka 1.
}
void DoCommand(int command)
{
Switch (kommando)
{
fall 0: Serial.println ("stoppad"), fördröjning (500), semester.
i mål -1: Serial.println ("sväng höger"); digitalWrite(LED1,HIGH); fördröjning (1000), semester.
i mål -2: Serial.println ("sväng vänster"); digitalWrite(LED2,HIGH); fördröjning (1000), semester.
mål -3: Serial.println ("gå fram"); digitalWrite(LED3,HIGH); fördröjning (1000), semester.
mål -4: Serial.println ("gå tillbaka"); fördröjning (1000), semester.
standard: Serial.println ("nr kommandot upptäckt"), semester.
}
ResetCommand();
}
void ResetCommand()
{
för (int jag = 3; jag < = 5; i ++)
{
digitalWrite (i, låg); //ALL lysdioder
}
tA = 0; //Reset tid A
tB = 0; //Reset tid B
tC = 0; //Reset då C
}