发布时间:2025-12-10 19:18:05 浏览次数:18
arduino光立方程序代码_arduino设计案例编译环境:win10,arduino1.8.10_光立方程序
编译环境:win10,arduino1.8.10
硬件支持:光立方组件,移位锁存器(20扩展)74HC595,arduino组件(主板)
打开arduino,点击工具栏选择开发板型号,本博文使用UNO R3,选择Arduino/Genuino Uno
开发基础(标准库基本函数):(只列出部分需要用到的)
1.数字I/O 14个接口
void PinMode(unsigned char pin,unsigned char mode)希望我今天分享的这篇文章可以帮到您。
pin:要配置的引脚 mode:设置模式-INPUT/OUTPUT
void digitalWrite(unsigned char pin,unsigned char value)pin:要配置的引脚 value:HIGH/LOW
int digitalRead(unsigned char pin)pin:获取电压值的引脚 返回值:获取引脚电压情况HIGH/LOW
2.时间函数
void delay(unsigned long ms)一个延时函数 ms表示延时时长,单位ms
3.串口函数
void begin(unsigned long baud)设置串口通信波特率
int available(void)判断串口是否收到数据
4.模拟I/O 6个接口
void analogReference(type)配置模拟引脚的参考电压
type:DEFAULT 默认值,参考电压为5V
INTERNAL 低电压模式
EXTERNAL 扩展模式
void analogWrite(unsigned char pin ,int value)读取引脚的模拟量电压值
void analogRead(unsigned char pin)通过PWM方式在引脚上输出一个模拟量
pin: A0~A5 value: 0~255
5.高级I/O
下面放光立方源码:(和STM32流水灯原理一样,用数组表示亮灯序列。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};//该部分代码可以不用关心,它已经帮我们实现了功能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写数据{ // 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状态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 // 特效时间设置#define CUBESIZE 4#define PLANESIZE CUBESIZE*CUBESIZE#define PLANETIME 2222 #define TIMECONST 20unsigned 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 ); //拷贝第一帧数据PatternIdx += PLANESIZE; //索引偏移16DisplayTime = pgm_read_byte_near( imageTab + PatternIdx++ ); //读取延时时间EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;while ( millis() < EndTime ) //对一帧数据进行处理{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); //选择默认5V作为参考电压LightCube_Init();}void loop() {LightCube_FreeMode();}