久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4569|回復: 3
打印 上一主題 下一主題
收起左側

esp8266 OLED屏幕菜單加Ec11編碼器控制

[復制鏈接]
跳轉到指定樓層
樓主
ID:983290 發表于 2022-5-29 07:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <CN_SSD1306.h>
#include "codetab.c"   //codetab
#include "Ticker.h"
#define OLED_SDA 2
#define OLED_SCL 16
//庫2
#define tti 0
#include <Adafruit_ssd1306syp.h>
#define SDA_PIN 2
#define SCL_PIN 16
Adafruit_ssd1306syp display(SDA_PIN,SCL_PIN);
int tt=0;


//庫2
int ui,an;unsigned char u=0,uz,LE,LE1,alo;
Ticker flipper;
int Key=0;  
CN_SSD1306 lucky(OLED_SDA, OLED_SCL);//8 -- sda,9 -- scl


  unsigned char   EC11_A_Last;                       //EC11的A引腳上一次的狀態
  unsigned char   EC11_B_Last;                       //EC11的B引腳上一次的狀態


int encoder0PinA = 5;
int encoder0PinB = 4;

//volatile
unsigned int encoder0Pos = 0;
int jiuA = 0;
int jiuB = 0;








//ICACHE_RAM_ATTR void InterruptFunc(){ detachInterrupt(digitalPinToInterrupt(0));ui=digitalRead(0);
/* if(ui==0){if(an){an==0;u++;if(u==5)u=0;
  }
  }else{
an=1;
  }
    */
    //delay(20);ui=digitalRead(0);
  //  if(ui==0){u++;if(u==5)u=0;
  //} Serial.println (u, DEC);caidan();delay(200); attachInterrupt(digitalPinToInterrupt(0),InterruptFunc,FALLING);pinMode(0,INPUT);}

void xz1(){
   char ScanResult = 0;    //用于分析編碼器動作的變量
if(!digitalRead(5) && !EC11_A_Last && !digitalRead(4) &&EC11_B_Last)   //A相當前狀態和上次狀態都為低電平時,抓B相上次狀態為高當前狀態為低的下降沿。
  {                    
    ScanResult = 1;     //正轉
    encoder0Pos++;u++;
    if(encoder0Pos>3)encoder0Pos=0; if(u>3)u=0; Serial.println (encoder0Pos, DEC);caidan();
  }
  else if(!digitalRead(5) &&EC11_A_Last && !digitalRead(4) && !EC11_B_Last)  //B相當前狀態和上次狀態都為低電平時,抓A相上次狀態為高當前狀態為低的下降沿。
  {
    ScanResult = 2;     //反轉
    encoder0Pos--;u--;
        if(encoder0Pos>3)encoder0Pos=3; if(u>3)u=3;Serial.println (encoder0Pos, DEC);caidan();
  }
   EC11_A_Last =digitalRead(5);   //更新編碼器上一個狀態暫存變量
   EC11_B_Last =digitalRead(4);   //更新編碼器上一個狀態暫存變量

}

