原文:https://circuitdigest.com/microcontroller-projects/arduino-medicine-reminder

使用Arduino的自动药物提醒

ARDUINO PROJECTS

经过**阿比曼尤·潘迪(Abhiemanyu Pandit)** 2019年1月22日
使用Arduino的医学提醒

对于我们所爱的人,我们始终希望保持他们的健康和健康。但是,如果他们生病而忘记按时吃药,将会发生什么。我们会担心,对吗?在医院里,有很多病人,很难提醒每个病人准时吃药。传统方式需要人工来提醒他们按时服药。数字时代并没有随之而来,我们可以使用机器来做到这一点。Smart Medicine Reminder的应用范围非常广泛,可以被家庭患者,医院的医生以及许多其他地方使用。关于提醒,可以有多种提醒方法:

  1. 在显示器上显示
  2. 通过电子邮件或电话发送通知
  3. 使用行动应用程式
  4. 蜂鸣警报
  5. 使用蓝牙/ Wi-Fi
  6. 接电话
  7. 提醒下一次服药时间,同时提醒当前时间

我们可以根据需要结合多种方式。为了使事情简单,我们使用Arduino创建了一个简单的药品提醒,提醒我们每天服用1或2或3次药物。可以使用按钮选择时隙。此外,它还显示当前的日期和时间。我们将其进一步扩展到IoT项目传入的文章,在该文章中,电子邮件或SMS通知将发送给用户。该用药提醒也可以与患者监测系统集成。

使用Arduino的自动药物提醒所需的组件

  1. Arduino Uno(我们也可以使用其他Arduino开发板,例如Pro mini,Nano)
  2. RTC DS3231模块
  3. 16x2 LCD显示屏
  4. 蜂鸣器
  5. LED(任何颜色)
  6. 面包板
  7. 按按钮
  8. 10K电位器
  9. 10K,1K电阻器
  10. 跳线

使用Arduino Circuit的Arduino Medicine提醒

下面显示了 使用Arduino构建智能药箱的完整电路图

以下是Arduino与不同外设的引脚连接

Arduino****引脚外围引脚

  • 2 -----------------------------> Dx的16x2 LCD显示屏
  • 3 -----------------------------> D6的16x2 LCD显示屏
  • 4 -----------------------------> D5的16x2 LCD显示屏
  • 5 -----------------------------> D4的16x2 LCD显示屏
  • 7 ----------------------------->第三个按钮
  • 8 ----------------------------->第二个按钮
  • 9 ----------------------------->第一个按钮
  • 11 -----------------------------> 16x2 LCD显示屏的EN引脚
  • 12 -----------------------------> 16x2 LCD显示器的RS引脚
  • 13 -----------------------------> +蜂鸣器和LED的Ve引脚
  • A0 ----------------------------->停止按钮
  • A4 -----------------------------> DS3231的SDA
  • A5 -----------------------------> DS3231的SCL
  • 3.3V -----------------------------> DS3231的Vcc
  • Gnd ----------------------------->Gnd

在此医学提醒项目中,RTC DS3231通过I2C协议与Arduino Uno接口。您还可以使用 RTC IC DS1307与Arduino读取时间。RTC DS3231还具有内置的32k存储器,可用于存储其他数据。RTC模块通过Arduino uno的3.3V引脚供电。甲16×2 LCD显示器使用SPI接口。一个buzze R用于警示和提醒,它的时间服药。四个按钮用于每个都有独特选择功能的地方。第一个按钮用于提醒每天服药一次。第二个按钮每天提醒两次,第三个按钮每天提醒三次。当用户听到警报时,第四个按钮用于停止蜂鸣器。

自动药品提示系统的工作

