关于阴阳谜题
来源:互联网 发布:unity3d建立一个ui界面 编辑:程序博客网 时间:2024/04/28 15:20
维基百科“call-with-current-continuation”条目中提到……the yin-yang puzzle … was then being customary to show while discussing call/cc. 所谓的“Yin-Yang Puzzle”就是阴阳谜题。Scheme代码是这样的:
(let* ((yin ((lambda (cc) (display #\@)(newline) cc) (call/cc (lambda (c) c)))) (yang ((lambda (cc) (display #\*) cc) (call/cc (lambda (c) c))))) (yin yang))
等价但更费解的形式:
( ((lambda (cc) (display #\@) cc) (call/cc (lambda (c) c))) ((lambda (cc) (display #\*) cc) (call/cc (lambda (c) c))))
#include <ESP8266WiFi.h>#include <WiFiClient.h>#include <ESP8266WebServer.h>#include "SparkFunBME280.h"#include "Wire.h"const char* ssid = "miku_router";const char* password = "GlgjssyQyhfbqz"; // 著名的一句诗const int port = 80;// Pin Definitionconst int KS = 15;const int PWM = 14;const int Motor = 12;const int LED_R = 5;const int LED_G = 4;const int LED_B = 3;const int BUZZ = 13;// 状态// 0 - 关机(所有灯灭,风机、雾化均不工作)// 1 - 雾化(风机工作,雾化工作)// 2 - 排雾(所有灯灭,风机工作,雾化不工作)// 3 - 故障(KS触发,低水位,此时电源指示红灯闪烁,风机、雾化均不工作)// 计划增加的状态// 4 - 自动(风机工作,雾化跟踪湿度调节功率)#define SHUTDOWN 0#define RUNNING 1#define EXHAUST 2#define LOWLEVEL 3#define AUTO 4static int state = 0;// 颜色定义#define RED 4#define GREEN 2#define BLUE 1#define PURPLE 5#define CYAN 3 // Yanhe Green#define YELLOW 6#define BLACK 0#define WHITE 7// 占空比// 取值0~1024static int duty_ratio = 900;// 湿度int humi = 2;// 待机(SHUTDOWN)状态闪烁的计时器static int sb_counter = 0;ESP8266WebServer server(80);BME280 sensor;// BMP280初始化void BMP280_setup() { sensor.settings.commInterface = I2C_MODE; sensor.settings.I2CAddress = 0x76; sensor.settings.runMode = 3; //Normal mode sensor.settings.tStandby = 0; sensor.settings.filter = 0; sensor.settings.tempOverSample = 1; sensor.settings.pressOverSample = 1; sensor.begin();}void buzzer() { digitalWrite(BUZZ, HIGH); delay(100); digitalWrite(BUZZ, LOW);}// 统一的灯光控制(目前只输出开关量)void led_ctrl(int R, int G, int B) { digitalWrite(LED_R, R); digitalWrite(LED_G, G); digitalWrite(LED_B, B);}// 颜色输出void led_out(int color) { int R = color & RED; int G = color & GREEN; int B = color & BLUE; led_ctrl(R, G, B);}// 读传感器并改变灯的颜色void read_sensor() { // 暂时先读温度数据代替湿度(方便调试) humi = sensor.readTempC(); // 湿度低:黄灯 if(humi > 0 && humi <= 20) { Serial.println("Low Humidity: Yellow"); led_out(YELLOW); } // 湿度适宜:绿灯 else if(humi > 20 && humi <= 60) { Serial.println("Comfortable Humidity: Green"); led_out(GREEN); } // 湿度高:蓝灯 else if(humi > 60 && humi <= 100) { Serial.println("High Humidity: Blue"); led_out(BLUE); } // 其他情况:红灯(传感器故障) else { Serial.println("Sensor fault: Red"); led_out(RED); }}// KS中断void water_level_int() { analogWrite(PWM, 0); // 立即关闭雾化和风机 digitalWrite(Motor, LOW); state = LOWLEVEL;}void setup() { pinMode(KS, INPUT_PULLUP); pinMode(PWM, OUTPUT); pinMode(Motor, OUTPUT); pinMode(LED_R, OUTPUT); pinMode(LED_G, OUTPUT); pinMode(LED_B, OUTPUT); pinMode(BUZZ, OUTPUT); led_out(BLACK); Serial.begin(115200); Serial.println("Debug output"); Wire.begin(); BMP280_setup(); // 注册水位过低中断 attachInterrupt(KS, water_level_int, CHANGE); sb_counter = 0; // 灯光全亮 led_out(WHITE); state = SHUTDOWN; // 网络初始化与连接 WiFi.begin(ssid, password); Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { led_out(BLACK); delay(80); led_out(WHITE); delay(80); Serial.print("."); } Serial.println ( "" ); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); // 注册响应回调 server.on("/",[]() { char html[400] = "\<html>\<body>\ <iframe id=\"hf\" style=\"display:none\"></iframe>\ <h1>IoT Humidifier</h1>\ <p><a href=\"javascript:void(0);\" onclick=\"document.getElementById('hf').src = './on';\">开机</a></p>\ <p><a href=\"javascript:void(0);\" onclick=\"document.getElementById('hf').src = './off';\">关机</a></p>\</body>\</html>"; server.send ( 404, "text/html", html ); buzzer(); }); server.on("/on",[]() { if(digitalRead(KS) == LOW) { duty_ratio = 900; state = RUNNING; } Serial.println("+ request /on"); server.send ( 200, "text/html", "<html><body><h1>I'm running~</h1><p><a href=\"./off\">关机</a></p></body></html>" ); led_out(BLACK); Serial.println("- request /on"); buzzer(); }); server.on("/off",[]() { if(state == RUNNING) { state = EXHAUST; } else { state = SHUTDOWN; } Serial.println("+ request /off" ); server.send ( 200, "text/html", "<html><body><h1>SHUTDOWN~</h1><p><a href=\"./on\">开机</a></p></body></html>" ); led_out(BLACK); Serial.println("- request /off" ); buzzer(); }); server.on("/auto",[]() { buzzer(); Serial.println( "+ request /auto" ); if(state == RUNNING) { server.send ( 200, "text/html", "<html><body><h1>humi~</h1></body></html>" ); duty_ratio = 200; } led_out(BLACK); Serial.println( "- request /auto" ); buzzer(); }); server.onNotFound([]() { server.send ( 404, "text/html", "<html><body><h1>404: Not Found " + server.uri() + "</h1></body></html>" ); buzzer(); }); // 启动服务器 server.begin(); // 灯光全灭 led_out(BLACK);}void loop() { server.handleClient(); // 状态机 if(state == LOWLEVEL) { Serial.println( "state LOWLVL" ); // 显式关闭雾化和风机 analogWrite(PWM, 0); digitalWrite(Motor, LOW); // 先关闭所有灯光 led_out(BLACK); // 堵塞式闪烁红灯10次 for(int i = 0; i < 10; i++) { led_out(BLACK); delay(200); led_out(RED); delay(200); } // 闪完之后关机 state = SHUTDOWN; } else if(state == EXHAUST) { Serial.println( "state EXHAUST" ); // 关闭雾化 analogWrite(PWM, 0); // 关闭除电源蓝灯的全部灯光 led_ctrl(LOW, LOW, LOW, HIGH, LOW); // 显式启动风机 digitalWrite(Motor, HIGH); delay(5000); // 延时5秒,堵塞也无妨 // 关闭风机 digitalWrite(Motor, LOW); // 转SHUTDOWN状态 state = SHUTDOWN; } else if(state == SHUTDOWN) { Serial.print( "state SHUTDOWN " ); Serial.println(sb_counter); if(sb_counter < 950) { // 关闭全部灯光(950个cycle) led_out(BLACK); sb_counter++; } else if(sb_counter >= 950 && sb_counter < 1000){ // 闪一下电源蓝灯(50个cycle) led_out(BLUE); sb_counter++; } else if(sb_counter >= 1000) { // 关闭全部灯光 led_out(BLACK); sb_counter = 0; } // 显式关闭风机 digitalWrite(Motor, LOW); // 显式关闭雾化 analogWrite(PWM,0); // 维持SHUTDOWN状态 state = SHUTDOWN; } else if(state == RUNNING) { Serial.println( "state RUNNING" ); if(digitalRead(KS) == LOW) { // 写雾化占空比 analogWrite(PWM, duty_ratio); // 显式开启风机 digitalWrite(Motor, HIGH); } // 读传感器并根据湿度写灯 read_sensor(); Serial.println(humi); // 维持RUNNING状态 state = RUNNING; }}
阅读全文
0 0
- 关于阴阳谜题
- Scheme语言的“阴阳谜题”
- Scheme语言的“阴阳谜题”
- 阴阳
- 阴阳
- 阴阳
- scheme心得(1) continuation与阴阳谜题
- 紫极论阴阳
- 阴阳鱼
- JZOJ3234 阴阳
- 阴阳心态
- 关于ASP中脚本执行顺序的最最最健全的讲解 阴阳冕
- 阴阳合二为一称作一日
- 阴阳两界
- 阴阳怕懵懂吗?
- 阴阳怕懵懂吗?
- 明辨阴阳,合理修炼
- 阴阳字进度条
- 自定义模型
- wxdl文件详解
- 各种助词用法
- Graebert ARES CommanderEdition 2016 2016.3.1.4045.888 Win64 1CD
- 接口与实验:实验3
- 关于阴阳谜题
- java之final关键字
- 什么是指针?关于指针的数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针的理解
- Python导出为exe程序
- 神经网络与深度学习
- android gradle + junit +jacoco +sonarscaner(sonarrunner) 获取单元测试覆盖率以及代码质量
- 记spring事务@Transactional理解
- HDU2389-Rain on your Parade(二分图匹配bfs模板)
- opencv3.3 install in ubuntu