极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23891|回复: 7

【已解决】mpeg2560 连接 GY-30光线感应模块接线及代码问题

[复制链接]
发表于 2013-11-25 19:49:51 | 显示全部楼层 |阅读模式
本帖最后由 风笛丸 于 2013-12-17 16:50 编辑

本人小白一枚,为了方便,买了mpeg2560 + GY-30光线感应模块,该模块支持avr。但是网上没找到对应接arduino的例子,就按照模块说明书中接avr的方法 sda scl 对应mpeg2560接,add和GND连接接地,vcc接单片机供电。
问题1.这样接法是否正确。
问题2.哪位大大能够提供个简单的代码,拜谢!
问题3.程序代码写的不对,是否会烧坏 mpeg2560。(贵啊~~)
谢谢!
下面是自己乱改的程序,请赐教~
#include <iom16v.h>
int inputPin=20;  //这个对应的是SDA口 对应SCL口的时候也一样
void conversion(unsigned int i);
unsigned char display[9]={0,0,0,0,0,' ','l','u','x'};//显示数据
float  n;   
/*******************************
主程序
*******************************/
void setup()
{       
      Serial.begin(9600);
      pinMode(inputPin, INPUT);
}
void loop()              
    {
          delay(200);           
       n=analogRead(inputPin);                
       n=n/1.2;
       Serial.println(n);              
}

监视器中可以读出数字,300左右浮动,光线明暗都差不错,没有什么明显效果。
回复

使用道具 举报

发表于 2013-11-25 21:58:43 | 显示全部楼层
看一下I2C的用法吧 wire库里面的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-26 13:17:35 | 显示全部楼层
通讯的倒是找到了挺好的例子,但是GY-30的手册看不懂,感觉应该是要发送一个信号,返回一个光线值,但又不知道发送的信号内容是什么,一头雾水啊。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-26 13:26:55 | 显示全部楼层
从机应该有个编号吧,比如 Wire.beginTransmission(编号); 不然我信号发给谁呢,GY-30手册上也没找到,有用过这个模块的给指点下啊,谢谢  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-12-17 16:50:04 | 显示全部楼层

自己网上找的,经实测可用,感谢原作者

Arduino I2C 读取 GY-30 BH1750FVI 照度传感器


GND, VCC 就那么接


SCL, SDA 时钟,数据线接到对应口上

ADD 接 GND 为 'L' 地址模式, 接 VCC 为 'H' 地址模式

=====================================
  1. #include <Wire.h>  

  2. // GY-30

  3. // BH1750FVI

  4. // in ADDR 'L' mode 7bit addr

  5. #define ADDR 0b0100011

  6. // addr 'H' mode

  7. // #define ADDR 0b1011100

  8.    
  9. void setup() {

  10.   // put your setup code here, to run once:

  11.   Serial.begin(9600);

  12.   while (!Serial) {

  13.     ; // wait for serial port to connect. Needed for Leonardo only

  14.   }

  15.   Wire.begin();

  16.   pinMode(13, OUTPUT);

  17.      
  18.   Wire.beginTransmission(ADDR);

  19.   Wire.write(0b00000001);

  20.   Wire.endTransmission();

  21.    

  22. }
  23.    

  24. void loop() {

  25.   // put your main code here, to run repeatedly:

  26.   int val = 0;
  27.      

  28.   // reset

  29.   Wire.beginTransmission(ADDR);

  30.   Wire.write(0b00000111);

  31.   Wire.endTransmission();

  32.   digitalWrite(13, LOW);

  33.   delay(100);
  34.    

  35.   Wire.beginTransmission(ADDR);

  36.   Wire.write(0b00100000);

  37.   Wire.endTransmission();
  38.      

  39.   // typical read delay 120ms

  40.   delay(120);
  41.      

  42.   Wire.requestFrom(ADDR, 2); // 2byte every time

  43.      

  44.   for (val=0; Wire.available()>=1; ) {

  45.     char c = Wire.read();

  46.     //Serial.println(c, HEX);

  47.     val = (val << 8) + (c & 0xFF);

  48.   }   

  49.   val = val / 1.2;

  50.   Serial.print("lx: ");

  51.   Serial.println(val);
  52.      

  53.   Serial.println("OK");

  54.   digitalWrite(13, HIGH);

  55.   delay(100);

  56.    

  57. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-12-22 18:35:59 | 显示全部楼层
谢谢!!!
回复 支持 反对

使用道具 举报

发表于 2016-10-15 11:25:37 | 显示全部楼层
#include <Wire.h>  
// GY-30
// BH1750FVI
// in ADDR 'L' mode 7bit addr
#define ADDR 0b0100011
// addr 'H' mode
// #define ADDR 0b1011100
  
void setup() {
  // put your setup code here, to run once:
  Serial3.begin(115200);
  while (!Serial3) {
    ; // wait for Serial3 port to connect. Needed for Leonardo only
  }

  Wire.begin();
  pinMode(13, OUTPUT);
  Wire.beginTransmission(ADDR);
  Wire.write(0b00000001);
  Wire.endTransmission();
}
   
void loop() {
  // put your main code here, to run repeatedly:
  int val = 0;
  // reset
  Wire.beginTransmission(ADDR);
  Wire.write(0b00000111);
  Wire.endTransmission();
  digitalWrite(13, LOW);
  delay(100);
   
  Wire.beginTransmission(ADDR);
  Wire.write(0b00100000);
  Wire.endTransmission();
  // typical read delay 120ms
  delay(120);

  Wire.requestFrom(ADDR, 2); // 2byte every time

  for (val=0; Wire.available()>=1; ) {
    char c = Wire.read();
    //Serial3.println(c, HEX);
    val = (val << 8) + (c & 0xFF);
  }   
  val = val / 1.2;
  Serial3.print("lx: ");
  Serial3.println(val);
  Serial3.println("OK");
  digitalWrite(13, HIGH);
  delay(100);
}
回复 支持 反对

使用道具 举报

发表于 2017-8-9 10:24:39 | 显示全部楼层
求教 怎么同时驱动两个或 多少个 gy-30
回复 支持 反对

使用道具 举报

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

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 16:13 , Processed in 0.042794 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表