2017-07-29 71 views
0

我从YouTube上挑选了一个螺旋桨时钟(POV Clock)代码,并修改为仅显示2条消息:“Hello”和“World”。如何在POV显示中显示不同的消息?

我想让POV显示器在2秒内显示“Hello”,然后在其他2秒内显示“World”,但我遇到问题。

此刻代码只显示“你好”的速度非常快,2秒后它再次显示。

我知道我需要让指示灯闪烁2秒钟,显示单词,擦除并显示另一个单词,但我不知道该怎么做。

如果有人可以帮助我,我将不胜感激。

const int LEDpins[] = { 
    4,9,10,11,12,8,6,5 
}; 
int rows= 8; 
const int charHeight = 8; 
const int charWidth = 5; 
const unsigned char font[95][5] = {}; 
const int sensorPIN = 3; 
int sensVal; 
int i; 
int j; 
int conteo = 0; 
char textString[] = "Hello"; 
char textString01[] = "World"; 
String tmp_str; 

void setup() { 
    pinMode(12, OUTPUT); 
    pinMode(13, OUTPUT); 
    pinMode(11, OUTPUT); 
    pinMode(3, INPUT); 
    for (i = 0; i < rows; i++) 
    pinMode(LEDpins[i], OUTPUT); 
} 

void loop() { 
    Print(); 
    delay(2000); 
    Print01(); 
    delay(2000); 
} 

void Print() { 
    tmp_str=tmp_str+" "; 
    while(digitalRead(sensorPIN) != 0) { 
    digitalWrite(13, LOW); 
    } 
    digitalWrite(13, HIGH); 
    for (int k=sizeof(textString)-1; k>-1; k--){ 
    printLetterboven(textString[k]); 
    } 
} 

void Print01() { 
    tmp_str=tmp_str+" "; 
    while(digitalRead(sensorPIN) != 0) { 
    digitalWrite(13,LOW); 
    } 
    digitalWrite(13, HIGH); 
    for (int k=sizeof(textString01)-1; k>-1; k--){ 
    printLetterboven(textString01[k]); 
    } 
} 

void printLetterboven(char ch) { 
    if (ch < 32 || ch > 126){ 
    ch = 32; 
    } 
    ch -= 32; 
    for (int i=charWidth-1; i>-1; i--) { 
    byte b = font[ch][i]; 
    for (int j=0; j<charHeight; j++) { 
     digitalWrite(LEDpins[j], bitRead(b,j)); 
    } 
    delay(1); 
    } 
    for (i = 0; i < rows; i++) 
    digitalWrite(LEDpins[i] , LOW); 
    delay(1); 
} 
+0

请花一点时间,当你得到一个通过单击灰色选中图标“接受”,我的回答机会,让别人可以从你的问题中受益,并从我的答复中,谢谢! :) – TomServo

回答

0

您需要使用millis(),它返回从毫秒开始草图开始的时间。

unsigned long t1 = millis(); // Get the time at the start 
unsigned long t2; 

void loop() 
{ 
    t2 = millis()   // Get the current time 

    if(t2-t1 < 2000){  // Runs until 2 seconds have elapsed 
     Print(); 
    } 
    else if(t2-t1 < 4000){ // Runs after 2 seconds have elapsed, until 4 seconds 
     Print01(); 
    } 
} 
0

另一个答案是罚款,如果你想打印每一个文本一次只。要在一个循环中重复你的消息,你需要打印两个单词后重置开始时间,是这样的:

unsigned long tStart; 
unsigned long tNow; 
unsigned long duration; 

void setup() 
{ 
    tStart = millis(); 
} 

void loop() 
{ 
    tNow = millis(); 
    duration = tNow - tStart; 

    if(duration < 2000) Print(); 
    if(duration >=2000 && duration < 4000) Print01(); 
    if(duration >=4000) 
    { 
     tStart = millis(); 
     tNow = tStart; 
    } 
}