久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3705|回復: 0
打印 上一主題 下一主題
收起左側

Arduino程序 16路模塊PWM舵機驅動板控制器 機器人 IIC接口

[復制鏈接]
跳轉到指定樓層
樓主

  1. #include <Adafruit_PWMServoDriver.h>
  2. #include <Wire.h>
  3. #if defined(__AVR__)
  4. #define WIRE Wire
  5. #elif defined(CORE_TEENSY) // Teensy boards
  6. #define WIRE Wire
  7. #else // Arduino Due
  8. #define WIRE Wire1
  9. #endif

  10. // Set to true to print some debug messages, or false to disable them.
  11. #define ENABLE_DEBUG_OUTPUT true

  12. Adafruit_PWMServoDriver::Adafruit_PWMServoDriver(uint8_t addr) {
  13.   _i2caddr = addr;
  14. }

  15. void Adafruit_PWMServoDriver::begin(void) {
  16. WIRE.begin();
  17. reset();
  18. }


  19. void Adafruit_PWMServoDriver::reset(void) {
  20. write8(PCA9685_MODE1, 0x0);
  21. }

  22. void Adafruit_PWMServoDriver::setPWMFreq(float freq) {
  23.   //Serial.print("Attempting to set freq ");
  24.   //Serial.println(freq);
  25.   freq *= 0.9;  // Correct for overshoot in the frequency setting (see issue #11).
  26.   float prescaleval = 25000000;
  27.   prescaleval /= 4096;
  28.   prescaleval /= freq;
  29.   prescaleval -= 1;
  30.   if (ENABLE_DEBUG_OUTPUT) {
  31.     Serial.print("Estimated pre-scale: "); Serial.println(prescaleval);
  32.   }
  33.   uint8_t prescale = floor(prescaleval + 0.5);
  34.   if (ENABLE_DEBUG_OUTPUT) {
  35.     Serial.print("Final pre-scale: "); Serial.println(prescale);
  36.   }
  37.   
  38.   uint8_t oldmode = read8(PCA9685_MODE1);
  39.   uint8_t newmode = (oldmode&0x7F) | 0x10; // sleep
  40.   write8(PCA9685_MODE1, newmode); // go to sleep
  41.   write8(PCA9685_PRESCALE, prescale); // set the prescaler
  42.   write8(PCA9685_MODE1, oldmode);
  43.   delay(5);
  44.   write8(PCA9685_MODE1, oldmode | 0xa1);  //  This sets the MODE1 register to turn on auto increment.
  45.                                           // This is why the beginTransmission below was not working.
  46.   //  Serial.print("Mode now 0x"); Serial.println(read8(PCA9685_MODE1), HEX);
  47. }

  48. void Adafruit_PWMServoDriver::setPWM(uint8_t num, uint16_t on, uint16_t off) {
  49.   //Serial.print("Setting PWM "); Serial.print(num); Serial.print(": "); Serial.print(on); Serial.print("->"); Serial.println(off);

  50.   WIRE.beginTransmission(_i2caddr);
  51.   WIRE.write(LED0_ON_L+4*num);
  52.   WIRE.write(on);
  53.   WIRE.write(on>>8);
  54.   WIRE.write(off);
  55.   WIRE.write(off>>8);
  56.   WIRE.endTransmission();
  57. }

  58. // Sets pin without having to deal with on/off tick placement and properly handles
  59. // a zero value as completely off.  Optional invert parameter supports inverting
  60. // the pulse for sinking to ground.  Val should be a value from 0 to 4095 inclusive.
  61. void Adafruit_PWMServoDriver::setPin(uint8_t num, uint16_t val, bool invert)
  62. {
  63.   // Clamp value between 0 and 4095 inclusive.
  64.   val = min(val, 4095);
  65.   if (invert) {
  66.     if (val == 0) {
  67.       // Special value for signal fully on.
  68.       setPWM(num, 4096, 0);
  69.     }
  70.     else if (val == 4095) {
  71.       // Special value for signal fully off.
  72.       setPWM(num, 0, 4096);
  73.     }
  74.     else {
  75.       setPWM(num, 0, 4095-val);
  76.     }
  77.   }
  78.   else {
  79.     if (val == 4095) {
  80.       // Special value for signal fully on.
  81.       setPWM(num, 4096, 0);
  82.     }
  83.     else if (val == 0) {
  84.       // Special value for signal fully off.
  85.       setPWM(num, 0, 4096);
  86.     }
  87.     else {
  88.       setPWM(num, 0, val);
  89.     }
  90.   }
  91. }

  92. uint8_t Adafruit_PWMServoDriver::read8(uint8_t addr) {
  93.   WIRE.beginTransmission(_i2caddr);
  94.   WIRE.write(addr);
  95.   WIRE.endTransmission();

  96.   WIRE.requestFrom((uint8_t)_i2caddr, (uint8_t)1);
  97.   return WIRE.read();
  98. }

  99. void Adafruit_PWMServoDriver::write8(uint8_t addr, uint8_t d) {
  100.   WIRE.beginTransmission(_i2caddr);
  101.   WIRE.write(addr);
  102.   WIRE.write(d);
  103.   WIRE.endTransmission();
  104. }
復制代碼


16路模塊 PWM舵機驅動板 控制器 機器人 IIC接口 .zip

1.82 MB, 下載次數: 19, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区中文在线 | 久久精品二区亚洲w码 | 日韩中文字幕在线视频 | 鸡毛片 | 欧美久久久网站 | 久久天堂网 | 天天操综合网 | 精品不卡 | 久草在线免费资源 | 一级黄色片在线免费观看 | 午夜爽爽爽男女免费观看 | 小早川怜子xxxxaⅴ在线 | 国产视频日韩 | xx性欧美肥妇精品久久久久久 | www.久草.com| 自拍偷拍精品 | 在线免费观看黄色 | 人人天天操 | 91精品国产综合久久久久久丝袜 | 久久久久亚洲精品 | 99国产欧美 | 韩国av一区二区 | 久久久久久国产精品免费免费狐狸 | 日韩中文字幕久久 | 91精品国产综合久久小仙女图片 | 亚洲国产视频一区二区 | 欧美一区二区三区视频在线观看 | 久久久久国产精品午夜一区 | 亚洲va欧美va人人爽午夜 | 国产精品一码二码三码在线 | 国产三级精品视频 | 一级毛片网 | 日韩一区二区三区在线观看 | 国产欧美在线 | 99精品视频在线观看 | 日韩美女一区二区三区在线观看 | 婷婷中文在线 | 九九色综合 | 久久一区| 国产高清自拍视频在线观看 | 欧美日本久久 |