首页>少儿编程>用arduino+0.91寸OLED实现一个简单菜单

用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);
} 

标签: Arduino

移动端可扫我直达哦~

推荐阅读

arduino 2022-12-29

arduino驱动4针0.91寸OLED显示屏

买过arduino的入门套装,包含一块显示屏幕,但是该屏幕的占用针脚太多,接线麻烦只是其中一方面,你把针脚都给占了我拿什么输入输出呀。于是就从网上另购了一块4针的0.91寸的oled显示屏,赶上活动价实付5元还给包邮,就象脱口秀里说的...

少儿编程 Arduino

arduino 2022-12-25

利用arduino uno模拟手机hid键盘

hid设备Human Interface Device的缩写,由其名称可以了解HID设备是直接与人交互的设备,例如键盘、鼠标与游戏杆等。dfu模式DFU的全称是Development FirmwareUpgrade,实际意思就是设备固...

少儿编程 Arduino

arduino 2022-10-12

关于Arduino的简单介绍

什么是单片机一台能够工作的计算机要有这样几个部份构成:中央处理单元CPU、随机存储器RAM、存储器ROM、输入/输出设备。在个人计算机上这些部份被分成若干块芯片,安装在一个被称之为主板的印刷线路板上。而在单片机中,这些部份全部被做到一...

少儿编程 Arduino