Stap 6: Code
De snelste manier om te beginnen is met behulp van de ingebouwde analoge pot schets die wordt geleverd met Arduino. Ik zal je laten zien de code die ik heb geschreven, maar u zult moeten aanpassen voor uw eigen behoeften. Het laten zien hoe je de schaal van de waarden en geeft u een goede sjabloon wel.Deze eerste schets hardcoded waarden gebruikt voor de pot. Dat wil zeggen, ik zag wat Arduino-uitgang voor de posities van het max en min van de pot en gebruikt die om erachter te komen hoeveel de vinger is verhuisd:
/*
AnalogReadSerial
Een analoge input op pin 0, leest, wordt het resultaat naar de seriële monitor afgedrukt.
Sluit het centrum pin van een potentiometer aan pin A0, buiten pinnen aan + 5V en de grond.
Deze voorbeeldcode is in het publieke domein.
*/
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;
de setup-routine wordt uitgevoerd zodra wanneer u drukt op reset:
VOID Setup {}
Initialiseer seriële communicatie met 9600 bits per seconde:
Serial.begin(9600);
Serial.println ("Using hardcoded max en min");
}
de routine van de lus wordt uitgevoerd over en weer forever:
void loop {}
analog0 = analogRead(A0);
analog1 = analogRead(A1);
analog2 = analogRead(A2);
analog3 = analogRead(A3);
Schaal van de waarden naar een bereik van [0,1]
scaled_thumb drijven (analog0 - 854.00) = /(920.00-854.00);
scaled_point drijven (analog1 - 860.00) = /(923.00-860.00);
scaled_middle drijven (analog2 - 862.00) = /(913.00-862.00);
scaled_ring drijven (analog3 - 848.00) = /(902.00-848.00);
Als (scaled_thumb < 0,00) {}
scaled_thumb = 0,00;
}
Als (scaled_point < 0,00) {}
scaled_point = 0,00;
}
Als (scaled_middle < 0,00) {}
scaled_middle = 0,00;
}
Als (scaled_ring < 0,00) {}
scaled_ring = 0,00;
}
Serial.Print ("duim:");
Serial.Print(scaled_thumb);
Serial.Print ("punt:");
Serial.Print(scaled_point);
Serial.Print ("Midden:");
Serial.Print(scaled_middle);
Serial.Print ("Ring:");
Serial.println(scaled_ring);
Serial.Print(scaled_point);
delay(1); vertraging in leest tussen voor stabiliteit. Gebruik dit voor foutopsporing
}
Hier is een andere versie schreef ik dat probeert te kalibreren van de posities van het max en min aan het begin. Ik vond dat dit niet helemaal zo goed te werken vanwege de plooibaarheid van mijn handschoen.
/*
AnalogReadSerial
Een analoge input op pin 0, leest, wordt het resultaat naar de seriële monitor afgedrukt.
Sluit het centrum pin van een potentiometer aan pin A0, buiten pinnen aan + 5V en de grond.
Deze voorbeeldcode is in het publieke domein.
*/
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;
de setup-routine wordt uitgevoerd zodra wanneer u drukt op reset:
VOID Setup {}
Initialiseer seriële communicatie met 9600 bits per seconde:
Serial.begin(9600);
Serial.println("Calibrating...");
Serial.println ("Open 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 ("verworven:");
Serial.Print(analog0_open);
Serial.Print("");
Serial.Print(analog1_open);
Serial.Print("");
Serial.Print(analog2_open);
Serial.Print("");
Serial.println(analog3_open);
Serial.println ("nauwe hand");
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 ("verworven:");
Serial.Print(analog0_close);
Serial.Print("");
Serial.Print(analog1_close);
Serial.Print("");
Serial.Print(analog2_close);
Serial.Print("");
Serial.println(analog3_close);
Serial.println ("Kalibratie voltooid.");
Serial.println("running...");
delay(2000);
}
de routine van de lus wordt uitgevoerd over en weer forever:
void loop {}
analog0 = analogRead(A0);
analog1 = analogRead(A1);
analog2 = analogRead(A2);
analog3 = analogRead(A3);
de waarde die u leest uitprinten:
Serial.Print ("duim:");
Serial.Print(analog0);
Serial.Print ("punt:");
Serial.Print(analog1);
Serial.Print ("Midden:");
Serial.Print(analog2);
Serial.Print ("Ring:");
Serial.println(analog3);
Schaal van de waarden naar een bereik van [0,1]
zweven scaled_thumb = (analog0 - analog0_open) / (analog0_close - analog0_open);
zweven scaled_point = (analog1 - analog1_open) / (analog1_close - analog1_open);
zweven scaled_middle = (analog2 - analog2_open) / (analog2_close - analog2_open);
zweven scaled_ring = (analog3 - analog3_open) / (analog3_close - analog3_open);
Serial.Print ("duim:");
Serial.Print(scaled_thumb);
Serial.Print ("punt:");
Serial.Print(scaled_point);
Serial.Print ("Midden:");
Serial.Print(scaled_middle);
Serial.Print ("Ring:");
Serial.println(scaled_ring);
delay(1); vertraging in tussen leest voor stabiliteit
}