Одновременный вывод ШИМ
- Войдите на сайт для отправки комментариев
Пнд, 25/03/2013 - 02:00
Делаю имитатор ЭКГ на 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);
}
Что не работает совсем???
#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); }Работает вот так:
этот код:
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); }То получается полный ужас:
Тоесть вы хотите сказать, что на 3 выводе дуины у вас сигнал как на картинке берюзовым цветом и как только вы добавляете данный кусок кода не известно куда (нужно указывать хотябы номер строки), то на том же 3 выводе сигнал становится таким как на картике красным цветом?
Если так то покажите код, с которым не работает так как вы хотите, а не код, который работает правильно и если в него что-то дабавить, то он работает не так.
//======================== Первый рубец ============================== 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); } //===================================================================Он становится таким после добавления:
Это до добавления и после (только голубой)
Работает вот так:
Там же код ниже есть
Если выводить одновременно, то первый меняется на графике, а по идее не должен этого делать
Вы понимаете что вы вас невозможно понять? Что за "до", что за "после"?
Попробую я сформулировать ваш вопрос:
Если в дуину залить такой код:
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 выводе становится такой:

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