Одновременный вывод ШИМ

alix1995alix
Offline
Зарегистрирован: 30.11.2011

Делаю имитатор ЭКГ на arduino Atmega 168, пытаюсь сделать вывод сигнала на несколько шим выходов одновременно, на один выход все работает. А если добавить код для второго выхода, то не работает совсем,  подскажите в чем проблема, может так делать нельзя?

Вот код всего этого:



int Signal1 = 3;
int Signal2 = 5;
int Signal3 = 6;
int Signal4 = 9;
int Signal5 = 10;
int Signal6 = 11;

int val1 = 0;
int val2 = 0;


void setup()  {} 

void loop()  { 
 

//======================== Первый рубец ==============================


for (int x = -27; x <= 28; x++){
val1 = (x*x*(-1)/25+30);
analogWrite(Signal1, val1);  
delay(2);
}


//===================================================================


//=========================== Второй рубец ===============================
for (int x = -7; x <= 7; x++){
val1 = (x*x*(-1)*2+100);
analogWrite(Signal1, val1); 
delay(2);

}

Вот тут не получается:
//for (int x = -16; x <= 16; x++){
//val2 = (x*x*(-1)/25+10);
//analogWrite(Signal2, val2);  
//delay(2);
//}

//========================================================================


//========================== Третий рубец =================================
for (int x = -77; x <= 0; x=x++){
val1 = ((x/10)*(x/10)*(-1))/2+30;
analogWrite(Signal1, val1); 
delay(3);
}


//=========================================================================


//=========================== Четвертый рубец ===============================

for (int x = 0; x <= 38; x++){
val1 = (x*x*(-1)/50+30);
analogWrite(Signal1, val1);  
delay(2);
}




//===========================================================================
 
 
analogWrite(Signal1, 20); 
analogWrite(Signal2, 20); 
 delay(1000);
 

}

 

maksim
Offline
Зарегистрирован: 12.02.2012

Что не работает совсем??? 

#define Signal1 3
#define Signal2 5
#define Signal3 6 
#define Signal4 9 
#define Signal5 10 
#define Signal6 11 

void setup()  
{
  Serial.begin(9600);
} 

void loop()  
{ 
  //======================== Первый рубец ==============================
  Serial.println("rubezh 1:");
  for (int x = -27; x <= 28; x++){
    int val = (x*x*(-1)/25+30);
    analogWrite(Signal1, val);  
    delay(2);
    Serial.println(val);
  }
  Serial.println();
  //===================================================================


  //=========================== Второй рубец ===============================
  Serial.println("rubezh 2:");
  for (int x = -7; x <= 7; x++)
  {
    int val = (x*x*(-1)*2+100);
    analogWrite(Signal1, val); 
    delay(2);
    Serial.println(val);
  }
  Serial.println();
  for (int x = -16; x <= 16; x++)
  {
    int val = (x*x*(-1)/25+10);
    analogWrite(Signal2, val);  
    delay(2);
    Serial.println(val);
  }
  Serial.println();
  //========================================================================


  //========================== Третий рубец =================================
  Serial.println("rubezh 3:");
  for (int x = -77; x <= 0; x=x++)
  {
    int val = ((x/10)*(x/10)*(-1))/2+30;   
    analogWrite(Signal1, val); 
    delay(3);
    Serial.println(val);
  }
  Serial.println();
  //=========================================================================


  //=========================== Четвертый рубец ===============================
  Serial.println("rubezh 4:");
  for (int x = 0; x <= 38; x++)
  {
    int val = (x*x*(-1)/50+30);
    analogWrite(Signal1, val);  
    delay(2);
    Serial.println(val);
  }
  Serial.println();
  //===========================================================================

  analogWrite(Signal1, 20); 
  analogWrite(Signal2, 20); 
  delay(1000);
}
rubezh 1:
1
3
5
7
9
11
13
14
16
18
19
20
21
23
24
25
26
26
27
28
29
29
29
30
30
30
30
30
30
30
30
30
29
29
29
28
27
26
26
25
24
23
21
20
19
18
16
14
13
11
9
7
5
3
1
-1

rubezh 2:
2
28
50
68
82
92
98
100
98
92
82
68
50
28
2

0
1
3
4
5
6
6
7
8
9
9
9
10
10
10
10
10
10
10
10
10
9
9
9
8
7
6
6
5
4
3
1
0

rubezh 3:
6
6
6
6
6
6
6
6
12
12
12
12
12
12
12
12
12
12
18
18
18
18
18
18
18
18
18
18
22
22
22
22
22
22
22
22
22
22
26
26
26
26
26
26
26
26
26
26
28
28
28
28
28
28
28
28
28
28
30
30
30
30
30
30
30
30
30
30
30
30
30
30
30
30
30
30
30
30

rubezh 4:
30
30
30
30
30
30
30
30
29
29
28
28
28
27
27
26
25
25
24
23
22
22
21
20
19
18
17
16
15
14
12
11
10
9
7
6
5
3
2

 

alix1995alix
Offline
Зарегистрирован: 30.11.2011

 

Работает вот так:

этот код:



int Signal1 = 3;
int Signal2 = 5;
int Signal3 = 6;
int Signal4 = 9;
int Signal5 = 10;
int Signal6 = 11;

int val1 = 0;
int val2 = 0;


void setup()  {} 





