鳕鱼天空

This is Mr Wang's Tech Blog.

关于ckeditor的使用备忘

1、小心你的ckeditor编辑器不显示的有关问题

答:firefox设置了override,遨游浏览器设置了自定义useragent头,都会导致ckeditor无法显示!!!

[转]基于esp8266的开发导航帖arduino ide for esp8266

自从乐鑫esp8266出现后,其价格低廉的解决方案,引起了业界的广泛关注,堪称业界里程碑。但是很多人买来之后不知道怎么使用,今天在这里和大家讨论分享一下:   

   ESP8266简介,乐鑫的单芯片wifi 控制器

目前市面上有3种开发方式:
1:使用乐鑫AT 固件,使用时,单片机通过串口用AT指令来实现wifi连接、网络通迅,例如arduino uno+esp8266他们间使用AT指令来交互。

2:使用乐鑫SDK开发包,直接用C编程。例如果云esp8266 sdk开发之类。直接开发BIN文件
3:使用NODEMCU固件,这是国内大能 在SDK基础上,加入了LUA语言

现在,出现了第4种开发方式,arduino直接编程,原理还是在SDK基础上开发,不过已经封装为我们熟的Arduino语言了。(想想都有点小激动{:soso_e102:})

  注意已经不需要ARDUINO硬件了,而是利用arduino软件平台来编译8266的源码。即利用arduino 语句开发8266的sdk,

下面的几篇帖子将分别介绍开发的一些教程。

第一篇,基于esp8266的智能家居控制系统-基础篇1介绍arduino ide for esp8266,介绍背景,及软件下载

第二篇,基于esp8266的智能家居控制系统-基础篇2硬件平台搭建 ,搭建硬件开发环境
第三篇,基于esp8266的智能家居控制系统-通用篇,常用的示例代码,非无线
第四篇,基于esp8266的智能家居控制系统-局域网篇1 TCP/UDP,tcp通讯的准备作为客户端与电脑通讯
第五篇,基于esp8266的智能家居控制系统-局域网篇1手机控制和透传作为客户端与手机通讯及透传
第六篇,基于esp8266的智能家居控制系统-局域网篇2,tcpserver,作为服务端与其他作为客户端的设备通讯
楼楼将持续更新,么么哒

转载自:http://www.arduino.cn/forum.php?mod=viewthread&tid=18361&highlight=esp8266

[转]js复制内容到剪贴板代码,js复制代码

例子

<script type="text/JavaScript">
    function jsCopy(){
        var e=document.getElementById("contents");//对象是contents
        e.select(); //选择对象
        document.execCommand("Copy"); //执行浏览器复制命令
    }
</script>
<textarea id="contents" cols="40" rows="5"></textarea>
<br />
<input type="button" onClick="jsCopy();" value="复制" />

js复制无非是以下三步:
1、获取复制的对象:document.getElementById("contents")这句话就是获取ID=“contents”的textarea。
2、全选对象的内容:e.select()
3、用execCommand("")函数将内容复制。
下面来详细介绍execCommand("")函数的参数:
1、格式:document.execCommand(sCommand[,交互方式, 动态参数])
2、参数详解:

 

