- /*
- 【Arduino】108種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
- 實驗一百三十三:夏普GP2Y0A02YK0F 紅外測距傳感器模塊 20-150cm 距離傳感器
- 項目:測試距離的方案之三
- 說明;參考V-cm圖, 用查表法, 連接Vout到Arduino的A0引腳, 測量頻率20Hz
- 需要進一步校對與調(diào)整參數(shù)
- Module UNO
- VCC —— 5V
- GND —— GND
- VO —— A0
- */
- float distance[] = {20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150};
- float voltage[14] = {2.5, 2, 1.55, 1.25, 1.1, 0.85, 0.8, 0.73, 0.7, 0.65, 0.6, 0.5, 0.45, 0.4};
- typedef struct {
- float maxDistance; //cm
- float minDistance; //cm
- float offset; //cm
- float distance; //cm,
- int frequency; //Hz
- int pin;
- }SHARP;
- SHARP Sharp = {150, 20, 0, 0, 20, A0};
- void getDistance(SHARP* Sharp) {
- float v = analogRead(Sharp->pin);
- v = v / 1024.0 * 5;
- int index = 0;
- for(index = 0; index < 14; index++) {
- if(v >= voltage[index]) {
- break;
- }
- }
- if(index == 0) {
- Sharp->distance = 20;
- } else if(index == 14) {
- Sharp->distance = 150;
- } else {
- Sharp->distance = map(v, voltage[index], voltage[index-1], distance[index], distance[index-1]);
- }
- }
- void setup() {
- Serial.begin(115200);
- }
- void loop() {
- static unsigned long lastTime = millis();
- if(millis() - lastTime > 1000/Sharp.frequency) {
- lastTime = millis();
- getDistance(&Sharp);
- Serial.println(Sharp.distance);
- // int v = analogRead(Sharp.pin);
- // Serial.println(v);
- }
- }
復制代碼
|