2017-07-29 61 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; 
    } 
}