001 1、〖全选〗命令的实现
002 [格式]:document.execCommand(”selectAll”)
003 [说明]将选种网页中的全部内容!
004  
005 2、〖打开〗命令的实现
006 [格式]:document.execCommand(”open”)
007 [说明]这跟VB等编程设计中的webbrowser控件中的命令有些相似,大家也可依此琢磨琢磨。
008  
009 3、〖另存为〗命令的实现
010 [格式]:document.execCommand(”saveAs”)
011 [说明]将该网页保存到本地盘的其它目录!
012  
013 4、〖打印〗命令的实现
014 [格式]:document.execCommand(”print”)
015 [说明]当然,你必须装了打印机!
016  
017 Js代码下面列出的是指令参数及意义
018  
019 //相当于单击文件中的打开按钮
020 document.execCommand(”Open”);
021  
022 //将当前页面另存为
023 document.execCommand(”SaveAs”);
024  
025 //剪贴选中的文字到剪贴板;
026 document.execCommand(”Cut”,”false”,null);
027  
028 //删除选中的文字;
029 document.execCommand(”Delete”,”false”,null);
030  
031 //改变选中区域的字体;
032 document.execCommand(”FontName”,”false”,sFontName);
033  
034 //改变选中区域的字体大小;
035 document.execCommand(”FontSize”,”false”,sSize|iSize);
036  
037 //设置前景颜色;
038 document.execCommand(”ForeColor”,”false”,sColor);
039  
040 //使绝对定位的对象可直接拖动;
041 document.execCommand(”2D-Position”,”false”,”true”);
042  
043 //使对象定位变成绝对定位;
044 document.execCommand(”AbsolutePosition”,”false”,”true”);
045  
046 //设置背景颜色;
047 document.execCommand(”BackColor”,”false”,sColor);
048  
049 //使选中区域的文字加粗;
050 document.execCommand(”Bold”,”false”,null);
051  
052 //复制选中的文字到剪贴板;
053 document.execCommand(”Copy”,”false”,null);
054  
055 //设置指定锚点为书签;
056 document.execCommand(”CreateBookmark”,”false”,sAnchorName);
057  
058 //将选中文本变成超连接,若第二个参数为true,会出现参数设置对话框;
059 document.execCommand(”CreateLink”,”false”,sLinkURL);
060  
061 //设置当前块的标签名;
062 document.execCommand(”FormatBlock”,”false”,sTagName);
063  
064 //相当于单击文件中的打开按钮
065 document.execCommand(”Open”);
066  
067 //将当前页面另存为
068 document.execCommand(”SaveAs”);
069  
070 //剪贴选中的文字到剪贴板;
071 document.execCommand(”Cut”,”false”,null);
072  
073 //删除选中的文字;
074 document.execCommand(”Delete”,”false”,null);
075  
076 //改变选中区域的字体;
077 document.execCommand(”FontName”,”false”,sFontName);
078  
079 //改变选中区域的字体大小;
080 document.execCommand(”FontSize”,”false”,sSize|iSize);
081  
082 //设置前景颜色;
083 document.execCommand(”ForeColor”,”false”,sColor);
084  
085 //使绝对定位的对象可直接拖动;
086 document.execCommand(”2D-Position”,”false”,”true”);
087  
088 //使对象定位变成绝对定位;
089 document.execCommand(”AbsolutePosition”,”false”,”true”);
090  
091 //设置背景颜色;
092 document.execCommand(”BackColor”,”false”,sColor);
093  
094 //使选中区域的文字加粗;
095 document.execCommand(”Bold”,”false”,null);
096  
097 //复制选中的文字到剪贴板;
098 document.execCommand(”Copy”,”false”,null);
099  
100 //设置指定锚点为书签;
101 document.execCommand(”CreateBookmark”,”false”,sAnchorName);
102  
103 //将选中文本变成超连接,若第二个参数为true,会出现参数设置对话框;
104 document.execCommand(”CreateLink”,”false”,sLinkURL);
105  
106 //设置当前块的标签名;
107 document.execCommand(”FormatBlock”,”false”,sTagName);

 

 

注:火狐不支持此方法!

 

找了好久的一个方法,很管用,网上很多文章一大抄,拿下来根本没法用,他们自己也没有试验过,就写,真是服了

Arduino驱动DS3231高精度时钟模块

很想要个时钟模块,自己焊又太麻烦,干脆在TB上买下来了,省时。

  模块参数:
  1.尺寸:38mm(长)*22mm(宽)*14mm(高)
  2.重量:8g
  3.工作电压:3.3--5.5V
  4.时钟芯片:高精度时钟芯片DS3231
  5.时钟精度:0-40℃范围内,精度2ppm,年误差约1分钟
  6.带2个日历闹钟
  7.可编程方波输出
  8.实时时钟产生秒、分、时、星期、日期、月和年计时,并提供有效期到2100年的闰年补偿
  9.芯片内部自带温度传感器,精度为±3℃
  10.存储芯片:AT24C32(存储容量32K)
  11.IIC总线接口,最高传输速度400KHz(工作电压为5V时)
  12.可级联其它IIC设备,24C32地址可通过短路A0/A1/A2修改,默认地址为0x57
  13.带可充电电池LIR2032,保证系统断电后,时钟任然正常走动

接线说明,以Arduino uno r3为例:
  SCL→A5
  SDA→A4
  VCC→5V
  GND→GND

 
 

代码部分:

