问下 OLED 哪里买的呀?:D
谢谢
GIOCHEN 发表于 2012-5-9 00:48 static/image/common/back.gif
问下 OLED 哪里买的呀?
谢谢
记得thomas的帖子里有介绍地址
弘毅 发表于 2012-5-9 07:56 static/image/common/back.gif
记得thomas的帖子里有介绍地址
谢谢啦,我去 找找 买了几块 都不合适
本帖最后由 Ryanli 于 2012-5-12 13:41 编辑
D://1.jpg#include <Wire.h> // IIC运行库
//#include <SSD1306.h> // OLED运行库
//#define OLED_CS 42 // CS脚
//#define OLED_CLK 44 // CLK脚
//#define OLED_MOSI 46 // MISO脚
//#define OLED_RESET 48 // RST脚
//#define OLED_DC 50 // D/C脚
//SSD1306 oled(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
// 定义OLED
#define Acc 0x1D; // ADXL345的I2C地址
#define Gyr 0x69; // L3G4200D的I2C地址
#define Mag 0x1E; // HMC5883L的I2C地址
char str; // 输出字符串(切勿溢出)
int curve; // 曲线数据
int i = 0;
void setup() {
//oled.ssd1306_init(SSD1306_SWITCHCAPVCC);
//oled.clear(); // 清空oled屏
//oled.drawstring(0, 0, "Setting up...");
//oled.display(); // 显示到oled
// 初始化OLED
Serial.begin(9600);
sensor_init(); // 初始化传感器
delay(2000);
}
void loop() {
int x;
curve=gDat(Gyr,0); // 读取传感器,根据需要读取不同传感器数据
if (curve < -26) curve = -26; // 上溢出
if (curve > 26) curve = 26; // 下溢出
//oled.clear(); // 清空oled屏
for (x = 0; x < 127; x++)
{
Serial.print("x=");// 输出字符串
Serial.println(curve); // 输出到到oled //oled.drawline(x, 37 - curve, x+1, 37 - curve, WHITE);
} // 绘制曲线
//oled.display(); // 显示到oled
i++;
if (i == 128) i = 0;
delay(10);
}
int gDat(int device, int axis) {
// 读九轴姿态传感器寄存器函数
// For Arduino, by 黑马
// 调用参数表
// type device axis
// 0 1 2
// ADXL345 Acc x y z
// L3G4200D Gyr x y z
// HMC5883L Mag x z y
// Example
// 00 #include <Wire.h>
// 01 #define Acc 0x1D;
// 02 #define Gyr 0x69;
// 03 #define Mag 0x1E;
// 04
// 05void setup() {
// 06 sensor_init();
// 07 delay(1000);
// 08}
// 09
// 10void loop() {
// 11 Z-Gyroscope = gDat(Gyr, 2);
// 12 delay(50);
// 13}
int v;
byte vL, vH, address; // 存放byte数值
if (device == Acc) address = 0x32;// ADXL345的读数地址
if (device == Gyr) address = 0xA8;// L3G4200D的读数地址
if (device == Mag) address = 0x03;// HMC5883L的读数地址
address = address + axis * 2; // 数据偏移-坐标轴
Wire.beginTransmission(device); // 开始传输数据
Wire.send(address); // 发送指针
Wire.requestFrom(device, 2); // 请求2 byte数据
while(Wire.available() < 2); // 成功获取前等待
vL = Wire.receive();
vH = Wire.receive(); // 读取数据
Wire.endTransmission(); // 结束传输
if (device == Mag) v = (vL << 8) | vH;
else v = (vH << 8) | vL; // 将byte数据合并为Int
return v; // 返回读书值
}
void sensor_init() { // 配置九轴姿态传感器
writeRegister(Acc, 0x2D, 0b00001000); // 测量模式
// 配置ADXL345
writeRegister(Gyr, 0x20, 0b00001111); // 设置睡眠模式、x, y, z轴使能
writeRegister(Gyr, 0x21, 0b00000000); // 选择高通滤波模式和高通截止频率
writeRegister(Gyr, 0x22, 0b00000000); // 设置中断模式
writeRegister(Gyr, 0x23, 0b00110000); // 设置量程(2000dps)、自检状态、SPI模式
writeRegister(Gyr, 0x24, 0b00000000); // FIFO & 高通滤波
// 配置L3G4200D(2000 deg/sec)
writeRegister(Mag, 0x02, 0x00); // 连续测量
// 配置HMC5883L
}
void writeRegister(int device, byte address, byte val) { // 写寄存器
Wire.beginTransmission(device);
Wire.send(address);
Wire.send(val);
Wire.endTransmission();
}前辈你好,我是第一次用arduino,因为没有显示屏所以我把你的程序稍稍改了一下,想用串口观察,可是为什么出现好多同一种错误呢?还望前辈解答啊。
黑马 发表于 2012-3-22 09:38 static/image/common/back.gif
Powerpoint 2007……
黑马L3G4200D和ITG3205有啥区别?我的九轴是ITG3205的,现在要测试。好好研究研究才行!
本帖最后由 darkorigin 于 2012-5-29 19:28 编辑
今天入了个9轴模块,哈哈,很便宜。。等明天到货晒出来,
另外还有一ENC28J60的网络模块,也粉便宜说、嘎嘎
(之前打错了,呵呵,感谢弘毅大哥指正,HOHO!~~~~~)
darkorigin 发表于 2012-5-29 19:18 static/image/common/back.gif
今天入了个9轴模块,哈哈,很便宜。。等明天到货晒出来,
另外还有一NEC的网络模块,也粉便宜说、嘎嘎
{:soso_e103:} NEC网络模块。。。没见过。。坐等明天帖子。。。
本帖最后由 darkorigin 于 2012-5-29 19:34 编辑
弘毅 发表于 2012-5-29 19:25 static/image/common/back.gif
NEC网络模块。。。没见过。。坐等明天帖子。。。
说错了,是ENC28J60 的,不是NEC,哈哈,手误!!!
另外提下,我买到的貌似是9轴加气压传感的,就是4个感应芯片
L3G4200D+ADXL345+HMC5883L+BMP085
貌似看原理图上,还带1个电源稳压管,支持5V或者3.3电压的
研究了下传感器的数据手册。发现IIC地址是可以定义的。不过貌似只有2个地址选1个?
不知道是不是这样, 哪个高手知道方便的话回复下,谢谢!
darkorigin 发表于 2012-5-29 19:44 static/image/common/back.gif
研究了下传感器的数据手册。发现IIC地址是可以定义的。不过貌似只有2个地址选1个?
不知道是不是这样, 哪 ...
恩,一般是这样子的,两个地址选择一个。。ADXL345和ITG3205都可以选择。
弘毅 发表于 2012-5-29 19:48 static/image/common/back.gif
恩,一般是这样子的,两个地址选择一个。。ADXL345和ITG3205都可以选择。
之前不是有查询I2C地址的代码吗?直接可以看,真好,不过我发现有时间超过了那个120的范围,就查不到了!
Randy 发表于 2012-5-29 19:58 static/image/common/back.gif
之前不是有查询I2C地址的代码吗?直接可以看,真好,不过我发现有时间超过了那个120的范围,就查不到了!
不是吧,很多元件都是120以后啊,比如0XD1=209了啊。。。。。
而且按照理解应该可以有0X00-0XFF也就是说256个地址啊,120就无效了?
我先等模块到了再说,用MWC的程序上去测。看看如何,哈哈
用人家的开源项目中的模块,应该很爽啊
darkorigin 发表于 2012-5-29 20:29 static/image/common/back.gif
不是吧,很多元件都是120以后啊,比如0XD1=209了啊。。。。。
而且按照理解应该可以有0X00-0XFF也就是说 ...
嗯,这个我知道,我说的是之前一位友好贴出来的一个代码,那个代码是专门查询I2C地址的,只设置了120个,但是可以调的!呵呵!
本帖最后由 darkorigin 于 2012-5-29 21:07 编辑
Randy 发表于 2012-5-29 20:55 static/image/common/back.gif
嗯,这个我知道,我说的是之前一位友好贴出来的一个代码,那个代码是专门查询I2C地址的,只设置了120个, ...
我是看你说120以后都有问题,以为。。。。。
代码已经改了
byte end_address = 255;
好歹还是有基本编程基础的(毕竟当年还是摸着turbo pascal 和turbo C出来的,虽然学的东西基本都快忘光了);
再次感谢热心,呵呵,我们这些新手。。多亏坛子里面热心的朋友帮助,才有提高。。。