void xz2(){

   char ScanResult = 0;    //用于分析編碼器動作的變量
if(digitalRead(4) && EC11_B_Last && !digitalRead(5) &&EC11_A_Last)   //B相當前狀態和上次狀態都為低電平時,抓B相上次狀態為高當前狀態為低的下降沿。
  {                    
    ScanResult = 1;     //正轉
    encoder0Pos++;u++;
    if(encoder0Pos>3)encoder0Pos=0; if(u>3)u=0; Serial.println (encoder0Pos, DEC);caidan();
  }
  else if(digitalRead(5) &&EC11_A_Last && !digitalRead(4) && EC11_B_Last)  //A相當前狀態和上次狀態都為gao電平時,抓A相上次狀態為高當前狀態為低的下降沿。
  {
    ScanResult = 2;     //反轉
    encoder0Pos--;u--;
        if(encoder0Pos>3)encoder0Pos=3; if(u>3)u=3;Serial.println (encoder0Pos, DEC);caidan();
  }
   EC11_A_Last =digitalRead(5);   //更新編碼器上一個狀態暫存變量
   EC11_B_Last =digitalRead(4);   //更新編碼器上一個狀態暫存變量

}
void gengxing(){
/*if(alo){tt++;if(tt>100000)tt=0;if (tt==100000){display.clear();
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(analogRead(A0));
   display.update();
Serial.println(analogRead(A0));}
}*/
switch(alo){
  case 0:break;
  case 1:tt++;if(tt>tti/*100000*/)tt=0;if (tt==tti/*100000*/){display.clear();
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println((analogRead(A0))/1.024);
   display.update();
Serial.println((analogRead(A0))/1.024);}break;
}


}
  ICACHE_RAM_ATTR void InterruptFunc(){ detachInterrupt(digitalPinToInterrupt(0));
  int ko=1;

  while(ko)
        {
                if(digitalRead(0)==0&&Key==0)                //判斷按鍵是否被按下
                {
                       // delay(10);                //延時消抖
                        Key=1;                //把標志位置1,防止程序循環執行
                        if(digitalRead(0)==0)                //再次判斷按鍵狀態,排除干擾
                        {
                             LE++;if(LE==2)LE=0;
                             // u++;if(u==5)u=0;
                        }
                }
                else if(digitalRead(0)==1)
                {
                        Key=0;  ko=0;              //當按鍵沒有被按下時,重置標志位
                }
        }

   Serial.println (u, DEC);caidan();delay(200); attachInterrupt(digitalPinToInterrupt(0),InterruptFunc,FALLING);pinMode(0,INPUT);}


void fanbaiCN(unsigned char x, unsigned char y, unsigned char N)
{
  unsigned char wm=0;
  unsigned int adder=32*N;
  lucky.IIC_SetPos(x , y);
lucky. Begin_IIC_Data();
  for(wm = 0;wm < 16;wm++)
  {
    lucky.Write_IIC_Byte(~CN16x16[adder]);
    adder += 1;
  }
  lucky.IIC_Stop();
  lucky.IIC_SetPos(x,y + 1);
  lucky.Begin_IIC_Data();
  for(wm = 0;wm < 16;wm++)
  {
    lucky.Write_IIC_Byte(~CN16x16[adder]);
    adder += 1;
  }
  lucky.IIC_Stop();
}
void pingbao(){unsigned char i,p,s,q;
     for(q=0;q<=6;q+=2){
     for(p=0;p<=7;p++){
      lucky.ShowCN(16*s,q,4);
      lucky.ShowCN(16*p,q,0);s=p;delay(500);
      if(s==7){
        lucky.ShowCN(16*s,q,4);
        }
    }
  }
  //lucky.Fill_Screen(0x00);
  }