#include <DS3231.h>
#include <Wire.h>

DS3231 Clock;
bool Century=false;
bool h12;
bool PM;
byte ADay, AHour, AMinute, ASecond, ABits;
bool ADy, A12h, Apm;

byte year, month, date, DoW, hour, minute, second;

void setup() {
 // 启动I2C(IIC)接口
 Wire.begin();
        //以下部分是初始化时间,每次板子通电之后都会初始化成这个时间,只是测试用,以后可以删除。
        Clock.setSecond(50);//Set the second
        Clock.setMinute(59);//Set the minute 设置分钟
        Clock.setHour(11);  //Set the hour 设置小时
        Clock.setDoW(5);    //Set the day of the week 设置星期几
        Clock.setDate(31);  //Set the date of the month 设置月份
        Clock.setMonth(5);  //Set the month of the year 设置一年中的月份
        Clock.setYear(13);  //Set the year (Last two digits of the year) 设置年份(在今年的最后两位数——比如2013年最后的13)
 // Start the serial interface
 Serial.begin(115200);
}
void ReadDS3231()
{
  int second,minute,hour,date,month,year,temperature;
  second=Clock.getSecond();
  minute=Clock.getMinute();
  hour=Clock.getHour(h12, PM);
  date=Clock.getDate();
  month=Clock.getMonth(Century);
  year=Clock.getYear();
 
  temperature=Clock.getTemperature();
 
  Serial.print("20");
  Serial.print(year,DEC);
  Serial.print('-');
  Serial.print(month,DEC);
  Serial.print('-');
  Serial.print(date,DEC);
  Serial.print(' ');
  Serial.print(hour,DEC);
  Serial.print(':');
  Serial.print(minute,DEC);
  Serial.print(':');
  Serial.print(second,DEC);
  Serial.print('\n');
  Serial.print("Temperature=");  //这里是显示温度
  Serial.print(temperature);
  Serial.print('\n');
}
void loop()
{
  ReadDS3231();
  delay(1000);  //间隔1000ms(1000ms=1秒)循环一次。
}

用Arduino制作简易电压测试仪

一直想用锂电给arduino的板子供电,买了2种带充放的模块,其中一种有电量指示灯,另外一种没有,想在锂电为板子供电同时测量锂电电压,类似手机剩余电量显示这种。

电路比较简单,找2个10K的电阻串联在电池两端,电池负极接GND,电阻连接处接A3,代码如下:

#define voltsInPin A3

void setup()
{
  pinMode(voltsInPin, INPUT);

  Serial.begin(9600);
  Serial.println("volts:");
}

void loop()
{
  int rawReading = analogRead(voltsInPin);
  float volts = rawReading / 220.62 * 2;
  Serial.println(volts);
  delay(500);
}

每隔半秒测试一次,220.62是我根据万用表测出的数值经过换算得来的,理论上应该是(1023/5=204.8),乘以2是因为两个10K的电阻分压了,所以测量到的电压是实际的一半大小,3.7V锂电充满一般4.2V左右。然后我找了个4位计时器(TM1637),加了几句代码,可以用数码管显示电压值了,两个脚分别接D2和D3。

#define voltsInPin A3

// 下面是4位计时器定义
#include "TM1637.h"
#define CLK 3//pins definitions for TM1637 and can be changed to other ports       
#define DIO 2
TM1637 tm1637(CLK, DIO);

void setup()
{
  pinMode(voltsInPin, INPUT);
  //pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  Serial.println("volts:");

  tm1637.init();
  tm1637.set(BRIGHT_TYPICAL);

}

void loop()
{
  int rawReading = analogRead(voltsInPin);
  float volts = rawReading / 220.62 * 2;
  Serial.println(volts);
  int num = volts*100;
  // 4位数显示
  tm1637.display(0, num / 1000);
  tm1637.display(1, (num % 1000) / 100);
  tm1637.display(2, (num % 100) / 10);
  tm1637.display(3, num % 10);
  delay(500);
}

最后,请大家保持冷静,上面的代码在用USB供电时一点问题都没有,但是直接用升压模块接锂电供电后,测量的电压低了很多,而且跳跃的很厉害,我暂时还没有搞清楚到底是不能这样测试还是数码管的问题(数码管噪音很大),改天再测试了,或者还是直接用带电压显示的升压模块算了。。。。。。