void loop()  { 
  
  
 
   
  
  
//======================== Первый рубец ==============================


for (int x = -27; x <= 28; x++){
val1 = (x*x*(-1)/25+30);
analogWrite(Signal1, val1);  
delay(2);
}






//===================================================================












//=========================== Второй рубец ===============================
for (int x = -7; x <= 7; x++){
val1 = (x*x*(-1)*2+100);
analogWrite(Signal1, val1); 
delay(2);
}

//========================================================================












//========================== Третий рубец =================================
for (int x = -77; x <= 0; x=x++){
val1 = ((x/10)*(x/10)*(-1))/2+30;
analogWrite(Signal1, val1); 
delay(3);
}


//=========================================================================






//=========================== Четвертый рубец ===============================

for (int x = 0; x <= 38; x++){
val1 = (x*x*(-1)/50+30);
analogWrite(Signal1, val1);  
delay(2);
}




//===========================================================================
 

 
 
 
 
 

 
 
analogWrite(Signal1, 20); 
analogWrite(Signal2, 20); 
 delay(1000);
 

}

Но если в первый рубец добавить:

for (int x = -38; x <= 38; x++){
val1 = (x*x*(-1)/25+60);
analogWrite(Signal3, val1);  
delay(2);
}

То получается полный ужас:

maksim
Offline
Зарегистрирован: 12.02.2012

Тоесть вы хотите сказать, что на 3 выводе дуины у вас сигнал как на картинке берюзовым цветом и как только вы добавляете данный кусок кода не известно куда (нужно указывать хотябы номер строки), то на том же 3 выводе сигнал становится таким как на картике красным цветом?

Если так то покажите код, с которым не работает так как вы хотите, а не код, который работает правильно и если в него что-то дабавить, то он работает не так. 

alix1995alix
Offline
Зарегистрирован: 30.11.2011
//======================== Первый рубец ==============================


for (int x = -27; x <= 28; x++){
val1 = (x*x*(-1)/25+30);
analogWrite(Signal1, val1);  
delay(2);
}


for (int x = -38; x <= 38; x++){ - эти строчки
val1 = (x*x*(-1)/25+60);
analogWrite(Signal3, val1);  
delay(2);
}



//===================================================================

 

Он становится таким после добавления: 

Это до добавления и после (только голубой)

maksim
Offline
Зарегистрирован: 12.02.2012

alix1995alix пишет:

Работает вот так:

Кто работает?

alix1995alix
Offline
Зарегистрирован: 30.11.2011

Там же код ниже есть

Если выводить одновременно, то первый меняется на графике, а по идее не должен этого делать

maksim
Offline
Зарегистрирован: 12.02.2012

Вы понимаете что вы вас невозможно понять? Что за "до", что за "после"?

Попробую я сформулировать ваш вопрос:

Если в дуину залить такой код:

int Signal1 = 3;
int Signal2 = 5;
int Signal3 = 6;
int Signal4 = 9;
int Signal5 = 10;
int Signal6 = 11;

int val1 = 0;
int val2 = 0;

void setup()  {} 

void loop()  { 

  //======================== Первый рубец ==============================
  for (int x = -27; x <= 28; x++){
    val1 = (x*x*(-1)/25+30);
    analogWrite(Signal1, val1);  
    delay(2);
  }
  //===================================================================


  //=========================== Второй рубец ===============================
  for (int x = -7; x <= 7; x++){
    val1 = (x*x*(-1)*2+100);
    analogWrite(Signal1, val1); 
    delay(2);
  }
  //========================================================================


  //========================== Третий рубец =================================
  for (int x = -77; x <= 0; x=x++){
    val1 = ((x/10)*(x/10)*(-1))/2+30;
    analogWrite(Signal1, val1); 
    delay(3);
  }
  //=========================================================================


  //=========================== Четвертый рубец ===============================

  for (int x = 0; x <= 38; x++){
    val1 = (x*x*(-1)/50+30);
    analogWrite(Signal1, val1);  
    delay(2);
  }
  //===========================================================================

  analogWrite(Signal1, 20); 
  analogWrite(Signal2, 20); 
  delay(1000);
}

то осциллограмма на 3 выводе такая:

 

Если же в залить такой код:

int Signal1 = 3;
int Signal2 = 5;
int Signal3 = 6;
int Signal4 = 9;
int Signal5 = 10;
int Signal6 = 11;

int val1 = 0;
int val2 = 0;

void setup()  {
} 

void loop()  { 

  //======================== Первый рубец ==============================
  for (int x = -27; x <= 28; x++){
    val1 = (x*x*(-1)/25+30);
    analogWrite(Signal1, val1);  
    delay(2);
  }

  for (int x = -38; x <= 38; x++){ 
    val1 = (x*x*(-1)/25+60);
    analogWrite(Signal3, val1);  
    delay(2);
  }
  //===================================================================


  //=========================== Второй рубец ===============================
  for (int x = -7; x <= 7; x++){
    val1 = (x*x*(-1)*2+100);
    analogWrite(Signal1, val1); 
    delay(2);
  }
  //========================================================================


  //========================== Третий рубец =================================
  for (int x = -77; x <= 0; x=x++){
    val1 = ((x/10)*(x/10)*(-1))/2+30;
    analogWrite(Signal1, val1); 
    delay(3);
  }
  //=========================================================================


  //=========================== Четвертый рубец ===============================

  for (int x = 0; x <= 38; x++){
    val1 = (x*x*(-1)/50+30);
    analogWrite(Signal1, val1);  
    delay(2);
  }
  //===========================================================================

  analogWrite(Signal1, 20); 
  analogWrite(Signal2, 20); 
  delay(1000);
}

то осциллограмма на том же 3 выводе становится такой:

 

Так? Правильно?