tom 发表于 2013-8-5 19:54:41

光敏电阻亮度测量OLED12864以点形式屏幕显示效果

本帖最后由 tom 于 2013-8-6 22:41 编辑

光敏电阻亮度测量以点的运动形态在OLED12864屏幕显示效果
/*
作者:tom
时间:2013年08月05日
IDE版本号:1.01
发表地址:www.geek-workshop.com
作用:

*/

实验器材:
Mango 控制器(Arduino UNO兼容控制器)
扩展板一块
双头母线若干
光敏电阻模块
Miscrodino OLED (I2C接口的12864显示器)

Arduino GND接OLED GND
Arduino 3.3V 接 OLED VCC
Arduino A4 接 OLED SDA
Arduino A5 接 OLED SCL

Arduino GND 接 光敏电阻模块的GND
Arduino VCC 接光敏电阻模块的 VCC
Arduino A0 接光敏电阻的检查接口 OUT

光敏电阻模块原理图

坐标系描绘
在屏幕的(10,60)为原点,水平线 Y=10
                        坚平线 X=60
使用用drawLine()画两条直线
u8g.drawLine(0,60,128,60);//描绘坐标系X轴
u8g.drawLine(10,0,10,64);//描绘坐标系Y轴
再画小箭头
水平线以(128,60)点,坚直线以(10,0)点画小箭头
u8g.drawLine(10,0,7,4);//描绘小箭头
u8g.drawLine(10,0,13,4);
u8g.drawLine(128,60,124,63);//另一个小箭头
u8g.drawLine(128,60,124,57);

为方便观察在屏幕中间位置画一条直线

u8g.drawLine(0,32,128,32);

继续加刻度线
//在水平轴上加刻度线
u8g.drawLine(20,60,20,58);//第一个刻度线
u8g.drawLine(30,60,30,58);//第二个刻度线
u8g.drawLine(40,60,40,58);//第三个刻度线
u8g.drawLine(50,60,50,58);//第四个刻度线
u8g.drawLine(60,60,60,58);//第五个刻度线
u8g.drawLine(70,60,70,58);//第六个刻度线
u8g.drawLine(80,60,80,58);//第七个刻度线
u8g.drawLine(90,60,90,58);//第八个刻度线
u8g.drawLine(100,60,100,58);//第九个刻度线
u8g.drawLine(110,60,110,58);//第十个刻度线

//坚直线刻度线
u8g.drawLine(10,50,12,50);//第一个刻度线
u8g.drawLine(10,40,12,40);//第二个刻度线
u8g.drawLine(10,30,12,30);//第三个刻度线
u8g.drawLine(10,20,12,20);//第四个刻度线
u8g.drawLine(10,10,12,10);//第五个刻度线

还需要文字描述
//写文字
u8g.setFont(u8g_font_unifont);
u8g.drawStr(90,50,"time");
u8g.drawStr(13,10,"lightness");

定义整型变量sensorValue读取模拟口A0的值,将sensorValuer 的值 映射成(屏幕的高度是64),传给整型变量outValue。

为了与人的习惯接轨,映射后,亮度高时输出值就高,高度低时输出值就低。

在串口打印出结果
//在串口监视器上打印结果
Serial.print("sensor = " );                     
Serial.print(sensorValue);      
Serial.print("outValue: ");
Serial.println(outValue);
Serial.println();

为避免刷新太快
每描绘一次,延时0.1秒,再进行再一次的描绘

Arduino 代码如下:
#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);        // HW SPI Com: CS = 10, A0 = 9 (Hardware Pins areSCK = 13 and MOSI = 11)
const int analogInPin = A0; //连接模拟口输入端口A0作为电压计

int sensorValue = 0;      // (电压数据))模拟值
int outValue; //将模拟值映射到所需要的范围内

u8g_uint_t x;

void draw_rect1(void)//绘制一个十字形,水平线居底,竖线靠左
{
//将坐标的原点定在屏幕的中央,为了方便看见,Y轴定在X=10位置上
//坐标的原点为(10,60)
u8g.drawLine(0,60,128,60);//描绘坐标系X轴
u8g.drawLine(10,0,10,64);//描绘坐标系Y轴
//Y轴小箭头从(10,0)开始画线,X轴小箭头从(128,63)开始画线
u8g.drawLine(10,0,7,4);//描绘小箭头
u8g.drawLine(10,0,13,4);
u8g.drawLine(128,60,124,63);//另一个小箭头
u8g.drawLine(128,60,124,57);

//再加一条中间线
u8g.drawLine(0,32,128,32);

//在水平轴上加刻度线
u8g.drawLine(20,60,20,58);//第一个刻度线
u8g.drawLine(30,60,30,58);//第二个刻度线
u8g.drawLine(40,60,40,58);//第三个刻度线
u8g.drawLine(50,60,50,58);//第四个刻度线
u8g.drawLine(60,60,60,58);//第五个刻度线
u8g.drawLine(70,60,70,58);//第六个刻度线
u8g.drawLine(80,60,80,58);//第七个刻度线
u8g.drawLine(90,60,90,58);//第八个刻度线
u8g.drawLine(100,60,100,58);//第九个刻度线
u8g.drawLine(110,60,110,58);//第十个刻度线

//坚直线刻度线
u8g.drawLine(10,50,12,50);//第一个刻度线
u8g.drawLine(10,40,12,40);//第二个刻度线
u8g.drawLine(10,30,12,30);//第三个刻度线
u8g.drawLine(10,20,12,20);//第四个刻度线
u8g.drawLine(10,10,12,10);//第五个刻度线

//写文字
u8g.setFont(u8g_font_unifont);
u8g.drawStr(90,50,"time");
u8g.drawStr(13,10,"lightness");
}

void mydraw( u8g_uint_t x)
{
draw_rect1();

u8g_uint_t y;

y=outValue;
u8g.drawPixel(x+10,y);


}

void setup() {
// 初始化串口通讯速率 9600 位每秒:
Serial.begin(9600);


}

void loop() {
u8g.firstPage();
do {
    //读取模拟数值:
    sensorValue = analogRead(analogInPin);   
    outValue=map(sensorValue,0,1023,63,0);
    //在串口监视器上打印结果
    Serial.print("sensor = " );                     
    Serial.print(sensorValue);      
    Serial.print("outValue: ");
    Serial.println(outValue);
    Serial.println();



    mydraw(x);               

}
while( u8g.nextPage() );

x=x+1;
if (x==128)
{
    x=1;
}

//在下一次循环前等待300毫秒(原范例是2毫秒)
delay(100);                     
}



程序运行效果。
白天时的测试结果
将手放在光敏电阻的上方,用手的阴影挡住它,亮点在接近X轴的附近跳动。
S01.jpg


S02.jpg



开灯之后,s03.jpg


开灯时,亮点在屏幕的上半部份跳动。屏幕图片s04.jpg

颜羽悠 发表于 2013-9-5 18:09:07

请问楼主,怎样能让它以线的形式显示,,,,

tom 发表于 2013-9-5 19:38:40

颜羽悠 发表于 2013-9-5 18:09 static/image/common/back.gif
请问楼主,怎样能让它以线的形式显示,,,,

当时我试了好几次,都没有解决。抱歉。。。
页: [1]
查看完整版本: 光敏电阻亮度测量OLED12864以点形式屏幕显示效果