void qingyin(){
     lucky.ShowCN(16*0,0,6+1);lucky.ShowCN(16*1,0,6+2);lucky.ShowCN(16*2,0,6+3);lucky.ShowCN(16*3,0,6+4);lucky.ShowCN(16*4,0,6+5);
  lucky.ShowCN(16*0,2,6+6);lucky.ShowCN(16*1,2,6+7);lucky.ShowCN(16*2,2,6+8);lucky.ShowCN(16*3,2,6+9);lucky.ShowCN(16*4,2,6+10);lucky.ShowCN(16*5,2,6+11);
  lucky.ShowCN(16*0,4,6+12);lucky.ShowCN(16*1,4,6+13);
  lucky.ShowCN(16*0,6,6+14);lucky.ShowCN(16*1,6,6+15);lucky.ShowCN(16*2,6,6+16);lucky.ShowCN(16*3,6,6+17);lucky.ShowCN(16*4,6,6+18);
}

  void caidan(){
   if (LE==0){
   switch(u){

      case 0:
       qingyin();
      fanbaiCN(16*0,0,6+1);fanbaiCN(16*1,0,6+2);fanbaiCN(16*2,0,6+3);fanbaiCN(16*3,0,6+4);fanbaiCN(16*4,0,6+5);
      uz=u;

   break;
    case 1:
    qingyin();
       lucky.ShowCN(16*0,0,6+1);lucky.ShowCN(16*1,0,6+2);lucky.ShowCN(16*2,0,6+3);lucky.ShowCN(16*3,0,6+4);lucky.ShowCN(16*4,0,6+5);
        fanbaiCN(16*0,2,6+6);fanbaiCN(16*1,2,6+7);fanbaiCN(16*2,2,6+8);fanbaiCN(16*3,2,6+9);fanbaiCN(16*4,2,6+10);fanbaiCN(16*5,2,6+11);
        uz=u;alo=0;
   break;
    case 2:
     qingyin();
      lucky.ShowCN(16*0,2,6+6);lucky.ShowCN(16*1,2,6+7);lucky.ShowCN(16*2,2,6+8);lucky.ShowCN(16*3,2,6+9);lucky.ShowCN(16*4,2,6+10);lucky.ShowCN(16*5,2,6+11);
        fanbaiCN(16*0,4,6+12);fanbaiCN(16*1,4,6+13);
        uz=u;
   break;
    case 3:
     qingyin();
      lucky.ShowCN(16*0,4,6+12);lucky.ShowCN(16*1,4,6+13);
      fanbaiCN(16*0,6,6+14);fanbaiCN(16*1,6,6+15);fanbaiCN(16*2,6,6+16);fanbaiCN(16*3,6,6+17);fanbaiCN(16*4,6,6+18);
      uz=u;
   break;
   case 4:
    qingyin();
      lucky.ShowCN(16*0,0,6+1);lucky.ShowCN(16*1,0,6+2);lucky.ShowCN(16*2,0,6+3);lucky.ShowCN(16*3,0,6+4);lucky.ShowCN(16*4,0,6+5);
  lucky.ShowCN(16*0,2,6+6);lucky.ShowCN(16*1,2,6+7);lucky.ShowCN(16*2,2,6+8);lucky.ShowCN(16*3,2,6+9);lucky.ShowCN(16*4,2,6+10);lucky.ShowCN(16*5,2,6+11);
  lucky.ShowCN(16*0,4,6+12);lucky.ShowCN(16*1,4,6+13);
  lucky.ShowCN(16*0,6,6+14);lucky.ShowCN(16*1,6,6+15);lucky.ShowCN(16*2,6,6+16);lucky.ShowCN(16*3,6,6+17);lucky.ShowCN(16*4,6,6+18);
  uz=u;
    break;
     }delay(500);}else if(LE){
switch(uz){
   case 0:
/*for(int i=0; i<7,i++;){
  for(int s=0;s<7,s++;){
lucky.ShowCN(s*0,i,4);delay(20);
  }
  }*/lucky.Fill_Screen(0x00);LE1=1;
display.initialize();
display.clear();
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  //ESP.getVcc()
  display.println(ESP.getVcc()/1024);
// display.println("Hello, world!");
  display.update();
break;
case 1:
lucky.Fill_Screen(0x00);LE1=1;
display.initialize();
display.clear();
  display.setTextSize(3);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(analogRead(A0));
   display.update();
Serial.println(analogRead(A0));alo=1;
break;
case 2:
pingbao();LE1=1;
break;
case 3:
lucky.Fill_Screen(0x00);LE1=1;
display.initialize();
display.clear();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(3,2);
display.println("ver:1.0");
   display.update();
break;
case 4:
  lucky.Fill_Screen(0x00);LE1=1;
break;
}
}

  }
