2016-11-16 3 views
1

私は時間を保持しているリアルタイムクロックを持っており、10個のPWM出力を1時間ごとに変更したいと考えています。アイデアは、ピン1が0%、ピン2が25%、ピン10が100%であることを意味するPWM出力をずらすことです。 1時間後にピン1 = 100%、ピン2 = 0%、ピン3 = 25%、ピン4 = 35%となるように、デューティサイクルを変更してマイクロのピンをループさせようとしています。デューティサイクルが毎時変化するCのマイクロコントローラ上のループスルー

ピン1-10はすべて同じデューティサイクルで終わるか、ピン1-10はデューティサイクルを増やして終わるが、ある時間ごとに何らかの値で増分することはできないように、ロジックを台無しにしているようだ。すべてのヘルプは:)

私が使用しているコード、

int dutyPWM[10] = {0,26,52,78,104,130,156,182,208,214}; 
    if(Hour > 1+hour) 
    { 
     for(int pinnumber = 1; pinnumber < 11; pinnumber++) 
      { 
      for(int n=0, n <= 10; n++) 
      { 
      PWM_Write(pinnumber, n); 
      } 
      } 
    } 
+1

私は毎時間10 PWM出力を変更したいと思います。したがって、ネストされたループが多すぎます。あなたのコードは完全ではありませんので、読者が推測しているか、「あなたのコードを書き留めてください」というのですか? – datafiddler

+0

'Serial.println'文でデバッグして、何が起きているのか調べてみましょう。 –

+0

Serial.print(pinnumber、DEC)を追加しました。 Serial.print(duty [n]);私は義務を果たしました[10] = [0,24,55,65,85,95,110,135,145,215] – Jiggly

答えて

0

あり、グローバル変数currentIdxStartがあると私は時間のtracのを維持するためにRTCクロックを使用しています素晴らしいだろう。

int sizeOfArr = 10; 
    int dutyPWM[sizeOfArr] = {0, 26, 52, 78, 104, 130, 156, 182, 208, 214}; 
    unsigned long nowtime = 0; 
    nowtime = get_time(); 

if (nowtime >= num_unixtime+3600) 
{ 
//setpwmfor10pumps(); 
int idx = currentIdxStart; 
for (int i = 4; i <= 13; i++) 
{ 
    analogWrite(i, dutyPWM[idx]); 
    int duty = dutyPWM[idx]; 

    idx ++; 
    if (idx >= sizeOfArr) 
    { 
    idx = 0; 
    } 
    Serial.print(i); 
    Serial.print(':'); 
    Serial.print(duty); 
    Serial.println(" "); 
} 

currentIdxStart++; 
if (currentIdxStart >= 10) 
{ 
    currentIdxStart = 0; 
} 
Serial.println(currentIdxStart); 
num_unixtime = get_time(); 
Serial.print(num_unixtime); 
Serial.println('\n'); 
} 

将来誰にも役立つことを願っています。

関連する問題