Arduino:光立方的开发与实现
編譯環(huán)境:win10,arduino1.8.10
硬件支持:光立方組件,移位鎖存器(20擴展)74HC595,arduino組件(主板)
打開arduino,點擊工具欄選擇開發(fā)板型號,本博文使用UNO R3,選擇Arduino/Genuino Uno
開發(fā)基礎(chǔ)(標(biāo)準(zhǔn)庫基本函數(shù)):(只列出部分需要用到的)
1.數(shù)字I/O 14個接口
pin:要配置的引腳 mode:設(shè)置模式-INPUT/OUTPUT
void digitalWrite(unsigned char pin,unsigned char value)pin:要配置的引腳 value:HIGH/LOW
int digitalRead(unsigned char pin)pin:獲取電壓值的引腳 返回值:獲取引腳電壓情況HIGH/LOW
2.時間函數(shù)
void delay(unsigned long ms)一個延時函數(shù) ms表示延時時長,單位ms
3.串口函數(shù)
void begin(unsigned long baud)設(shè)置串口通信波特率
int available(void)判斷串口是否收到數(shù)據(jù)
4.模擬I/O 6個接口
void analogReference(type)配置模擬引腳的參考電壓
type:DEFAULT 默認(rèn)值,參考電壓為5V
INTERNAL 低電壓模式
EXTERNAL 擴展模式
讀取引腳的模擬量電壓值
void analogRead(unsigned char pin)通過PWM方式在引腳上輸出一個模擬量
pin: A0~A5 value: 0~255
5.高級I/O
下面放光立方源碼:(和STM32流水燈原理一樣,用數(shù)組表示亮燈序列。4 * 4 * 4的光立方模塊,效果還行)
#include <arduino.h> const unsigned char imageTab[] PROGMEM = {B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, 10 , B0000, B0000, B0010, B0000, B0000, B1000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10 , B0000, B0000, B0110, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10 , B0000, B0100, B0100, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10 , B0000, B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0010, 10 , B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0100, B0000, B0010, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0110, B0000, B0010, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0110, B0010, B0010, 10 , B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0010, B0000, B0010, B0010, B0010, 10 , B0000, B0000, B1000, B0000, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0010, B0000, B0000, B0010, B0010, 10 , B0000, B0000, B1000, B0010, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0010, 10 , B0000, B0000, B1000, B0110, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, 10 , B0000, B0000, B1000, B1110, B0000, B0000, B0000, B0010, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10 , B0000, B1000, B1000, B1110, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10 , B0000, B1000, B1000, B1100, B0000, B1000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10 , B0000, B1000, B1000, B1000, B0000, B1100, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 10 , B0000, B1000, B1000, B0000, B0000, B1100, B0100, B0100, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B0000, 10 , B0000, B1000, B0000, B0000, B0000, B1100, B0100, B0100, B0000, B0000, B0000, B0100, B0001, B0000, B0000, B0000, 10 , B0000, B0000, B0000, B0000, B0000, B1100, B0100, B0100, B0000, B0000, B0000, B0100, B0001, B0000, B0000, B0100, 10 , B0000, B0000, B0000, B0000, B0000, B0100, B0100, B0100, B0000, B0000, B0000, B0100, B0001, B0000, B0000, B0110, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0100, B0000, B0000, B0000, B0100, B0001, B0000, B0000, B0111, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0100, B0001, B0000, B0001, B0111, 10 , B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0100, B0001, B0001, B0001, B0111, 10 , B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0011, B0001, B0001, B0011, 10 , B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0000, B0111, B0001, B0001, B0001, 10 , B0000, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0100, B0000, B0000, B0000, B0111, B0001, B0001, B0000, 10 , B0000, B0000, B0000, B0000, B0100, B0100, B0000, B0000, B0100, B0000, B0000, B0000, B0111, B0001, B0000, B0000, 10 , B0000, B0000, B0000, B1000, B0100, B0100, B0100, B0000, B0100, B0000, B0000, B0000, B0111, B0000, B0000, B0000, 10 , B0000, B0000, B0000, B1000, B0100, B0100, B0100, B0100, B0100, B0000, B0000, B0000, B0110, B0000, B0000, B0000, 10 , B0000, B0000, B0000, B1100, B0100, B0100, B0100, B0100, B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, 10 , B0000, B0000, B0000, B1100, B0100, B0100, B0100, B1100, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, 10 , B0000, B0000, B0000, B1100, B0000, B0100, B0100, B1100, B0000, B0000, B0000, B1000, B0000, B0001, B0000, B0000, 10 , B0000, B0000, B0000, B1100, B0000, B0000, B0100, B1100, B0000, B0000, B0000, B1000, B0000, B0001, B0000, B1000, 10 , B0000, B0000, B0000, B1100, B0000, B0000, B0000, B1100, B0000, B0000, B0000, B1000, B0000, B0001, B1000, B1000, 10 , B0000, B0000, B0000, B1100, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B1000, B0000, B1001, B1000, B1000, 10 , B0000, B0000, B0000, B1000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B1000, B0000, B1101, B1000, B1000, 10 , B0000, B0000, B0001, B0000, B0000, B0000, B0000, B1000, B0000, B0000, B0000, B1000, B0000, B1111, B1000, B1000, 10 , B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B1000, B0000, B1111, B1001, B1000, 10 , B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0001, B0000, B0000, B1111, B1001, B1000, 10 , B0100, B0000, B0001, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B0000, B0000, B1111, B1001, B0000, 10 , B0100, B0000, B0011, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B0000, B0000, B1111, B0001, B0000, 10 , B0100, B0000, B0111, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B1111, B0000, 10 , B0100, B0100, B0111, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0111, B0000, 10 , B0100, B0100, B0111, B0000, B0100, B0000, B0001, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B1001, B0000, 10 , B0100, B0100, B0111, B0000, B0100, B0000, B0001, B0000, B0100, B0000, B0001, B0000, B0000, B0000, B1000, B0000, 10 , B0100, B0100, B0111, B0000, B0100, B0000, B0001, B0000, B0100, B0000, B0000, B0000, B0100, B0000, B1000, B0000, 10 , B0100, B0100, B0111, B0000, B0100, B0000, B0001, B0000, B0100, B0000, B0000, B0000, B1100, B0000, B1000, B0000, 10 , B0100, B0100, B0110, B0000, B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B1100, B1000, B1000, B0000, 10 , B0100, B0100, B0100, B0001, B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B1100, B1000, B1000, B1000, 10 , B0100, B0100, B0000, B0001, B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B1100, B1000, B1000, B1100, 10 , B0100, B0000, B0000, B0001, B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B1100, B1000, B1000, B1110, 10 , B0000, B0000, B0000, B0001, B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B1100, B1000, B1000, B1111, 10 , B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0000, B0100, B0000, B0000, B0001, B1100, B1000, B1000, B1111, 10 , B0000, B0000, B0100, B0001, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B1100, B1000, B1000, B1111, 10 , B0000, B0000, B0100, B0011, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B1000, B1000, B1000, B1111, 10 , B0000, B0000, B0100, B0111, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B0000, B1000, B1000, B1111, 10 , B0000, B0100, B0100, B0111, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B0001, B0000, B1000, B1111, 10 , B0100, B0100, B0100, B0111, B0000, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B0001, B0000, B0000, B1111, 10 , B0100, B0100, B0100, B0111, B0100, B0000, B0000, B0001, B0000, B0000, B0000, B0001, B0001, B0000, B0000, B0111, 10 , B0100, B0100, B0100, B0111, B0100, B0000, B0000, B0001, B0100, B0000, B0000, B0001, B0001, B0000, B0000, B0011, 10 , B0100, B0100, B0100, B0111, B0100, B0000, B0000, B0001, B0100, B0000, B0000, B0001, B0101, B0000, B0000, B0001, 10 , B0100, B0100, B0100, B0111, B0100, B0000, B0000, B0001, B0100, B0000, B0000, B0001, B0111, B0000, B0000, B0000, 10 , B0100, B0100, B0100, B0111, B0100, B0000, B0000, B0001, B0100, B0000, B0010, B0000, B0111, B0001, B0000, B0000, 10 , B0100, B0100, B0100, B0111, B0100, B0000, B0000, B0000, B0100, B0000, B0010, B0000, B0111, B0001, B0001, B0000, 10 , B0100, B0100, B0100, B0110, B0100, B0000, B0000, B0000, B0100, B0000, B0011, B0000, B0111, B0001, B0001, B0000, 10 , B0100, B0100, B0100, B0100, B0100, B0000, B0000, B0000, B0100, B0000, B0111, B0000, B0111, B0001, B0001, B0001, 10 , B0100, B0100, B0100, B0000, B0100, B0000, B0000, B0000, B0100, B0000, B0111, B0100, B0111, B0001, B0001, B0001, 10 , B0100, B0100, B0000, B0000, B0100, B0000, B0000, B0000, B0100, B0000, B0111, B0100, B0111, B0001, B0001, B0101, 10 , B0100, B0000, B0000, B0000, B0100, B0000, B0000, B0000, B0100, B0000, B0111, B0100, B0111, B0001, B0001, B0111, 10 , B0000, B0100, B0000, B0000, B0100, B0000, B0000, B0000, B0100, B0000, B0111, B0101, B0111, B0001, B0001, B0111, 10 , B0000, B0100, B0000, B0000, B0000, B0000, B0000, B0001, B0100, B0000, B0111, B0101, B0111, B0001, B0001, B0111, 10 , B0000, B0100, B0000, B0001, B0000, B0000, B0000, B0001, B0000, B0000, B0111, B0101, B0111, B0001, B0001, B0111, 10 , B0000, B0100, B0000, B0011, B0000, B0000, B0000, B0001, B0000, B0000, B0111, B0101, B0011, B0001, B0001, B0111, 10 , B0000, B0100, B0000, B0111, B0000, B0000, B0000, B0001, B0000, B0000, B0111, B0101, B0001, B0001, B0001, B0111, 10 , B0000, B0100, B0100, B0111, B0000, B0000, B0000, B0001, B0000, B0000, B0111, B0101, B0000, B0001, B0001, B0111, 10 , B0100, B0100, B0100, B0111, B0000, B0000, B0000, B0001, B0000, B0000, B0111, B0101, B0001, B0000, B0001, B0111, 10 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ;unsigned int HC595_Temp = 0; unsigned int HC595_SCLK=8; //SH_CP of 74HC595 unsigned int HC595_LCLK=9; //ST_CP of 74HC595 unsigned int HC595_Data=3; //DS of 74HC595 unsigned int HC595_EN = 2; unsigned int LED_Pin16= 4; unsigned int LED_Pin17= 5; unsigned int LED_Pin18= 6; unsigned int LED_Pin19= 7; unsigned int LEDPin[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; unsigned int PlanePin[4] = {4, 5, 6, 7};//該部分代碼可以不用關(guān)心,它已經(jīng)幫我們實現(xiàn)了功能 void LightCube_Init() //光立方引腳初始化 {pinMode( HC595_LCLK, OUTPUT );pinMode( HC595_SCLK, OUTPUT );pinMode( HC595_Data, OUTPUT );pinMode( HC595_EN, OUTPUT );pinMode( LED_Pin16, OUTPUT );pinMode( LED_Pin17, OUTPUT );pinMode( LED_Pin18, OUTPUT );pinMode( LED_Pin19, OUTPUT );digitalWrite(LED_Pin16,LOW);digitalWrite(LED_Pin17,LOW);digitalWrite(LED_Pin18,LOW);digitalWrite(LED_Pin19,LOW); }void HC595_WriteData(void) //74HC595寫數(shù)據(jù) { // digitalWrite(HC595_LCLK, LOW); // digitalWrite(HC595_EN, HIGH); shiftOut(HC595_Data, HC595_SCLK, LSBFIRST, HC595_Temp); shiftOut(HC595_Data, HC595_SCLK, LSBFIRST, (HC595_Temp >> 8));digitalWrite(HC595_LCLK, LOW); digitalWrite(HC595_LCLK, HIGH);digitalWrite(HC595_EN, LOW); }void LightCube_SelfCheckMode(void) //自檢模式 {unsigned char i = 0;unsigned char j = 0;//自檢模式for(i = 0; i < 4; i++){digitalWrite( PlanePin[i], HIGH);}for(i = 0; i < 4; i++){digitalWrite( PlanePin[i], LOW);for(j = 0; j < 16; j++){HC595_Temp = (1 << j);HC595_WriteData();delay(200);}digitalWrite( PlanePin[i], HIGH);}for(i = 0; i < 4; i++){digitalWrite( PlanePin[i], LOW);}for(j = 0; j < 16; j++){HC595_Temp = (1 << j);HC595_WriteData();delay(200);}for(i = 0; i < 2; i++){HC595_Temp = 0xFFFF;HC595_WriteData();delay(500);HC595_Temp = 0x0000;HC595_WriteData();delay(500);} }//value LED位置 charge LED狀態(tài)void LEDStatus_GetData( int value,int charge){if(value >= 16) return;if(charge != LOW && charge != HIGH) return;if(charge == LOW) {switch (value){case 0: HC595_Temp &=~_BV(15); break;case 1: HC595_Temp &=~_BV(14); break;case 2: HC595_Temp &=~_BV(13); break;case 3: HC595_Temp &=~_BV(12); break;case 4: HC595_Temp &=~_BV(11); break;case 5: HC595_Temp &=~_BV(10); break;case 6: HC595_Temp &=~_BV(9); break;case 7: HC595_Temp &=~_BV(8); break;case 8: HC595_Temp &=~_BV(7); break;case 9: HC595_Temp &=~_BV(6); break;case 10: HC595_Temp &=~_BV(5); break;case 11: HC595_Temp &=~_BV(4); break;case 12: HC595_Temp &=~_BV(3); break;case 13: HC595_Temp &=~_BV(2); break;case 14: HC595_Temp &=~_BV(1); break;case 15: HC595_Temp &=~_BV(0); break; default:break; }}else{switch (value){case 0: HC595_Temp |=_BV(15); break;case 1: HC595_Temp |=_BV(14); break;case 2: HC595_Temp |=_BV(13); break;case 3: HC595_Temp |=_BV(12); break;case 4: HC595_Temp |=_BV(11); break;case 5: HC595_Temp |=_BV(10); break;case 6: HC595_Temp |=_BV(9); break;case 7: HC595_Temp |=_BV(8); break;case 8: HC595_Temp |=_BV(7); break;case 9: HC595_Temp |=_BV(6); break;case 10: HC595_Temp |=_BV(5); break;case 11: HC595_Temp |=_BV(4); break;case 12: HC595_Temp |=_BV(3); break;case 13: HC595_Temp |=_BV(2); break;case 14: HC595_Temp |=_BV(1); break;case 15: HC595_Temp |=_BV(0); break; default:break; } }}#define ICStation_delay_MAX 10000 // 特效時間設(shè)置#define CUBESIZE 4 #define PLANESIZE CUBESIZE*CUBESIZE #define PLANETIME 2222 #define TIMECONST 20 unsigned int ICStation_delay =ICStation_delay_MAX; unsigned int PatternIdx =0; unsigned int PatternMax = sizeof(imageTab);void LightCube_FreeMode(void) //自由模式 { int i = 0, j = 0;byte PatternBuf[16]; int PatternIdx;byte DisplayTime; unsigned long EndTime;int plane; int patbufidx; unsigned char ShiftTemp = 0;PatternIdx = 0;do {memcpy_P( PatternBuf, imageTab+PatternIdx, 16 ); //拷貝第一幀數(shù)據(jù)PatternIdx += PLANESIZE; //索引偏移16DisplayTime = pgm_read_byte_near( imageTab + PatternIdx++ ); //讀取延時時間EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;while ( millis() < EndTime ) //對一幀數(shù)據(jù)進(jìn)行處理{patbufidx = 0; for (plane=0; plane < 4; plane++) {for (i = 0; i < 4; i++) //四層共陰極全部給1{digitalWrite( PlanePin[i], HIGH );}for(j = 0; j < 16; j++){LEDStatus_GetData(LEDPin[j], LOW);}HC595_WriteData();for(j = 0; j < 4; j++){for(i = 0; i < 4; i++){if((PatternBuf[patbufidx] >> i) & B0001){LEDStatus_GetData(LEDPin[4 * (j % 4) + i], HIGH);}}patbufidx++;}HC595_WriteData();digitalWrite( PlanePin[plane], LOW );delayMicroseconds( PLANETIME );} }} while (DisplayTime > 0); }int AnalogVal = 0; int AnalogMapVal = 0; int ShiftVal = 0; void setup() {// put your setup code here, to run once:pinMode(0, OUTPUT);digitalWrite(0, HIGH);Serial.begin(9600);analogReference(DEFAULT); //選擇默認(rèn)5V作為參考電壓LightCube_Init(); }void loop() {LightCube_FreeMode(); }總結(jié)
以上是生活随笔為你收集整理的Arduino:光立方的开发与实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2586):如何设计高扩展路由
- 下一篇: 工作178:moment使用