|
#include <CN_SSD1306.h>
#include "codetab.c" //codetab
#include "Ticker.h"
#define OLED_SDA 2
#define OLED_SCL 16
//庫(kù)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;
//庫(kù)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引腳上一次的狀態(tài)
unsigned char EC11_B_Last; //EC11的B引腳上一次的狀態(tài)
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; //用于分析編碼器動(dòng)作的變量
if(!digitalRead(5) && !EC11_A_Last && !digitalRead(4) &&EC11_B_Last) //A相當(dāng)前狀態(tài)和上次狀態(tài)都為低電平時(shí),抓B相上次狀態(tài)為高當(dāng)前狀態(tài)為低的下降沿。
{
ScanResult = 1; //正轉(zhuǎn)
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相當(dāng)前狀態(tài)和上次狀態(tài)都為低電平時(shí),抓A相上次狀態(tài)為高當(dāng)前狀態(tài)為低的下降沿。
{
ScanResult = 2; //反轉(zhuǎn)
encoder0Pos--;u--;
if(encoder0Pos>3)encoder0Pos=3; if(u>3)u=3;Serial.println (encoder0Pos, DEC);caidan();
}
EC11_A_Last =digitalRead(5); //更新編碼器上一個(gè)狀態(tài)暫存變量
EC11_B_Last =digitalRead(4); //更新編碼器上一個(gè)狀態(tài)暫存變量
}
void xz2(){
char ScanResult = 0; //用于分析編碼器動(dòng)作的變量
if(digitalRead(4) && EC11_B_Last && !digitalRead(5) &&EC11_A_Last) //B相當(dāng)前狀態(tài)和上次狀態(tài)都為低電平時(shí),抓B相上次狀態(tài)為高當(dāng)前狀態(tài)為低的下降沿。
{
ScanResult = 1; //正轉(zhuǎn)
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相當(dāng)前狀態(tài)和上次狀態(tài)都為gao電平時(shí),抓A相上次狀態(tài)為高當(dāng)前狀態(tài)為低的下降沿。
{
ScanResult = 2; //反轉(zhuǎn)
encoder0Pos--;u--;
if(encoder0Pos>3)encoder0Pos=3; if(u>3)u=3;Serial.println (encoder0Pos, DEC);caidan();
}
EC11_A_Last =digitalRead(5); //更新編碼器上一個(gè)狀態(tài)暫存變量
EC11_B_Last =digitalRead(4); //更新編碼器上一個(gè)狀態(tài)暫存變量
}
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); //延時(shí)消抖
Key=1; //把標(biāo)志位置1,防止程序循環(huán)執(zhí)行
if(digitalRead(0)==0) //再次判斷按鍵狀態(tài),排除干擾
{
LE++;if(LE==2)LE=0;
// u++;if(u==5)u=0;
}
}
else if(digitalRead(0)==1)
{
Key=0; ko=0; //當(dāng)按鍵沒(méi)有被按下時(shí),重置標(biāo)志位
}
}
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"); // 提示語(yǔ)言
}
void loop() {if(LE){}else{
if(!digitalRead(5)&&!digitalRead(4))
xz1();
if(digitalRead(5)&&digitalRead(4))
xz2();
EC11_A_Last =digitalRead(5); //更新編碼器上一個(gè)狀態(tài)暫存變量
EC11_B_Last =digitalRead(4); //更新編碼器上一個(gè)狀態(tài)暫存變量
}
gengxing();
}
|
|