Detecteren hand beweging richting en snelheid.
Kan worden gebruikt om een apparaat te controleren... Ik laat u de magische verbeelding
U moet:
-1 * Arduino (Uno)
-3 of 5 of... IR-schakelaar (ik gebruikte E18D80NK) (6€)
-draden.
-3 * 1 k weerstanden
-3 * LEDs.
De code:
---------------------------------------
#define sIRA 10
#define sIRB 8
#define sIRC 9
#define LED1 3
#define LED2 4
#define LED3 5
char bestellingen [3] = {'0', '0', '0'};
int indexOrder = 0;
snelheid van detectie Ms
int Captspeed = 1;
lang tA;
lange tB;
lange tC;
VOID Setup {}
Serial.begin (9600);
for (int i = 8; ik < = 10; i ++)
pinMode (i, ingang);
for (int i = 3; ik < = 5; i ++)
pinMode (ik, OUTPUT);
}
void loop {}
Met de opdracht resetten na 800 Msecond
Als (millis () % 1000 > 800)
ResetCommand();
Als we 3 signalen, opdracht berekenen hebben
Als (tA > 0 & & tB > 0 & & tC > 0)
{
int opdracht = CalculateCommand();
Als (opdracht < = 0)
DoCommand(command);
}
selectievakje voor sensoren
if(indexOrder > 2)
indexOrder = 0;
int vA = digitalRead(sIRA);
Als (tA == 0 & & vA == 0) tA = millis();
int vB = digitalRead(sIRB);
Als (tB == 0 & & vB == 0) tB = millis();
int vC = digitalRead(sIRC);
Als (tC == 0 & & vC == 0) tC = millis();
Stoppen met opdracht
Als (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);
Als ((tA < = tB) & & tA < = tC)
retourneren -3 ;// FORWRD
Als ((tB < = tC) & & tB < = tA)
retourneren -2 ;// links
Als ((tC < = tB) & & tC < = tA)
terugkeer -1; //RIGHT
Enz
return 1;
}
VOID DoCommand(int command)
{
schakelaar (opdracht)
{
geval van 0: vertraging (500), Serial.println ("gestopt"); break;
kast -1: Serial.println ("Turn RIGHT"); digitalWrite(LED1,HIGH); vertraging (1000); break;
kast -2: Serial.println ("Turn LEFT"); digitalWrite(LED2,HIGH); vertraging (1000); break;
kast -3: Serial.println ("Ga door"); digitalWrite(LED3,HIGH); vertraging (1000); break;
kast -4: Serial.println ("Ga terug"); vertraging (1000); break;
standaard: Serial.println ("NO Command ontdekt"); break;
}
ResetCommand();
}
VOID ResetCommand()
{
for (int i = 3; ik < = 5; i ++)
{
digitalWrite (i, laag); //ALL LEDs
}
tA = 0; //Reset tijd A
tB = 0; //Reset tijd B
tC = 0; //Reset tijd C
}