|
原设想是利用 POV 的原理,在 microbit 上用一列 LED 来顺序显示一串字或图的每一列,让麦昆原地旋转来实现 POV 效果。
还没有发现怎样快速点 microbit 的一列 LED,只能用显示只有一列的 5x5 图形来显示,结果发现 LED 显示的切换很慢,即使没有加任何延迟的循环切换都感觉有 0.2 秒的延迟。然后是即使是使用最快的电机速度,结果还是太慢,最终这个幻影麦昆的尝试以失败告终。
在这里抛砖引玉,希望有大神指点。
这是一些失败代码(需要使用手动编辑):
[mw_shl_code=arduino,true]#include <Maqueen_Motor.h>
#include <DFRobot_NeoPixel.h>
#include <Microbit_Matrix.h>
#include <Microbit_Sensors.h>
Maqueen_Motor motor;
DFRobot_NeoPixel rgb_display_15;
const uint8_t bitmap_orginal[] = {
// B00110,B01111,B11110,B01111,B00110,
B11111,B00010,B00100,B00010,B11111,
/* B11100,B01010,B01001,B01010,B11100,
B00110,B01001,B11001,B10110,B00000,
B01111,B10000,B10000,B10000,B01111,
B11111,B10101,B10101,B10101,B10001,
B11111,B10101,B10101,B10101,B10001,
B11111,B00010,B00100,B01000,B11111
*/
};
const int BITMAP_COUNT = sizeof(bitmap_orginal) / sizeof(bitmap_orginal[0]);
uint8_t bitmap_sets[BITMAP_COUNT][5];
void process_bit_map()
{
for (int i = 0; i < BITMAP_COUNT; ++i)
{
bitmap_sets[0] = (bitmap_orginal >> 0) & 0x01;
bitmap_sets[1] = (bitmap_orginal >> 1) & 0x01;
bitmap_sets[2] = (bitmap_orginal >> 2) & 0x01;
bitmap_sets[3] = (bitmap_orginal >> 3) & 0x01;
bitmap_sets[4] = (bitmap_orginal >> 4) & 0x01;
}
}
void setup() {
// motor.motorRun(motor.LEFT,motor.CW,255);
// motor.motorRun(motor.RIGHT,motor.CCW,255);
rgb_display_15.begin(15, 4, 255);
rgb_display_15.setRangeColor(0, 0, 0xff0000);
rgb_display_15.setRangeColor(1, 1, 0xffff00);
rgb_display_15.setRangeColor(2, 2, 0x0000ff);
rgb_display_15.setRangeColor(3, 3, 0x00ff00);
process_bit_map();
}
void loop1() {
static int i = -1;
if (++i >= BITMAP_COUNT)
i = 0;
MMatrix.show(bitmap_sets);
delay(1);
}
void loop() {
static int i = -1;
while(true)
{
if (((Sensors.acceleration(Sensors.Y)) < 0)) {
continue;
}
if (++i >= BITMAP_COUNT)
i = 0;
MMatrix.show(bitmap_sets);
}
}
[/mw_shl_code]
上面的图形数组是用自动生成的代码复制过去的,长这样:
最终呢试了试只显示一个麦昆的 M 字,用手摇,效果也不咋滴,原因是这些 LED 点阵本来就是动态扫描的,所以最后的显示也会发生错乱:
|
|