Bygga en $30k CyberGlove för $40 - inskickad av BayLab för Instructables Sponsring programmet (6 / 6 steg)
Steg 6: kod
Det snabbaste sättet att komma igång är med den inbyggda analoga potten skiss som kommer med Arduino. Jag ska visa dig koden jag skrev, men måste du ändra den för dina egna behov. Det visar du hur du skala värden och ger dig en bra mall dock.
Denna första skiss använder hårdkodade värden för potten. Det är, jag såg vad Arduino utgång för max och min placerar av potten och brukade de räkna ut hur mycket finger har flyttat:
/*
AnalogReadSerial
Läser en analog ingång på stift 0, skriver ut resultatet till seriell bildskärmen.
Bifoga mittstiftet av en potentiometer pin A0, utanför pins till + 5V och jord.
Denna exempelkod är offentlig.
*/
float analog0;
float analog1;
float analog2;
float analog3;
float analog0_close;
float analog1_close;
float analog2_close;
float analog3_close;
float analog0_open;
float analog1_open;
float analog2_open;
float analog3_open;
Rutinen installationsprogrammet körs en gång när du trycker på reset:
void setup() {
initiera seriell kommunikation på 9600 bitar per sekund:
Serial.BEGIN(9600);
Serial.println ("använda hårdkodade max och min");
}
loop rutinen körs för evigt om och om igen:
void loop() {
analog0 = analogRead(A0);
Analog1 = analogRead(A1);
Analog2 = analogRead(A2);
Analog3 = analogRead(A3);
Skala värdena för en rad [0,1]
flyta scaled_thumb = (analog0 - 854.00) /(920.00-854.00);
flyta scaled_point = (analog1 - 860.00) /(923.00-860.00);
flyta scaled_middle = (analog2 - 862.00) /(913.00-862.00);
flyta scaled_ring = (analog3 - 848.00) /(902.00-848.00);
om (scaled_thumb < 0,00) {
scaled_thumb = 0.00;
}
om (scaled_point < 0,00) {
scaled_point = 0.00;
}
om (scaled_middle < 0,00) {
scaled_middle = 0.00;
}
om (scaled_ring < 0,00) {
scaled_ring = 0.00;
}
Serial.Print ("tumme:");
Serial.Print(scaled_thumb);
Serial.Print ("punkt:");
Serial.Print(scaled_point);
Serial.Print ("mellersta:");
Serial.Print(scaled_middle);
Serial.Print ("Ring:");
Serial.println(scaled_ring);
Serial.Print(scaled_point);
Delay(1); fördröjning mellan läsningar för stabilitet. Använda detta för felsökning
}
Här är en annan version jag skrev som används för att kalibrera de högsta och lägsta ståndpunkterna i början. Jag hittade detta inte arbete lika bra på grund av böjligheten hos min handske.
/*
AnalogReadSerial
Läser en analog ingång på stift 0, skriver ut resultatet till seriell bildskärmen.
Bifoga mittstiftet av en potentiometer pin A0, utanför pins till + 5V och jord.
Denna exempelkod är offentlig.
*/
float analog0;
float analog1;
float analog2;
float analog3;
float analog0_close;
float analog1_close;
float analog2_close;
float analog3_close;
float analog0_open;
float analog1_open;
float analog2_open;
float analog3_open;
Rutinen installationsprogrammet körs en gång när du trycker på reset:
void setup() {
initiera seriell kommunikation på 9600 bitar per sekund:
Serial.BEGIN(9600);
Serial.println("Calibrating...");
Serial.println ("öppen hand.");
Delay(2000);
analog0 = analogRead(A0);
Analog1 = analogRead(A1);
Analog2 = analogRead(A2);
Analog3 = analogRead(A3);
analog0_open = analog0;
analog1_open = analog1;
analog2_open = analog2;
analog3_open = analog3;
Serial.Print ("förvärvat:");
Serial.Print(analog0_open);
Serial.Print("");
Serial.Print(analog1_open);
Serial.Print("");
Serial.Print(analog2_open);
Serial.Print("");
Serial.println(analog3_open);
Serial.println ("nära håll");
Delay(2000);
analog0 = analogRead(A0);
Analog1 = analogRead(A1);
Analog2 = analogRead(A2);
Analog3 = analogRead(A3);
analog0_close = analog0;
analog1_close = analog1;
analog2_close = analog2;
analog3_close = analog3;
Serial.Print ("förvärvat:");
Serial.Print(analog0_close);
Serial.Print("");
Serial.Print(analog1_close);
Serial.Print("");
Serial.Print(analog2_close);
Serial.Print("");
Serial.println(analog3_close);
Serial.println ("kalibrering fullständig.");
Serial.println("Running...");
Delay(2000);
}
loop rutinen körs för evigt om och om igen:
void loop() {
analog0 = analogRead(A0);
Analog1 = analogRead(A1);
Analog2 = analogRead(A2);
Analog3 = analogRead(A3);
skriva ut värdet du läsa:
Serial.Print ("tumme:");
Serial.Print(analog0);
Serial.Print ("punkt:");
Serial.Print(Analog1);
Serial.Print ("mellersta:");
Serial.Print(Analog2);
Serial.Print ("Ring:");
Serial.println(Analog3);
Skala värdena för en rad [0,1]