鳕鱼天空

This is Mr Wang's Tech Blog.

Scratch忍术:分身&残影

就是自带那只猫,让它变成会残影术的忍者猫

 

一、动起来

1.1 左右翻转:点猫的左上角那个“i”把旋转模式设为“

1.2 跟随鼠标:点击绿旗后,面向鼠标指针,在0.5秒内滑行到鼠标位置(鼠标位置在侦测)

二、初级忍术:分身(克隆初体验)

2.1 克隆三要素:从控制中拖出“当作为克隆体启动时”、“克隆[自己]”、“删除本克隆体”,注意,凡是用到克隆的地方一定要三个成套使用!

2.2 感受分身:当绿旗被点击,重复执行克隆[自己]

2.3 分身消失:当作为克隆体启动时,等待X秒,如0.5秒,删除本克隆体

三、高级忍术:残影(虚像的使用)

3.1 百分百全透明:在外观中找到“将[颜色]特效设定为X”,把颜色改为虚像,X范围0-100,0是不透明,100是全透明,就是看不见了。巴特,我们这个程序里其实用不到,万一你点了什么透明不回来了,可以用一下。

3.2 眼睁睁的看着你消失:在外观中找到那上面一句“将[颜色]特效增加X”,X是从当前特效增加的特效数量,我们用(乾坤大雾)循环可以实现慢慢消失的功能了。

 
最后我们来看下效果
Scratch忍术:分身&残影


 

excel下拉菜单怎么做

什么是excel下拉菜单,就是通过设置让execl单元格,不用手动输入只需要用鼠标点击就可以选择一些内容输入到单元格,主要是通过数据有效性功能来实现的!

 

1、打开Excel,比如本例中我们要做的下拉菜单是经验、百科、知道。这个时候我们要先选择需要做下拉菜单的单元格(可以是一个也可以是多个)。选择好单元格后,点击数据---有效性。

2、这个时候会进入有效性设置选项。在设置选项卡中选择有效性条件为序列,勾选提供下拉箭头,来源输入经验,百科,知道。

3、在设置来源的时候还可以点击来运设置选择范围,比如:=$G$13:$G$15。当然前提是我们再$G$13:$G$15输入了经验,百科,知道。设置完后点击确定。

4、这个时候我们可以看到在选定的单元格上有了一个下拉箭头,我们在输入的时候只需要点击一下箭头就可以选择输入进去了,这种情况适合在办公的时候一行或者一列输入的内容大都相似的时候选择。

esp8266 smartconfig + 断电自动连接wifi

esp8266是一个价廉物美功能多的wifi模块,其中的esp8266-01大概10软妹子左右,带有串口通讯和2个IO口,可以用arduino编译烧录,是居家旅行杀人灭口,不对,廉价物联网必备组件。

第一次用esp8266的时候是手动写入ssid和密码的,总觉得这个太不智慧了,于是发现了smartconfig模式,可以通过手机上面的一键配置联网。

用的是arduino的附加开发板:http://wechat.doit.am/package_esp8266com_index.json

各种度娘之后得出结论,esp8266在自动连接一次以后断电就会��动重连,无需手工保存ssid和密码,下面是代码:

#include <ESP8266WiFi.h>

