【发布时间】:2013-02-18 17:20:03
【问题描述】:
我刚刚开始了解 Arduino。我有一个来自 Radio Shack 的 1 米长的 LED 灯带可以玩。
该条带有一个示例程序,因此我查看了它并将其精简为基础,但我不明白发生了什么。我正在找人解释发生了什么以及功能代码是如何工作的。
代码如下:
#include <avr/pgmspace.h>
#define DATA_1 (PORTC |= 0X01)
#define DATA_0 (PORTC &= 0XFE)
#define STRIP_PINOUT (DDRC=0xFF)
/*
green 0xff0000
cyan 0xff7f00
truquoise 0xffff00
dark blue 0x00ff00
red 0x0000ff
dark yellow 0x6f00ff
yellow 0x8f00ff
white 0xffffff
off white 0x444444
dim white 0x111111
off 0x000000
*/
PROGMEM long test[10][10]={
{0x000000,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00},
{0x00ff00,0x000000,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00},
{0x00ff00,0x00ff00,0x000000,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00},
{0x00ff00,0x00ff00,0x00ff00,0x000000,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00},
{0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x000000,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00},
{0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x000000,0x00ff00,0x00ff00,0x00ff00,0x00ff00},
{0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x000000,0x00ff00,0x00ff00,0x00ff00},
{0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x000000,0x00ff00,0x00ff00},
{0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x000000,0x00ff00},
{0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x00ff00,0x000000},
};
void setup() {
STRIP_PINOUT;
reset_strip();
}
void loop()
{
while (1)
{
send_pattern(test, 10, 50);
reset_strip();
}
}
void send_pattern(long data[][10], int length, int rate)
{
int i=0;
int j=0;
for (i=0; i<length; i++)
{
noInterrupts();
for (j=0; j<10; j++)
{
send_strip(pgm_read_dword_near(&data[i][j]));
}
interrupts();
delay(rate);
}
}
void send_strip(uint32_t data)
{
int i;
unsigned long j=0x800000;
for (i=0;i<24;i++)
{
if (data & j)
{
DATA_1;
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
DATA_0;
}
else
{
DATA_1;
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
__asm__("nop\n\t");
DATA_0;
}
j>>=1;
}
}
void reset_strip()
{
DATA_0;
delayMicroseconds(20);
}
【问题讨论】:
-
您是否使用 C 编译器编译过代码?你用什么编译器,在什么平台上?当您运行生成的可执行文件时会发生什么?
-
“代码显示不正确” - 如果格式正确,它会显示。
-
感谢您正确格式化代码 Carbonic Acid (H2CO3)。
-
Halfer,我使用 Audrnio 附带的软件来编译和上传代码到板上,所以没有我知道的生成的可执行文件。如果您对代码的工作原理有所了解,将不胜感激。
-
我自己没有使用过 Arduino 用户,但您是否阅读过它随附的入门指南,或者 Arduino 网站上的入门指南?将代码上传到开发板时是否出现任何错误? (我不希望您将原始 C 程序代码上传到板上,因此在某处必须有编译步骤,即使您有软件可以隐藏此过程)。
标签: serial-port arduino hardware-interface