Как сделать чтобы одна часть кода работала, а вторая нет

next-999
Offline
Зарегистрирован: 30.09.2013

Помогите обьеденить функции, я новичек поэтому не ругайтесь 

Нужно сделать так чтобы в коде:

int val=0; 
int sensePin =2;
int ledPin = 8;
int ledPin1 = 9;
int ledPin2 = 10;
int ledPin3 = 11;

 void setup()  
 { pinMode(8, OUTPUT);
   pinMode(9, OUTPUT);
    pinMode(10, OUTPUT);
     pinMode(11, OUTPUT);
 }
 
 void loop() 
 {digitalWrite(8,HIGH);
delay(3);
digitalWrite(8,LOW);
delay(3);

digitalWrite(9,HIGH);
delay(3);
digitalWrite(9,LOW);
delay(3);

digitalWrite(10,HIGH);
delay(3);
digitalWrite(10,LOW);
delay(3);

digitalWrite(11,HIGH);
delay(3);
digitalWrite(11,LOW);
delay(3);

}

 

Работала вот эта часть 10 секунд:

 

{digitalWrite(8,HIGH);
delay(3);
digitalWrite(8,LOW);
delay(3);

digitalWrite(9,HIGH);
delay(3);
digitalWrite(9,LOW);
delay(3);

digitalWrite(10,HIGH);
delay(3);
digitalWrite(10,LOW);
delay(3);

digitalWrite(11,HIGH);
delay(3);
digitalWrite(11,LOW);
delay(3);

 

 

потом весь код замер, через 10 секунд она снова включилась

inspiritus
Offline
Зарегистрирован: 17.12.2012

 Из 16 строки фигурную скобку переместите в конец 15-й

millis изучите.

Если предыдущее значение миллис меньше текущего на 10000, то 10 секунд прошло. 

Проверку этого поместите в между 15 и 16 строками.выпроняйте весь остальной код если выполняется необходимое условие. Если нет просто опрашивайте миллис.

next-999
Offline
Зарегистрирован: 30.09.2013

inspiritus пишет:

 Из 16 строки фигурную скобку переместите в конец 15-й

millis изучите.

Если предыдущее значение миллис меньше текущего на 10000, то 10 секунд прошло. 

Проверку этого поместите в между 15 и 16 строками.выпроняйте весь остальной код если выполняется необходимое условие. Если нет просто опрашивайте миллис.

 

сделал вот так - не работает(( чето я совсем не понимаю как, если вам не трудно напишите как правильно

 

int val=0; 
int sensePin =2;
int ledPin = 8;
int ledPin1 = 9;
int ledPin2 = 10;
int ledPin3 = 11;
unsigned long time;


 void setup()  
 { pinMode(8, OUTPUT);
   pinMode(9, OUTPUT);
    pinMode(10, OUTPUT);
     pinMode(11, OUTPUT);
 }
 
 void loop() 
 {{ Serial.print("Time: ");
  time = millis();
  
  Serial.println(time);

  delay(1);
  
  digitalWrite(8,HIGH);
delay(3);
digitalWrite(8,LOW);
delay(3);

digitalWrite(9,HIGH);
delay(3);
digitalWrite(9,LOW);
delay(3);

digitalWrite(10,HIGH);
delay(3);
digitalWrite(10,LOW);
delay(3);

digitalWrite(11,HIGH);
delay(3);
digitalWrite(11,LOW);

}  
 }

 

next-999
Offline
Зарегистрирован: 30.09.2013

inspiritus пишет:

 Из 16 строки фигурную скобку переместите в конец 15-й

millis изучите.

Если предыдущее значение миллис меньше текущего на 10000, то 10 секунд прошло. 

Проверку этого поместите в между 15 и 16 строками.выпроняйте весь остальной код если выполняется необходимое условие. Если нет просто опрашивайте миллис.

 

Или например, скажите, есть такая функция которая делает например так : повторить 100 раз, а потом выполнить следующее действие.

bwn
Offline
Зарегистрирован: 25.08.2014

Или например, скажите, есть такая функция которая делает например так : повторить 100 раз, а потом выполнить следующее действие.

Функцию зовут: переменная-счетчик+оператор if , для более узкого применения оператор for .

inspiritus
Offline
Зарегистрирован: 17.12.2012

Вы вызвали количество миллисекунд с момента ресета и посмотрели на него. Однако не сформировали никаких условий и не предприняли никаких проверок этих условий, чтобы предпринять на их основании действия.

не пытайтесть сразу писать программу . Составте алгоритм из строк - описанийдействий - словестных для начала и проверьте логику и понимание что же именно Вы будете потом кодить.

кстати на ледах Вы не успеете ничего глазом увидеть. А видеть наверно хотели волну вспышек...

X-Dron
Offline
Зарегистрирован: 24.01.2015
#define ledPin 8
#define ledPin1 9
#define ledPin2 10
#define ledPin3 11

int val=0;
int sensePin =2;

void setup()
 { pinMode(ledPin, OUTPUT);
   pinMode(ledPin1, OUTPUT);
   pinMode(ledPin2, OUTPUT);
   pinMode(ledPin3, OUTPUT);
 }
 
 void loop(){
   if ( millis()%20000 < 10000){ //20000 - период, 10000- время работы
    digitalWrite(ledPin,HIGH);
    delay(3);
    digitalWrite(ledPin,LOW);
    delay(3);
 
    digitalWrite(ledPin1,HIGH);
    delay(3);
    digitalWrite(ledPin1,LOW);
    delay(3);
 
    digitalWrite(ledPin2,HIGH);
    delay(3);
    digitalWrite(ledPin2,LOW);
    delay(3);
 
    digitalWrite(ledPin3,HIGH);
    delay(3);
    digitalWrite(ledPin3,LOW);
    delay(3);
  }
}
next-999
Offline
Зарегистрирован: 30.09.2013

X-Dron пишет:

#define ledPin 8
#define ledPin1 9
#define ledPin2 10
#define ledPin3 11

int val=0;
int sensePin =2;

void setup()
 { pinMode(ledPin, OUTPUT);
   pinMode(ledPin1, OUTPUT);
   pinMode(ledPin2, OUTPUT);
   pinMode(ledPin3, OUTPUT);
 }
 
 void loop(){
   if ( millis()%20000 < 10000){ //20000 - период, 10000- время работы
    digitalWrite(ledPin,HIGH);
    delay(3);
    digitalWrite(ledPin,LOW);
    delay(3);
 
    digitalWrite(ledPin1,HIGH);
    delay(3);
    digitalWrite(ledPin1,LOW);
    delay(3);
 
    digitalWrite(ledPin2,HIGH);
    delay(3);
    digitalWrite(ledPin2,LOW);
    delay(3);
 
    digitalWrite(ledPin3,HIGH);
    delay(3);
    digitalWrite(ledPin3,LOW);
    delay(3);
  }
}

 

 

Спасибо за код, работает все - но работает все вместе, я добавил вот такую штуку 

#define ledPin 8
#define ledPin1 9
#define ledPin2 10
#define ledPin3 11
#define ledPin4 3

int val=0;
int sensePin =2;

void setup()
 { pinMode(ledPin, OUTPUT);
   pinMode(ledPin1, OUTPUT);
   pinMode(ledPin2, OUTPUT);
   pinMode(ledPin3, OUTPUT);
 }
 
 void loop(){
   if ( millis()%20000 < 10000){ //20000 - период, 10000- время работы
    digitalWrite(ledPin,HIGH);
    delay(3);
    digitalWrite(ledPin,LOW);
    delay(3);
 
    digitalWrite(ledPin1,HIGH);
    delay(3);
    digitalWrite(ledPin1,LOW);
    delay(3);
 
    digitalWrite(ledPin2,HIGH);
    delay(3);
    digitalWrite(ledPin2,LOW);
    delay(3);
 
    digitalWrite(ledPin3,HIGH);
    delay(3);
    digitalWrite(ledPin3,LOW);
    delay(3);
  }
   digitalWrite(ledPin4,HIGH);
  delay(10);
   digitalWrite(ledPin4,LOW);
    delay(10);
}

 

и у меня работает весь код целиком, а мне нужно чтобы работала сначало  это часть кода 10 секунд


    if ( millis()%20000 < 10000){ //20000 - период, 10000- время работы
    digitalWrite(ledPin,HIGH);
    delay(3);
    digitalWrite(ledPin,LOW);
    delay(3);
 
    digitalWrite(ledPin1,HIGH);
    delay(3);
    digitalWrite(ledPin1,LOW);
    delay(3);
 
    digitalWrite(ledPin2,HIGH);
    delay(3);
    digitalWrite(ledPin2,LOW);
    delay(3);
 
    digitalWrite(ledPin3,HIGH);
    delay(3);
    digitalWrite(ledPin3,LOW);
    delay(3);

 

потом вот эта

  digitalWrite(ledPin4,HIGH);
  delay(10);
   digitalWrite(ledPin4,LOW);
    delay(10);

 

потом пауза например 30 сек

X-Dron
Offline
Зарегистрирован: 24.01.2015

А если немного подумать??

#define ledPin 8
#define ledPin1 9
#define ledPin2 10
#define ledPin3 11
#define ledPin4 3
 
int val=0;
int sensePin =2;
long Period =45000; //период 45с  
 
void setup()
 { pinMode(ledPin, OUTPUT);
   pinMode(ledPin1, OUTPUT);
   pinMode(ledPin2, OUTPUT);
   pinMode(ledPin3, OUTPUT);
 }
  
 void loop(){
   long CurrntMsInPeriod = millis()%Period;
   if ( CurrntMsInPeriod < 10000){ //10c- время работы с начала цикла.
    digitalWrite(ledPin,HIGH);
    delay(3);
    digitalWrite(ledPin,LOW);
    delay(3);
  
    digitalWrite(ledPin1,HIGH);
    delay(3);
    digitalWrite(ledPin1,LOW);
    delay(3);
  
    digitalWrite(ledPin2,HIGH);
    delay(3);
    digitalWrite(ledPin2,LOW);
    delay(3);
  
    digitalWrite(ledPin3,HIGH);
    delay(3);
    digitalWrite(ledPin3,LOW);
    delay(3);
  }
  if ( CurrntMsInPeriod >= 10000 && CurrntMsInPeriod < 15000){ //5c- время работы с 10 по 15-ю секунду.
   digitalWrite(ledPin4,HIGH);
   delay(10);
   digitalWrite(ledPin4,LOW);
   delay(10);
  }
}