gpt4 book ai didi

c - 是否有可能使用共阳极配置点亮方形 5*5 矩阵中的 LED

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:46 25 4
gpt4 key购买 nike

我有一个 LED 矩阵,它在行方向是共阳极,在列方向是共阴极。我需要以正方形(第一行 && 最后一行 && 第一列 && 最后一列)的形状发光矩阵,但我无法做到。我能够分别点亮第一行和最后一行,以及分别点亮第一列和第二列)

void first_last_row();
void first_last_column();

int Led_Row_Pins[] = { 2 , 3 , 4 , 5 , 6 } ; // Anode pins are shorted in row_wise_manner
int Led_Column_Pins[] = {8 , 9 , 10 , 11 , 12} ; // Column Pins are shorted in column_wise_manner
int Loop_Count = 5 ;
int Wait_Time_On = 1000 ;
int Wait_Time_Off = 500 ;
int i = 0 ;
int j = 0 ;
int state = 1 ;

void setup() {
for( i = 0 ; i < Loop_Count ; i++ ){ // Anode Pins are connected in row_wise manner and are made LOW so that they dont conduct
pinMode(Led_Row_Pins[i],OUTPUT);
digitalWrite(Led_Row_Pins[i],LOW);
pinMode(Led_Column_Pins[i],OUTPUT); // Cathode Pins are connected in column_wise manner and are made HIGH so that they dont conduct
digitalWrite(Led_Column_Pins[i],HIGH);
}
}

void loop() {
first_last_row();
delay(1000);
first_last_column();
}


void first_last_row()
{
for( i = 0 ; i < Loop_Count ; i++ )// Led First And Last Row
{
for( j = 0 ; j < Loop_Count ; j++)
{
if( i == 0 || i == 4 )
{
digitalWrite(Led_Row_Pins[i],state); //Led_On_State
digitalWrite(Led_Column_Pins[j],!state);
}
}
}
}


void first_last_column()
{

for( j = 0 ; j < Loop_Count ; j++ )// Led First And Last Column
{
for( i = 0 ; i < Loop_Count ; i++)
{
if( j == 0 || j == 4 )
{
digitalWrite(Led_Row_Pins[i],state);// Led_On_State
digitalWrite(Led_Column_Pins[j],!state);
}
}
}
}

我需要第一行、最后一行、第一列和最后一列一起发光,这样它就形成了一个正方形的形状,但我只能把它们分开发光,只有第一行和最后一行在一起,第一列和最后一列发光专栏。

最佳答案

在您的特定情况下,您可以打开第一行和最后一行,例如1 毫秒然后打开第一列和最后一列 1 毫秒并重复此操作。我进一步建议在打开新模式之前关闭所有 LED。

void loop() { 
static int show_rows = 0;

switch_all_off();
if(show_rows) {
first_last_row();
} else {
first_last_column();
}
show_rows = !show_rows;
delay(10);
}

void switch_all_off()
{
int off = 0;
for( j = 0 ; j < Loop_Count ; j++ )
{
digitalWrite(Led_Row_Pins[i],off);
digitalWrite(Led_Column_Pins[j],!off);
}
}

第一步,行和列中的 LED 都将更亮。要解决此问题,您可以从行或列中排除角落 LED,例如

void first_last_column()
{

for( j = 0 ; j < Loop_Count ; j++ )// Led First And Last Column
{
for( i = 0 ; i < Loop_Count ; i++)
{
if((i != 0) && (i != 4) && ( j == 0 || j == 4 ))
{
digitalWrite(Led_Row_Pins[i],state);// Led_On_State
digitalWrite(Led_Column_Pins[j],!state);
}
}
}
}

对于更通用的解决方案,您必须遍历行,一行接一行地激活,并根据需要为当前行切换列引脚。

#define MAXLEDS 5
int states[MAXLEDS][MAXLEDS] = {
{ 1, 0, 0, 0, 1 },
{ 0, 1, 0, 1, 0 },
{ 0, 0, 1, 0, 0 },
{ 0, 1, 0, 1, 0 },
{ 1, 0, 0, 0, 1 }
};

void switch_leds(int row) {
int i;

/* switch off all rows */
for(i = 0; i < MAXLEDS, i++) {
digitalWrite(Led_Row_Pins[i], 0);
}

/* switch columns according to current row */
for(i = 0; i < MAXLEDS; i++) {
digitalWrite(Led_Column_Pins[i], !states[row][i]);
}

/* switch on current row */
digitalWrite(Led_Row_Pins[row], 1);

}

void loop() {
static int row = 0;
/* switch on LEDs in a single row */
switch_leds(row);
/* next row */
row++; row %= MAXLEDS;
/* The processing delay between calls to loop() is added to this delay. */
delay(5);
}

所有代码示例都未经测试,可能包含错误。

关于c - 是否有可能使用共阳极配置点亮方形 5*5 矩阵中的 LED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58521030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com