void setup()
{
  delay(500);
  lucky.Initial();//pingbao();// //  lucky.Write_IIC_Command(0xA6);//
  //lucky.ShowCN(16,2,3);fanbaiCN(16*2,4,3);
  lucky.Fill_Screen(0x00);
  lucky.ShowCN(16*0,0,6+1);lucky.ShowCN(16*1,0,6+2);lucky.ShowCN(16*2,0,6+3);lucky.ShowCN(16*3,0,6+4);lucky.ShowCN(16*4,0,6+5);
  lucky.ShowCN(16*0,2,6+6);lucky.ShowCN(16*1,2,6+7);lucky.ShowCN(16*2,2,6+8);lucky.ShowCN(16*3,2,6+9);lucky.ShowCN(16*4,2,6+10);lucky.ShowCN(16*5,2,6+11);
  lucky.ShowCN(16*0,4,6+12);lucky.ShowCN(16*1,4,6+13);
  lucky.ShowCN(16*0,6,6+14);lucky.ShowCN(16*1,6,6+15);lucky.ShowCN(16*2,6,6+16);lucky.ShowCN(16*3,6,6+17);lucky.ShowCN(16*4,6,6+18);
  delay(500);
  attachInterrupt(digitalPinToInterrupt(0),InterruptFunc,FALLING);pinMode(0,INPUT);
  //pinMode(0,INPUT);ui=digitalRead(0);flipper.attach_ms(10,flip);
pingbao();
pinMode(encoder0PinA, INPUT);
  digitalWrite(encoder0PinA, HIGH);       // 管腳配置
  pinMode(encoder0PinB, INPUT);
  digitalWrite(encoder0PinB, HIGH);       // 管腳配置


  Serial.begin (230400);
  Serial.println("start");                // 提示語言


}
void loop() {if(LE){}else{
  if(!digitalRead(5)&&!digitalRead(4))
xz1();
if(digitalRead(5)&&digitalRead(4))
xz2();
EC11_A_Last =digitalRead(5);   //更新編碼器上一個狀態暫存變量
   EC11_B_Last =digitalRead(4);   //更新編碼器上一個狀態暫存變量
}
gengxing();
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:872598 發表于 2024-3-23 09:43 | 只看該作者
#include <CN_SSD1306.h>
#include "codetab.c"   //codetab
#include <Adafruit_ssd1306syp.h>
這幾個文件沒有,編譯過不了。
回復

使用道具 舉報

板凳
ID:983290 發表于 2024-12-19 14:04 | 只看該作者
劉工程 發表于 2024-3-23 09:43
#include
#include "codetab.c"   //codetab
#include

這是用arduino的,主要是編碼器代碼
回復

使用道具 舉報

地板
ID:469589 發表于 2025-2-19 11:53 | 只看該作者
太復雜了,為了編碼器我寧愿不用!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产剧情一区 | 蜜臀网| 国产成人99久久亚洲综合精品 | 午夜网址| 久久精品二区 | 国产精品激情 | 在线成人一区 | 国产免费一区二区三区网站免费 | 国产一区二区精品自拍 | 亚洲精品久久久一区二区三区 | 亚洲男人天堂2024 | 精品在线一区 | 国产91网址 | 性色av香蕉一区二区 | 国产精品欧美一区二区三区 | 久草资源网站 | 亚洲欧美日韩精品久久亚洲区 | 精品国产黄色片 | 国产激情网 | 国产福利在线 | 欧美国产日韩一区 | 免费高潮视频95在线观看网站 | 91精品国产一区二区三区 | 精品国产精品 | 麻豆久久久久 | 一级毛片在线视频 | 99久久精品免费看国产四区 | 91精品一区| 久久r精品 | 不卡一区二区三区四区 | 亚洲欧美精品 | 日本精品一区二区三区视频 | 中国人pornoxxx麻豆 | av激情在线 | 国产精品精品视频一区二区三区 | 欧美亚州综合 | 国产精品成人一区 | 国产精品久久久久久亚洲调教 | 91视频大全 | 亚洲福利在线视频 | 一级做a爰片久久毛片免费看 |