丸提醒警报使用5V电源供电。当它第一次启动时,它会显示一个欢迎按摩,如" Welcome to Circuit Digest “。LCD屏幕设置为在三个屏幕之间循环。1个ST屏幕显示按摩为"保持健康,早日康复”。第二个屏幕是一个帮助屏幕,告诉您按选择按钮以选择任何一个要提醒的时间段(一天一次/两次/三次)。该时隙可在程序中更改,并可进行相应配置。现在,我们将其固定为三个时段,即上午8点,下午2点和晚上8点。

我们将时隙分为三种模式。模式1用于选择吃药一次/天在早上8时,用户按下1个ST按钮。当用户按下第二个按钮时,模式2选择每天两次在上午8点和晚上8点服药。模式3个选择吃药三次/天上午8点,下午2点和下午8点,如果用户按压3次按钮。

我们还可以添加一项功能,使蜂鸣器暂停10分钟(此项目不包括此功能)。当用户通过按下按钮选择所需的插槽时,将记录用户输入,并从RTC中获取时间。当时间与选定的时隙匹配时,蜂鸣器开始蜂鸣。用户可以通过按"停止"按钮来停止蜂鸣器。下一个插槽提醒将继续相同的过程。本节末尾的视频中显示了完整的过程。

编程Arduino UNO进行医学提醒

一旦想到了提醒服用药丸的方法,编写程序就非常容易。此处将在显示屏上显示提醒,对蜂鸣器进行蜂鸣并使用LED进行指示。它还具有选择三个时隙(每天一次/两次/三次)的选项,并且当时间到时将开始通过蜂鸣器的蜂鸣来提醒患者。然后整个系统将如下所示:

用户在显示屏上获得帮助说明>用户选择时隙(一次/天,两次/天,三次/天)>在显示屏上显示确认消息>计时开始>当时间与用户选择的时隙相匹配时蜂鸣器和LED响起>用户停止按下停止按钮>结束

如果要添加更多功能,我们可以更改程序和硬件。为了以更简单的方式理解,我们将程序分解为小功能。这些功能易于理解和实现。完整的程序在该项目的末尾给出。让我们从程序开始。

由于我们使用了其他外设,例如16x2 LCD显示器,RTC DS3231,因此我们首先必须包含库f或那个。所需的库如下:

<LiquidCrystal.h>
<RTClib.h>(https://github.com/adafruit/RTClib)
<EEPROM.h>
<Wire.h>

如果未打开Arduino,则EEPROM库用于跟踪用户选择输入。而且,当用户打开Arduino电源时,它会使用EEPROM库获得按钮的先前状态。之所以使用Wire.h库,是因为RTC DS3231模块是使用I2C进行通信的。

始终检查RTC接线是否正确或是否已损坏,因为RTC在整个提醒系统的计时中将发挥重要作用。

  if(!rtc.begin()){//检查rtc是否已连接Serial.println("找不到RTC"); while(1); }
if(rtc.lostPower()){ Serial.println(" RTC掉电,请设置时间!"); }

时间调整可以通过两种方式完成,要么自动使用系统编译时间,要么手动输入。设置时间后,除非您想再次更改RTC时间,否则请注释以下几行。

rtc.adjust(DateTime(F(__ DATE__),F(__ TIME__)));
//rtc.adjust(DateTime(2019,1,10,7,59,52));

该**switch语句用于读取按钮的先前保存状态,**并在适当和准确的提醒时间恢复该状态。

val2 = EEPROM.read(addr); //读取先前保存的按钮值,从先前保留的位置开始进行switch(val2){case 1:Serial.println("Set for 1 / day"); push1state = 1; push2state = 0; push3state = 0; pushVal = 01; break; case 2:Serial.println(" Set for 2 / day");push1state = 0; push2state = 1; push3state = 0;pushVal = 10; break; case 3:Serial.println(" Set for 3 / day")push1state = 0; push2state = 0; push3state = 1;pushVal = 11; break; }

此语句用于使毫秒数用于定时和控制已定义的间隔屏幕循环。

currentMillisLCD = millis(); //在定义的时间间隔内启动毫秒以进行LCD屏幕切换

开始读取连接到按钮的数字引脚。

push1state = digitalRead(push1pin);
push2state = digitalRead(push2pin);
push3state = digitalRead(push3pin);
stopinState = digitalRead(stopPin);

以下功能用于读取按钮状态并将其写入EEPROM。每当按下按钮时,状态就会写入EEPROM。它还在所选用户输入选项的LCD显示屏上打印消息。类似地,使用函数push2()和push3()。

void push1(){//if(push1state == 1){ push1state = 0; push2state = 0; push3state = 0;
// pushPressed = true; EEPROM.write(addr,1); Serial.print(" Push1 Written:"); Serial.println(EEPROM.read(addr)); //用于调试pushVal = 1; //保存按钮1的状态lcd.clear(); lcd.setCursor(0,0); lcd.print(" Reminder set"); lcd.setCursor(0,1); lcd.print("每天一次!"); delay(1200); lcd.clear(); }
}

以下功能用于停止蜂鸣器和指示灯。提出建议总是好的。在"用温水服药"显示屏上打印建议消息。

void stopPins(){//if(stopinState == 1)
用户按下停止按钮时停止嗡嗡声的功能{ // stopinState = 0;
// pushPressed = true; pushval= 1; lcd.clear(); lcd.setCursor(0,0); lcd.print(" Take Medicine"); lcd.setCursor(0,1); lcd.print("带温水"); delay(1200); lcd.clear(); }
}

以下功能与计时无关,但始终在三个屏幕上循环,这对用户有帮助。由于我们一直在照顾患者,因此请打印问候语,因为我们知道情感支持对于更快地治愈患者非常有帮助。您可以选择自己的创意信息。让我们打印一条消息,“保持健康,早日康复”。

第二个屏幕用于向患者发出指示,例如"按提醒按钮…"。 第三个屏幕仅用于显示当前日期和时间

void changeScreen() {                 //function for Screen Cycling// Start switching screen every defined intervalLCDif (currentMillisLCD - previousMillisLCD > intervalLCD)             // save the last time you changed the display{previousMillisLCD = currentMillisLCD;screens++;if (screens > maxScreen) {screens = 0;  // all screens over -> start from 1st}isScreenChanged = true;}// Start displaying current screenif (isScreenChanged)   // only update the screen if the screen is changed.{isScreenChanged = false; // reset for next iterationswitch (screens){case getWellsoon:gwsMessege();                // get well soon messagebreak;case HELP_SCREEN:              helpScreen();               // instruction screenbreak;case TIME_SCREEN:timeScreen();                  // to print date and timebreak;default://NOT SET.break;}}
}

如果已达到所选时间,则此功能可用于同时开始蜂鸣和LED闪烁

void startBuzz() {                    // function to start buzzing when time reaches to defined interval
//  if (pushPressed == false) {if (pushpressed == 0) {Serial.println("pushpressed is false in blink");unsigned long currentMillis = millis();if (currentMillis - previousMillis >= interval) {previousMillis = currentMillis;         // save the last time you blinked the LEDSerial.println("Start Buzzing");if (ledState == LOW) {                  // if the LED is off turn it on and vice-versa:ledState = HIGH;}  else {ledState = LOW;}digitalWrite(ledPin, ledState);}}else if (pushpressed == 1) {Serial.println("pushpressed is true");ledState = LOW;digitalWrite(ledPin, ledState);}
}

*此功能用于比较用户在上午8点选择的时隙,并开始蜂鸣蜂鸣器并使LED闪烁,直到用户按下停止按钮为止。类似地,*void at2pm()* 和void at8pm的***功能用于启动蜂鸣器,并在2pm和8pm引导。

void at8am(){//函数从上午8点开始嗡嗡声DateTime now = rtc.now(); if(int(now.hour())> = buzz8amHH){ if(int(now.minute())> = buzz8amMM){ if(int(now.second())> buzz8amSS){ // /// startBuzz() ; / /// } } }
}

这是您可以使用Arduino简单地制作自己的自动药品提醒的方法。您还可以将ESP8266与Arduino结合使用,使其成为一个IoT项目,该项目将能够向用户发送电子邮件警报。

完整的代码和演示视频如下。

代码

//Medicine Reminder using Arduino Uno
// Reminds to take medicine at 8am, 2pm, 8pm
/*  The circuit:LCD RS pin to digital pin 12LCD Enable pin to digital pin 11LCD D4 pin to digital pin 5LCD D5 pin to digital pin 4LCD D6 pin to digital pin 3LCD D7 pin to digital pin 2LCD R/W pin to groundLCD VSS pin to groundLCD VCC pin to 5V10K resistor:ends to +5V and groundwiper to LCD VO pin (pin 3)*/#include <LiquidCrystal.h>
#include <Wire.h>
#include <RTClib.h>
#include <EEPROM.h>int pushVal = 0;
int val;
int val2;
int addr = 0;RTC_DS3231 rtc;const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;                 // lcd pins
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);#define getWellsoon 0
#define HELP_SCREEN 1
#define TIME_SCREEN 2//bool pushPressed;                               //flag to keep track of push button state
int pushpressed = 0;
const int ledPin =  LED_BUILTIN;                        // buzzer and led pin
int ledState = LOW;
int Signal = 0;int buzz = 13;
int push1state, push2state, push3state, stopinState = 0;     //
int push1Flag, push2Flag, Push3Flag = false;              // push button flags
int push1pin = 9;
int push2pin = 8;
int push3pin = 7;
int stopPin = A0;
int screens = 0;              // screen to show
int maxScreen = 2;            // screen count
bool isScreenChanged = true;long previousMillis = 0;
long interval = 500;                   // buzzing interval
unsigned long currentMillis;long previousMillisLCD = 0;    // for LCD screen update
long intervalLCD = 2000;          // Screen cycling interval
unsigned long currentMillisLCD;//   Set Reminder Change Time
int buzz8amHH = 8;          //    HH - hours         ##Set these for reminder time in 24hr Format
int buzz8amMM = 00;          //    MM - Minute
int buzz8amSS = 00;          //    SS - Secondsint buzz2pmHH = 14;          //    HH - hours
int buzz2pmMM = 00;          //    MM - Minute
int buzz2pmSS = 00;          //    SS - Secondsint buzz8pmHH = 20;          //    HH - hours
int buzz8pmMM = 00;          //    MM - Minute
int buzz8pmSS = 00;          //    SS - Secondsint nowHr, nowMin, nowSec;                     // to show current mm,hh,ss// All messeges
void gwsMessege(){               // print get well soon messegelcd.clear();lcd.setCursor(0, 0);lcd.print("Stay Healthy :)");     // Give some cheerslcd.setCursor(0, 1);lcd.print("Get Well Soon :)");    // wish
}void helpScreen() {              // function to display 1st screen in LCDlcd.clear();lcd.setCursor(0, 0);lcd.print("Press Buttons");lcd.setCursor(0, 1);lcd.print("for Reminder...!");}void timeScreen() {              // function to display Date and time in LCD screenDateTime now = rtc.now();             // take rtc time and print in displaylcd.clear();lcd.setCursor(0, 0);lcd.print("Time:");lcd.setCursor(6, 0);lcd.print(nowHr = now.hour(), DEC);lcd.print(":");lcd.print(nowMin = now.minute(), DEC);lcd.print(":");lcd.print(nowSec = now.second(), DEC);lcd.setCursor(0, 1);lcd.print("Date: ");lcd.print(now.day(), DEC);lcd.print("/");lcd.print(now.month(), DEC);lcd.print("/");lcd.print(now.year(), DEC);
}void setup() {Serial.begin(9600);                      // start serial debuggingif (! rtc.begin()) {                      // check if rtc is connected Serial.println("Couldn't find RTC");while (1);}if (rtc.lostPower()) {Serial.println("RTC lost power, lets set the time!");}//    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));            // uncomment this to set the current time and then comment in next upload when u set the timertc.adjust(DateTime(2019, 1, 10, 7, 59, 30));                // manual time setlcd.begin(16, 2);lcd.clear();lcd.setCursor(0, 0);lcd.print("Welcome To");                                      // print a messege at startuplcd.setCursor(0, 1);lcd.print("Circuit Digest");delay(1000);pinMode(push1pin, INPUT);                                    // define push button pins typepinMode(push2pin, INPUT);pinMode(push3pin, INPUT);pinMode(stopPin, INPUT);pinMode(ledPin, OUTPUT);delay(200);Serial.println(EEPROM.read(addr));val2 = EEPROM.read(addr);                         // read previosuly saved value of push button to start from where it was left previouslyswitch (val2) {case 1:Serial.println("Set for 1/day");push1state = 1;push2state = 0;push3state = 0;pushVal = 1;break;case 2:Serial.println("Set for 2/day");push1state = 0;push2state = 1;push3state = 0;pushVal = 2;break;case 3:Serial.println("Set for 3/day");push1state = 0;push2state = 0;push3state = 1;pushVal = 3;break;}}void loop() {push1();                                             //call to set once/day push2();                                             //call to set twice/day push3();                                             //call to set thrice/day if (pushVal == 1) {                                // if push button 1 pressed then remind at 8amat8am();                                           //function to start uzzing at 8am }else if (pushVal == 2) {                             // if push button 2 pressed then remind at 8am and 8pmat8am();                                            at8pm();                                           //function to start uzzing at 8mm}else if (pushVal == 3) {                             // if push button 3 pressed then remind at 8am and 8pmat8am();at2pm();                                            //function to start uzzing at 8mmat8pm();}currentMillisLCD = millis();                         // start millis for LCD screen switching at defined interval of timepush1state = digitalRead(push1pin);                  // start reading all push button pinspush2state = digitalRead(push2pin);push3state = digitalRead(push3pin);stopinState = digitalRead(stopPin);stopPins();                                            // call to stop buzzingchangeScreen();                                        // screen cycle function}// push buttons
void push1() {                   // function to set reminder once/day if (push1state == 1) {push1state = 0;push2state = 0;push3state = 0;
//    pushPressed = true;EEPROM.write(addr, 1);Serial.print("Push1 Written : "); Serial.println(EEPROM.read(addr));  // for debuggingpushVal = 1;                                             //save the state of push button-1 lcd.clear();lcd.setCursor(0, 0);lcd.print("Reminder set ");lcd.setCursor(0, 1);lcd.print("for Once/day !");delay(1200);lcd.clear();}
}void push2() {                      //function to set reminder twice/dayif (push2state == 1) {push2state = 0;push1state = 0;push3state = 0;
//    pushPressed = true;EEPROM.write(addr, 2);Serial.print("Push2 Written : "); Serial.println(EEPROM.read(addr));pushVal = 2;lcd.clear();lcd.setCursor(0, 0);lcd.print("Reminder set ");lcd.setCursor(0, 1);lcd.print("for Twice/day !");delay(1200);lcd.clear();}
}void push3() {                    //function to set reminder thrice/dayif (push3state == 1) {push3state = 0;push1state = 0;push2state = 0;
//    pushPressed = true;EEPROM.write(addr, 3);Serial.print("Push3 Written : "); Serial.println(EEPROM.read(addr));pushVal = 3;lcd.clear();lcd.setCursor(0, 0);lcd.print("Reminder set ");lcd.setCursor(0, 1);lcd.print("for Thrice/day !");delay(1200);lcd.clear();}
}void stopPins() {                   //function to stop buzzing when user pushes stop push buttonif (stopinState == 1) {//    stopinState = 0;
//    pushPressed = true;pushpressed = 1;lcd.clear();lcd.setCursor(0, 0);lcd.print("Take Medicine  ");lcd.setCursor(0, 1);lcd.print("with Warm Water");delay(1200);lcd.clear();}
}void startBuzz() {                    // function to start buzzing when time reaches to defined interval//  if (pushPressed == false) {if (pushpressed == 0) {Serial.println("pushpressed is false in blink");unsigned long currentMillis = millis();if (currentMillis - previousMillis >= interval) {previousMillis = currentMillis;         // save the last time you blinked the LEDSerial.println("Start Buzzing");if (ledState == LOW) {                  // if the LED is off turn it on and vice-versa:ledState = HIGH;}  else {ledState = LOW;}digitalWrite(ledPin, ledState);}}else if (pushpressed == 1) {Serial.println("pushpressed is true");ledState = LOW;digitalWrite(ledPin, ledState);}
}void at8am() {                      // function to start buzzing at 8amDateTime now = rtc.now();if (int(now.hour()) >= buzz8amHH) {if (int(now.minute()) >= buzz8amMM) {if (int(now.second()) > buzz8amSS) {/startBuzz();/}}}
}void at2pm() {                          // function to start buzzing at 2pmDateTime now = rtc.now();if (int(now.hour()) >= buzz2pmHH) {if (int(now.minute()) >= buzz2pmMM) {if (int(now.second()) > buzz2pmSS) {///startBuzz();//}}}
}void at8pm() {                           // function to start buzzing at 8pmDateTime now = rtc.now();if (int(now.hour()) >= buzz8pmHH) {if (int(now.minute()) >= buzz8pmMM) {if (int(now.second()) > buzz8pmSS) {/startBuzz();/}}}
}//Screen Cycling
void changeScreen() {                 //function for Screen Cycling// Start switching screen every defined intervalLCDif (currentMillisLCD - previousMillisLCD > intervalLCD)             // save the last time you changed the display{previousMillisLCD = currentMillisLCD;screens++;if (screens > maxScreen) {screens = 0;  // all screens over -> start from 1st}isScreenChanged = true;}// Start displaying current screenif (isScreenChanged)   // only update the screen if the screen is changed.{isScreenChanged = false; // reset for next iterationswitch (screens){case getWellsoon:gwsMessege();                // get well soon messagebreak;case HELP_SCREEN:              helpScreen();               // instruction screenbreak;case TIME_SCREEN:timeScreen();                  // to print date and timebreak;default://NOT SET.break;}}
}

使用Arduino的自动药物提醒相关推荐

  1. excel到期弹窗提醒桌面弹_excle中自动提醒安排【EXCEL自动弹窗提醒】

    Excel如何实现自动提醒功能! 假设日期是E列,F列为列,你在F1中输入: =IF(E1=TODAY(),"通知张三.李四.评委参加下午评标",""),用柄向 ...

  2. excel怎么设置自动计算_Excel工作计划完成记录表,自动进度提醒,判断计算快捷简单...

    Hello大家好,我是帮帮.今天跟大家分享一张Excel工作计划完成情况记录表,自动进度提醒,判断计算快捷简单. 为了让大家能更稳定的下载模板,我们又开通了全新下载方式(见文章末尾),以便大家可以轻松 ...

  3. 使用Arduino的自动宠物喂食器

    原文:https://circuitdigest.com/microcontroller-projects/automatic-pet-feeder-using-arduino 使用Arduino的自 ...

  4. 【爬虫】力扣每日一题每天自动邮件提醒!!!

    使用python实现了一个力扣每日一题每天自动邮件提醒的小爬虫,小但实用!!! 文章目录 A.需求来源与分析 B.技术角度分析 C.具体分析步骤 1.接口协议分析 2.发邮件 3.写crontab放服 ...

  5. 如何设置Oracle工作表有提示,excel表格中自动数据提醒-excel工作表中如何自动跳出提醒框...

    excel表格怎么设置到期日前自动提醒功能 菜单项〉工具>选项.在图中选择.在弹出的对话框中把"记忆式键入"前面的对勾去掉行了. 详见图示. 在Excel表格里面怎样设置&q ...

  6. arduino 土壤温湿度传感器_Arduino 与 土壤湿度传感器 测量土壤湿度自动浇水提醒...

    土壤湿度传感器 1,传感器适用于土壤的湿度检测: 2,模块中蓝色的电位器是用于土壤湿度的阀值调节, 顺时针调节,控制的湿度会越大,逆时针越小 3,数字量输出D0可以与单片机直接相连,通过单片机来检测高 ...

  7. Arduino 与 土壤湿度传感器 测量土壤湿度自动浇水提醒

    土壤湿度传感器 1,传感器适用于土壤的湿度检测: 2,模块中蓝色的电位器是用于土壤湿度的阀值调节, 顺时针调节,控制的湿度会越大,逆时针越小 3,数字量输出D0可以与单片机直接相连,通过单片机来检测高 ...

  8. 力扣每日一题每天自动邮件提醒

    A.需求来源与分析 需求来源于生活,对于只是偶尔有兴趣做做题的我,力扣的每日一题对我一直有以下的不便: 太简单不想做,需要花太多时间的不想做,每天打开力扣其实只是想看一下是什么题,有意思才做. 看题需 ...

  9. 使用Arduino制作自动硬币分拣机

    在之前的帖子中,我们使用颜色传感器制作了一款基于Arduino开发板的自动点钞机.今天,我们将在本文中使用红外传感器制作一款Arduino计数机.该机器可以借助红外传感器对硬币进行计数和分类.本文红外 ...

  10. 使用Arduino制作自动宠物喂食机

    今天,我们将要制作一个基于Arduino开发板的自动宠物喂食机,它可以及时的自动为你的宠物提供食物.该项目采用一个DS3231的RTC(实时时钟)模块,用于设置宠物需要喂食的时间和日期.因此,根据您宠 ...

最新文章

  1. netBeans开发j2ME入门一些资源
  2. 算法竞赛五冠五亚得主,手把手带你了解算法竞赛
  3. Linux 中echo格式控制、重定向 、管道 | 简介
  4. 如何“主动出击”提升网站的收录速度?
  5. OpenCV在G-API上移植各向异性图像分割
  6. AppLoader发布
  7. Solidworks踩坑随笔
  8. 在 NXP iMX8 上进行 4K 视频播放测试
  9. 河南网上交新房契税打印带章完税证明教程
  10. 文件删除终结者 v1.2 免费
  11. 多径效应及其消除方法
  12. UNIX Time Sharing System - UNIX分时系统翻译
  13. 会议预定管理系统php,会议小管家会议预约管理系统
  14. HTML+CSS实现心形效果
  15. 树莓派GPIO入门(一):点亮一个LED灯
  16. 视频播放器上实现AirPlay投屏功能
  17. 应急通信指挥调度系统|智慧消防指挥中心
  18. 《深入设计模式》读后感
  19. 用Win10秘钥激活Windows 10:更改产品密钥与密钥重置
  20. Windows 2012 R2 搭建域控制器及win7加入域服务

热门文章

  1. Windows XP怎样实现自动登录而无需输入密码
  2. 干货 | 系统润滑,定时清理内存了解一下
  3. OpenGL开启Gouraud明暗处理,减少马赫夫效应
  4. 转:以Delphi Package架构多人开发应用程序环境
  5. android之Goolgle Map
  6. 【Python】基于Python计算长时间遥感栅格图像的像元值变化度(斜率)和变异系数
  7. 你需要来自trustedinstaller的权限才能删除
  8. 专题详解-5G接入控制(1)
  9. 使用python实现新浪微博登陆
  10. BZOJ 2794 [Poi2012]Cloakroom(离线+背包)