用arduino+0.91寸OLED实现一个简单菜单

整理桌子的时候翻到这份打印出来的文件,依稀记得是孩子学校的一个小任务,实现一个计时器,按下后开始计时,到时间了驱动电机举牌。当时正学习arduino,就尝试用arduino配合0.91寸OLED实现了一个粗糙的模型,增加了一个简单菜单,以供简单设置一下时间。

很长时间不用,其中原理与语句早已模糊不清,不舍得随手一扔,毕竟曾经也花了很多时间学习,干脆用白描ocr重新将打印的文件转回文字,整理了一下记录在了博客上,供将来有机会参考。因为中间转了几道,可能会因文字或符号确实的原因,无法直接运行。

#include<SPI.h>  //串行外设接口库#include<Wire.h>#include<Adafruit_GFX.h>#include<Adafruit_SSD1306.h>#define SCREEN WIDTH 128 //定义OLED宽度#define SCREEN_HEIGHT 32 //定义OLED高度#define OLED_RESET 4 //定义复位键//Arduino UNO板接线:A4(SDA),A5(SCL)Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT,&Wire, OLED_RESET);const int startPin=5;const int setPin=6;int startstate=1;int setState=1;int workState=0;int setTime=8;unsigned long countTime;void setup(){  Serial.begin(9600); //检测当前库是否正常运行  if(!display.begin(SSD1306_SWITCHCAPVCC,0x3C)){    //Address 0x3C for 128x32     Serial.println(F("SSD1306 allocation failed"));    for(;;); // Don't proceed, loop forever  }  //显示Adafruit的LOGO   display.display();  delay(1000);  display.clearDisplay();  //display.drawLine(X1, Y1, X2, Y2, SSD1306 WHITE);  //display.drawRect(i, i, display.width()-2*i,display.height()-2*i, SSD1306_WHITE);}void loop(){  if(workState==0){    setState =digitalRead(setPin);    startState=digitalRead(startPin);    mainPage();    if(workState==0&&setState==0){      workState=1;      delay(1000);    }    if(workState==0&&startState==0){      workState=2;      delay(1000);    }  }  if(workState==1){    setState = digitalRead(setPin);    startState = digitalRead(startpin);    testdrawstyles(setTime);    if(workState==1&&startState==0){      setTime+=2;      if(setTime>30){        setTime=8;      }    }    if(workState==1&&setState==0){      workState=0;      delay(1000);    }  }  if(workState==2){    setState = digitalRead(setPin);    startstate = digitalRead(startPin);    countTime =millis()/1000;    while(true) {      if((millis()/1000-countTime)>10) {        timeOver();      }else{        startCount(setTime,millis()/1000-countTime);       }      if(digitalRead(setPin)==0)break;      }      workState=0;      delay(1000);    }}void timeOver(){  display.clearDisplay();  display.setCursor(0,0);  display.setTextSize(2);  display.setTextColor(SSD1306_WHITE);  display.print1n(F("OVER!"));  display.display();  delay(200);void mainPage(){  display.clearDisplay();  display.setCursor(0,0);  display.setTextSize(2);  display.setTextColor(SSD1306_WHITE);     display.print1n(F("WELCOME!"));  display.print (F("TIME="));  display.print(setTime);  display.display();  delay(200);}void testdrawstyles(int setTime){  display.clearDisplay();  display.setTextSize(2);  displar.setTextColor (SSD1306 WHITE);  display.setCursor(0,0);  display.print1n(F("Set Times:"));  display.print(setTime);  display.printin(F(" Min") );  display.display();  delay(200);}void startCount (int set,double count){  display.clearDisplay();  display.setTextSize(2);  display.setTextColor(SSD1306_WHITE);  display.setCursor(0,0);  display.printin(set);  display.print1n(count);  display.display();  delay(200);} 

给TA赞助
共{{data.count}}人
人已赞助
综合资讯

用scratch实现flabby bird游戏随机地图

2023-7-29 8:21:41

综合资讯

Scratch让角色围绕另一个角色旋转

2023-7-29 8:21:45

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索