bool autoConfig()
{
  WiFi.begin();
  for (int i = 0; i < 20; i++)
  {
    int wstatus = WiFi.status();
    if (wstatus == WL_CONNECTED)
    {
      Serial.println("AutoConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.printDiag(Serial);
      return true;
      //break;
    }
    else
    {
      Serial.print("AutoConfig Waiting......");
      Serial.println(wstatus);
      delay(1000);
    }
  }
  Serial.println("AutoConfig Faild!" );
  return false;
  //WiFi.printDiag(Serial);
}
void smartConfig()
{
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig");
  WiFi.beginSmartConfig();
  while (1)
  {
    Serial.print(".");
    if (WiFi.smartConfigDone())
    {
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.setAutoConnect(true);  // 设置自动连接
      break;
    }
    delay(1000); // 这个地方一定要加延时,否则极易崩溃重启
  }
}

void setup()
{
  Serial.begin(115200);

  if (!autoConfig())
  {
    Serial.println("Start module");
    smartConfig();
  }
}

void loop()
{
  delay(1000);
  Serial.println("loop");
}

手机端用esptouch就行,appstore里免费有下载,安卓的应该也有类似软件。

 

转:认识与实验Arduino的睡眠模式

原文引自:http://swf.com.tw/?p=525

根据Nick Gammon这位澳洲老兄,在Power saving techniques for microprocessors(微处理器省电技术)文章,於Arduino UNO Rev 3控制板执行底下的程式码:
 

void setup () {}

void loop () {}



所测量到的消耗电流量:
 

  • 採用9V电池,接电源插孔供电,约消耗55 mA
  • 用5V电源供电,约消耗46.6 mA



若用最精简的準系统(barebone)形式,例如,在麵包板上直接用ATmega828处理器和石英震盪器等少数零件组装的Arduino,仅消耗15.15 mA电流。

因為Arduino控制板上的USB序列埠转换晶片以及电压调节元件,都会消耗电力。

毕竟Arduino控制板是「原型开发板」,其用意是提供一个方便、好用的微电脑控制实验工具。实验成功之后,如果要长久保留作品或者需要节省电力,最好自製一个精简的Arduino板,或购买类似Arduino Pro Mini这种没有其他周边零件的板子。

Arduino的睡眠模式

Arduino像电脑和手机一样,也具备睡眠∕休眠∕待机功能。在睡眠状态下,系统几乎完全停止运作,只保留基本的侦测功能,因此只消耗少许电力。以电脑為例,在睡眠状态下,可被键盘按键或者网路讯息唤醒。

底下的程式一开始就让微控器进入睡眠状态,下文将採用名叫”Enerlib”的程式库,简化睡眠设定程式:
 

void setup () 
{
  
// 設定採用“Power-down”睡眠模式
  
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
  
// 啟用睡眠模式
  
sleep_enable();
  
// 進入睡眠模式
  
sleep_cpu ();  

}

 
void loop () { }



这段程式在UNO R3控制板上,约消耗32.9 mA电流;但是在精简的「準系统」Arduino板,仅仅消耗0.36mA (360μA)。

ATMega328微控器具有六种睡眠模式,底下是依照「省电情况」排列的睡眠模式名称,以及Enerlib(註:Energy和Library,即:「能源」和「程式库」的缩写)程式库的五道函数指令对照表,排越后面越省电。「消耗电流」栏位指的是ATmega328处理器本身,而非整个控制板。
 

睡眠模式 Energy指令 中文直译 消耗电流
Idle Idle() 閒置 15mA
ADC Noise Reduction SleepADC() 类比数位转换器降低杂讯 6.5mA
Power-save PowerSave() 省电 1.62mA
Standby Standby() 待机 1.62mA
Extended Standby   延长待机 0.84mA
Power-down PowerDown() 断电 0.36mA



微控器内部除了中央处理器(CPU), 还有记忆体、类比数位转换器、序列通讯…等模组。越省电的模式,仍在运作中的模组就越少。

例如,在”Power-Down”(电源关闭)睡眠模式之下,微控器仅剩下外部中断和看门狗计时器(Watchdog Timer, 参阅下文说明)仍持续运作。而在Idle睡眠模式底下,SPI, UART(也就是序列埠)、计时器、类比数位转换器等,仍持续运作,只有中央处理器和快闪记忆体(Flash)时脉讯号被停止。

时脉讯号就像心跳一样,一旦停止时脉讯号,相关的元件也随之暂停。各种睡眠模式的详细说明,请参阅ATmega328微控器的资料手册,第39页,「Power Management and Sleep Modes(电源管理与睡眠模式)」单元。

採用Enerlib程式庫設定睡眠模式

Enerlib程式库可简化Arduino睡眠模式的程式设定,请先下载Enerlib程式库并解压缩到Arduino的libraries资料夹:
 

本实验程式的行为如下:
 

  • 启动时,每隔0.5秒点、灭三次位于第13脚的LED。
  •     LED闪烁完毕后,进入“Power-down(断电)”睡眠模式。
  •     当中断0(第2脚)的讯号改变时,唤醒Arduino,再次闪烁LED三次,接著再进入睡眠模式。



请先把Arduino的数位脚2接高电位(5V或3.3V插座):

 

反覆闪烁LED的基本程式码如下:
 

void setup() {

  Serial.begin(9600);

 
  pinMode(ledPin, OUTPUT);
  Serial.println("Running...");

}

 
void loop() {

  digitalWrite(ledPin, !digitalRead(ledPin));

  delay(500);

}



负责闪烁LED的关键叙述是这一行:

 

设定唤醒Arduino的中断服务常式

修改上一节的程式,建立Energy程式物件,并加入中断服务常式叙述(广告一下,中断服务常式的说明,请参阅《超图解Arduino互动设计入门》的D-3页):
 

若Arduino处于睡眠状态,只要中断0脚位的讯号改变,它就会被唤醒。然而,同一个程式其他叙述,也有可能需要接收中断0的讯息。为此,Energy提供一个用于判断Arduino是否处于睡眠状态的WasSleep()函数,若是,它将传回true。

底下是修改后的wakeISR中断处理常式,若Arduino之前处于睡眠状态,则state变数值将是1,若是在执行过程发生中断讯号,state值将是2:

 

透过state值,主程式将能得知中断的触发时机。补充说明,WasSleep()函数只能写在中断处理常式裡面。

让Arduino睡眠的主程式

主程式迴圈如下,它将在闪烁LED三次后进入最省电的「断电」睡眠模式:

 

完整的范例程式码如下:
 

#include <Enerlib.h>

Energy energy;             // 宣告"Energy"程式物件

const byte swPin = 2;      // 開關腳位
const byte ledPin = 13;    // LED腳位
byte times = 0;            // 記錄執行次數
volatile byte state = 0;   // 暫存執行狀態

void wakeISR() {
   if (energy.WasSleeping()) {
    state = 1;
  } else {
    state = 2;
  }
}

void setup() {
  Serial.begin(9600);
 
  pinMode(ledPin, OUTPUT);
  pinMode(swPin, INPUT);
  digitalWrite(swPin, HIGH);
 
  attachInterrupt(0, wakeISR, CHANGE);  // 附加中斷服務常式
  
  Serial.println("Running...");
}

void loop()
{
  if (state == 1) {
    Serial.println("Was sleeping...");
  } else if (state == 2) {
    Serial.println("Was awake...");
  }
  state = 0;
  
  digitalWrite(ledPin, !digitalRead(ledPin));
  delay(500);
  times ++;
  Serial.println(times);

  if (times > 5) {
    times = 0;
    Serial.println("Go to sleep...");
    energy.PowerDown();
  }
}



编译并上传程式到Arduino板之后,开启「序列埠监控视窗」,它将显示:

 

接著,把连接中断0的导线接到低电位(GND):

 

Arduino将被唤醒,并再次闪烁LED;笔者在LED闪烁的过程中,反覆将中断0接高、低电位,「序列埠监控视窗」因而呈现如下的内容:
 

看门狗计时器简介

看门狗计时器(Watchdog Timer, 简称WDT)是微控器内部的「当机」监控器,若微控器当掉了,它会自动重新启动微控器。其运作原理是,看门狗内部有个计时器,微处理器必须每隔一段时间,向看门狗发出一个讯号,重设计时器值。

 



若看门狗迟迟没有收到微处理器的讯号,计时器仍将继续倒数,直到计时值变成零,它就会认定微处理器已经当掉了,进而重新启动微处理器。

主程式可设定看门狗的计时器值,最短16ms,最长8s。Donal Morrissey写了一篇看门狗程式的介绍,以及沉睡8秒之后,切换LED状态的范例:Sleeping Arduino – Part 5 Wake Up Via The Watchdog Timer

关于ckeditor的使用备忘

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

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