2017-07-29 8 views
0

YouTubeからPropeller Clock(POV Clock)コードを取得し、「Hello」と「World」という2つのメッセージのみを表示するように修正しました。POVディスプレイにさまざまなメッセージを表示するにはどうすればいいですか?

私はPOVディスプレイに2秒間 "Hello"を表示し、次に2秒間 "World"を表示したいが、それに問題がある。

現在のところ、コードには「Hello」が非常に高速で表示され、2秒後にもう一度表示されます。

私はLEDを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

各テキストを1回だけ印刷したい場合は、もう1つの答えは問題ありません。ループ内でメッセージを繰り返すには、両方の単語を印刷した後に開始時間をリセットする必要があります。

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; 
    } 
} 
関連する問題