2013-12-18 13:57:07 [显示全部楼层]
5896浏览
查看: 5896|回复: 0

[转载] [Arduino模块]SRF02,SRF08,SRF10,SRF235超声波传感

[复制链接]
[Arduino模块]
SRF02, SRF08, SRF10, SRF235 超声波传感器

电路示意:



代码示例:

  1. /*
  2. Generic example for the SRF modules 02, 08, 10 and 235.
  3. Only the SRF08 uses the light saensor so when any other
  4. range finder is used with this code the light reading will
  5. be a constant value.
  6. */
  7. #include <Wire.h>
  8. #include <SoftwareSerial.h>
  9. #define rxPin 2                                   // Software serial pin for rx
  10. #define txPin 3                                   // Software serial pin for tx
  11. #define srfAddress 0x70                           // Address of the SRF08
  12. #define cmdByte 0x00                              // Command byte
  13. #define lightByte 0x01                            // Byte to read light sensor
  14. #define rangeByte 0x02                            // Byte for start of ranging data
  15. #define clrScrn 0x0C                              // Byte to clear LCD03 screen
  16. #define mvCsr 0x02                                // Byte to tell LCD03 we wish to move cursor
  17. #define hideCsr 0x04                              // Byte to hide the cursor
  18. SoftwareSerial lcd_03 =  SoftwareSerial(rxPin, txPin);    // defines a new software serial port for lcd_03
  19. byte highByte = 0x00;                             // Stores high byte from ranging
  20. byte lowByte = 0x00;                              // Stored low byte from ranging
  21. void setup(){
  22.   
  23.   lcd_03.begin(9600);                             // Begins serial port for LCD_03
  24.   Wire.begin();                              
  25.   delay(100);                                     // Waits to make sure everything is powered up before sending or receiving data
  26.   
  27.   pinMode(rxPin, INPUT);                                   
  28.   pinMode(txPin, OUTPUT);
  29.   lcd_03.print(clrScrn, BYTE);
  30.   lcd_03.print(hideCsr, BYTE);
  31.   lcd_03.println("SRF02/08/10/235");
  32.   
  33.   int softRev = getSoft();                        // Calls function to get software revision
  34.   lcd_03.print(mvCsr, BYTE);
  35.   lcd_03.print(0x3D, BYTE);                       // Move cursor to space 16
  36.   lcd_03.print("Software version: ");
  37.   lcd_03.print(softRev, DEC);                     // Print softRev to LCD03
  38.    
  39. }
  40. void loop(){
  41.   
  42.   int rangeData = getRange();                     // Calls a function to get range
  43.   lcd_03.print(mvCsr, BYTE);
  44.   lcd_03.print(0x15, BYTE);                       // Move cursor to space 21
  45.   lcd_03.print("Range = ");
  46.   lcd_03.print(rangeData, DEC);                   // Print rangeData to LCD03
  47.   lcd_03.print("   ");                            // Print some spaces to slear spaces after data
  48.   int lightData = getLight();                     // Call function to get light reading and store in lightData
  49.   lcd_03.print(mvCsr, BYTE);
  50.   lcd_03.print(41, BYTE);                         // Move cursor to space 41
  51.   lcd_03.print("light = ");
  52.   lcd_03.print(lightData, DEC);                   // Display lightData
  53.   lcd_03.print("  ");                             // Print some spaces to slear spaces after data
  54.   
  55. delay(100);                                      // Wait before looping
  56. }
  57. int getRange(){                                   // This function gets a ranging from the SRF08
  58.   
  59.   int range = 0;
  60.   
  61.   Wire.beginTransmission(srfAddress);             // Start communticating with SRF08
  62.   Wire.send(cmdByte);                             // Send Command Byte
  63.   Wire.send(0x51);                                // Send 0x51 to start a ranging
  64.   Wire.endTransmission();
  65.   
  66.   delay(100);                                     // Wait for ranging to be complete
  67.   
  68.   Wire.beginTransmission(srfAddress);             // start communicating with SRFmodule
  69.   Wire.send(rangeByte);                           // Call the register for start of ranging data
  70.   Wire.endTransmission();
  71.   
  72.   Wire.requestFrom(srfAddress, 2);                // Request 2 bytes from SRF module
  73.   while(Wire.available() < 2);                    // Wait for data to arrive
  74.   highByte = Wire.receive();                      // Get high byte
  75.   lowByte = Wire.receive();                       // Get low byte
  76.   range = (highByte << 8) + lowByte;              // Put them together
  77.   
  78.   return(range);                                  // Returns Range
  79. }
  80. int getLight(){                                   // Function to get light reading
  81.   
  82.   Wire.beginTransmission(srfAddress);
  83.   Wire.send(lightByte);                           // Call register to get light reading
  84.   Wire.endTransmission();
  85.   
  86.   Wire.requestFrom(srfAddress, 1);                // Request 1 byte
  87.   while(Wire.available() < 0);                    // While byte available
  88.   int lightRead = Wire.receive();                 // Get light reading
  89.    
  90.   return(lightRead);                              // Returns lightRead
  91.   
  92. }
  93. int getSoft(){                                    // Function to get software revision
  94.   
  95.   Wire.beginTransmission(srfAddress);             // Begin communication with the SRF module
  96.   Wire.send(cmdByte);                             // Sends the command bit, when this bit is read it returns the software revision
  97.   Wire.endTransmission();
  98.   
  99.   Wire.requestFrom(srfAddress, 1);                // Request 1 byte
  100.   while(Wire.available() < 0);                    // While byte available
  101.   int software = Wire.receive();                  // Get byte
  102.    
  103.   return(software);                              
  104.   
  105. }
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail