Помогите объединить два скетча

Kamaj
Offline
Зарегистрирован: 28.08.2014

Всем привет. Есть два скетча из примеров по программированию. 


const int PIRSensorPin = 2;     // the number of the Sensor pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int sensorState = 0;         // variable for reading the Sensor status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the Sensor pin as an input:
  pinMode(PIRSensorPin, INPUT);     
}

void loop(){
  // read the state of the Sensor value:
  sensorState = digitalRead(PIRSensorPin);

  // check if the moving people sensed.
  // if it is, the sensorState is HIGH:
  if (sensorState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
  }
}
int ledPin = 9;     // LED connected to digital pin 9
int analogInPin = A0; // Light sensor pin
int sensorValue = 0;// value read from the sensor

void setup()  { 
  // nothing happens in setup 
} 

void loop()  { 
  // read the light sensor value:
  sensorValue = analogRead(analogInPin);
  
  // get the meaningful fading value
  int gapValue = map(sensorValue,10,1024,2,30);
  
  // fade in from min to max in increments of 5 points:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for some milliseconds to see the dimming effect    
    delay(gapValue);                            
  } 

  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for some milliseconds to see the dimming effect    
    delay(gapValue);                            
  } 
}

По отдельности все работает,но хотелось бы объединить их в один. Задумка такова: Автоматическая подсветка пола светодиодной лентой в коридоре при появлении движении. И включение вентилятора в ванной от датчика света,в последующем выключение вентилятора через 10 минут после выключения света,и плавное угасание подсветки через 10 секунд после прекращения движения. Говорю сразу,что опыта по программированию не имею,но есть желание научится,поэтому не судите строго,а лучше ткните где что можно вычитать. Буду очень признателен за любую помощь.

Kamaj
Offline
Зарегистрирован: 28.08.2014
Датчик движения

const int PIRSensorPin = 2;     // the number of the Sensor pin
const int ledPin =  13;      // the number of the LED pin

// variables will change:
int sensorState = 0;         // variable for reading the Sensor status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the Sensor pin as an input:
  pinMode(PIRSensorPin, INPUT);     
}

void loop(){
  // read the state of the Sensor value:
  sensorState = digitalRead(PIRSensorPin);

  // check if the moving people sensed.
  // if it is, the sensorState is HIGH:
  if (sensorState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
  }
}

---------------------------------------------------------------------------------
Датчик освещения

int ledPin = 9;     // LED connected to digital pin 9
int analogInPin = A0; // Light sensor pin
int sensorValue = 0;// value read from the sensor

void setup()  { 
  // nothing happens in setup 
} 

void loop()  { 
  // read the light sensor value:
  sensorValue = analogRead(analogInPin);
  
  // get the meaningful fading value
  int gapValue = map(sensorValue,10,1024,2,30);
  
  // fade in from min to max in increments of 5 points:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for some milliseconds to see the dimming effect    
    delay(gapValue);                            
  } 

  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for some milliseconds to see the dimming effect    
    delay(gapValue);                            
  } 
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

подсветка лестницы здесь обсуждалась. коды выкладывали для ультразвуковых датчиков

поищите на форуме. справа сверху

Kamaj
Offline
Зарегистрирован: 28.08.2014

Читал, но там все закручено уж слишком,думал у меня попроще должно быть... И у меня один фоторезистор и один датчик движения.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

объеденить просто. скопируйте из одного кода в другой сначала все что выше void setup и вставьте также выше. потом все из setup/ потом все из loop/

Kamaj
Offline
Зарегистрирован: 28.08.2014

Пока я дошел до этого,но ничего не работает. 

const int SensorPin = A0;
const int PIRSensorPin = 2;
const int ledPins []={6,9};
int sensorValue = 0;
int sensorState = 0;

void setup() {
  pinMode(PIRSensorPin, INPUT);
  pinMode(SensorPin, INPUT);
  pinMode(ledPins[6], OUTPUT);
  pinMode(ledPins[9], OUTPUT);
}

void loop() {
  sensorState = digitalRead(PIRSensorPin);
  if(sensorState == HIGH){
    digitalWrite(ledPins[9], HIGH);
  }
  sensorValue = analogRead(SensorPin);  
  if(sensorValue < 300); 
  {
    digitalWrite(ledPins[6], HIGH);
    delay(6000); 
  }
  else{
    digitalWrite(ledPins[9], LOW); 
    digitalWrite(ledPins[6], LOW); 
  }
}

 

Совсем забыл,у меня Arduino uno v3(Makerduino uno),заказывал с китая 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

сделайте как я сказал а дальше будем смотреть ошибки

 

Kamaj
Offline
Зарегистрирован: 28.08.2014

Так?



int ledPin = 9;     // LED connected to digital pin 9
int analogInPin = A0; // Light sensor pin
int sensorValue = 0;// value read from the sensor
const int PIRSensorPin = 2;     // the number of the Sensor pin
const int ledPin =  13;      // the number of the LED pin
// variables will change:
int sensorState = 0;         // variable for reading the Sensor status
void setup()  { 
  // nothing happens in setup 

// initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);      
  // initialize the Sensor pin as an input:
  pinMode(PIRSensorPin, INPUT);
}
void loop()  { 
  // read the light sensor value:
  sensorValue = analogRead(analogInPin);
  
  // get the meaningful fading value
  int gapValue = map(sensorValue,10,1024,2,30);
  
  // fade in from min to max in increments of 5 points:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for some milliseconds to see the dimming effect    
    delay(gapValue);                            
  } 

  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for some milliseconds to see the dimming effect    
    delay(gapValue);
    // read the state of the Sensor value:
  sensorState = digitalRead(PIRSensorPin);

  // check if the moving people sensed.
  // if it is, the sensorState is HIGH:
  if (sensorState == HIGH) {     
    // turn LED on:    
    digitalWrite(ledPin, HIGH);  
  } 
  else {
    // turn LED off:
    digitalWrite(ledPin, LOW); 
  }
}

 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

если все собрали да так. теперь запускаете компиляцию и смотрите какие ошибки выдает

если не поняли на что ругается кидайте сюда ошибки

Kamaj
Offline
Зарегистрирован: 28.08.2014

Все заработало с этим кодом))) 

int calibrationTime = 30;        
long unsigned int lowIn;         
long unsigned int pause = 5000;  
boolean lockLow = true;
boolean takeLowTime;  
int pirPin = 7;
int ledPin1 = 8;

int sensorPin = A0;
int ledPin2 = 9;
int sensorValue = 0;

void setup(){
  pinMode(pirPin, INPUT);
  pinMode(ledPin1, OUTPUT);
  digitalWrite(pirPin, LOW);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);  
}

void loop(){

  if(digitalRead(pirPin) == HIGH){
    digitalWrite(ledPin1, HIGH);
    if(lockLow){  
      lockLow = false;            
  }         
    takeLowTime = true;
  }

  if(digitalRead(pirPin) == LOW){       
    digitalWrite(ledPin1, LOW);

    if(takeLowTime){
      lowIn = millis();
      takeLowTime = false;
    }
    if(!lockLow && millis() - lowIn > pause){  
      lockLow = true;    
    }
  }
  
  sensorValue = analogRead(sensorPin);    
  if(sensorValue < 300){
    digitalWrite(ledPin2, HIGH);
  }
  else{
    digitalWrite(ledPin2, LOW);
  }
}

Теперь нужно сделать задержку. Функция delay я так понимаю здесь будет неуместна?

vvadim
Offline
Зарегистрирован: 23.05.2012

На форуме уже много раз обсуждались лестницы и умные дома.

Воспользуйтесь поиском и почитайте как другие уже сделали.

Kamaj
Offline
Зарегистрирован: 28.08.2014

Можно конечно,взять чужой код,подправить под себя и сидеть спокойно,типа сам сделал,НО я хочу научиться делать все сам,поэтому начал с нуля и попросил о помощи знающих людей, так как в литературе все написано сложнее чем товарищи могут объяснить на форуме, за что им и ограоиное человеческое спасибо!)

Joiner
Offline
Зарегистрирован: 04.09.2014

Чтобы не начинать новую тему, спрошу здесь. Я тоже новичек. И у меня похожий вопрос. В качестве изучения написал (по образцам) два скетча. Один - светодиод загорается на 3 секунды, потом 3 короткие вспышк, и все повтаряется бесконечно. Второй - светодиод плавно в течение нескольких секунд плавно разгорается и также плавно гаснет. Процесс тоже непрерывный. А возможно ли одновременное выполнение скетчей? Как это достигается? Что почитать?

Заранее спасибо.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

скетчи-то - покажите !

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
Joiner
Offline
Зарегистрирован: 04.09.2014
int ledPin = 13; // светодиод подключен к выходу 13
// Функция начальных установок setup() вызывается 1 раз в начале скетча
void setup() { // устанавливаем 13 контакт в режим вывода:
pinMode(ledPin, OUTPUT); }
// функция loop() вызывается по кругу
// пока Arduino подключен к питанию
void loop() {
digitalWrite (ledPin, HIGH); // включение светодиода
delay(2000); // задержка 1 сек
digitalWrite (ledPin, LOW); // выключение светодиода
delay(2000); // задержка1 сек
digitalWrite (ledPin, HIGH); // включение светодиода
delay(100); // задержка 1 сек
digitalWrite (ledPin, LOW); // выключение светодиода
delay(100); // задержка1 сек
digitalWrite (ledPin, HIGH); // включение светодиода
delay(100); // задержка 1 сек
digitalWrite (ledPin, LOW); // выключение светодиода
delay(100); // задержка1 сек
digitalWrite (ledPin, HIGH); // включение светодиода
delay(100); // задержка 1 сек
digitalWrite (ledPin, LOW); // выключение светодиода
delay(100); // задержка1 сек
digitalWrite (ledPin, HIGH); // включение светодиода
delay(100); // задержка 1 сек
digitalWrite (ledPin, LOW); // выключение светодиода
delay(1000); // задержка1 сек
}

это первый скетч

 

 

Joiner
Offline
Зарегистрирован: 04.09.2014
/*
 Fading
 
 This example shows how to fade an LED using the analogWrite() function.
 
 The circuit:
 * LED attached from digital pin 9 to ground.
 
 Created 1 Nov 2008
 By David A. Mellis
 modified 30 Aug 2011
 By Tom Igoe
 
 http://arduino.cc/en/Tutorial/Fading
 
 This example code is in the public domain.
 
 */


int ledPin = 9;    // LED connected to digital pin 9

void setup()  { 
  // nothing happens in setup 
} 

void loop()  { 
  // fade in from min to max in increments of 5 points:
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  } 

  // fade out from max to min in increments of 5 points:
  for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { 
    // sets the value (range from 0 to 255):
    analogWrite(ledPin, fadeValue);         
    // wait for 30 milliseconds to see the dimming effect    
    delay(30);                            
  } 
}

это второй

Хотелось бы посмотреть как они будут работать одновременно.

vdk
Offline
Зарегистрирован: 14.04.2013

Joiner пишет:

 А возможно ли одновременное выполнение скетчей? Как это достигается? Что почитать?

Возможно! Самый простой способ - взять две ардуины (ну, или 2 attiny - так будет дешевле)

Если же хочется достигнуть того же эффекта чисто программным методом, то необходимо избавиться от всех delay()

См. так же blink without delay

Joiner
Offline
Зарегистрирован: 04.09.2014

vdk пишет:

Joiner пишет:

 А возможно ли одновременное выполнение скетчей? Как это достигается? Что почитать?

Возможно! Самый простой способ - взять две ардуины (ну, или 2 attiny - так будет дешевле)

Если же хочется достигнуть того же эффекта чисто программным методом, то необходимо избавиться от всех delay()

См. так же blink without delay

Неужели одновременная работа на одной Ардуине невозможна?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

луп - это машинный цикл, который камень крутит пока его питаем +5

ваш программный цикл, который вы задумали - это на 1 сек вклСД и на 1 сек выклСД - т.е. цикл 2 сек.....

вы в аппаратном цикле прописали 10 программных циклов по 2 сек....

вопрос - почему всего 10 циклов ? на 20 сек.... почему не 10000 циклов на ХХХХХ сек - не хочется пересчитывать :)-

 

пропишите один нужный вам программный цикл - остальное камень сделает сам....

уберите из скетча строки с 12 по 27 - и вы разницу в работе того и нового скетча - не увидите !!!!!!!

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Неужели одновременная работа на одной Ардуине невозможна?

не паникуйте !!!! vdk изволит прикалываться :)-    , здесь так принуждают думать :)

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

> blink without delay

он же вам явно показал куда копать для оптимизации скетча_1 - вот и изучайте, а не паникуйте и не обижайтесь

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

никто здесь вам не напишет скетч совмещённый, просто пинками ( и такое будет ) вас загонят в состояние самонаписания совмещённого скетча..... И ЕТО - ПРАВИЛЬНО ! 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

SU-27-16 пишет:

никто здесь вам не напишет скетч совмещённый, просто пинками ( и такое будет ) вас загонят в состояние самонаписания совмещённого скетча..... И ЕТО - ПРАВИЛЬНО ! 


У мну ботинки с металическими носами.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

можно пойти в "Ищу исполнителя" - там вам скетчи смогут объединить, если захотят заморачиваться с ценой услуги - 50 рублей :)-

....Арт100 - может и выставит вам ценник = $100.... но не лучше ли вам что-то изучить и съэкономить денюжку на шоколадку ( вам или ребёнку - не знаю ) ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Пухлявого - не бойсь ! а слушай внимательно.... ещё и другие подтянутся.... 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Puhlyaviy пишет:
SU-27-16 пишет:

никто здесь вам не напишет скетч совмещённый, просто пинками ( и такое будет ) вас загонят в состояние самонаписания совмещённого скетча..... И ЕТО - ПРАВИЛЬНО ! 

У мну ботинки с металическими носами.

ну не 24 часа в сутки ? часа 2-3..... вот в эти часы - лучше и не попадать.....

Joiner
Offline
Зарегистрирован: 04.09.2014

Всем спасибо, хоть ни чего так и не понял. Мне просто хотелось узнать, как сделать примерно так -

имеются 2 светодиода, один разгорается и плавно гаснет в течение, например, семи секунд, а второй светодиод включается на пять секунд, потом, например делает четыре вспышки. И все это продолжается вечно.

По отдельности ни каких проблем. А вот чтобы вместе и с правильными выдержками не понимаю. Думаю, что когда программа займется одним диодом, другой останется без внимания, и все временные выдержки полетят нахрен.

Я правильно понимаю?

vdk
Offline
Зарегистрирован: 14.04.2013

Joiner пишет:

По отдельности ни каких проблем. А вот чтобы вместе и с правильными выдержками не понимаю. Думаю, что когда программа займется одним диодом, другой останется без внимания, и все временные выдержки полетят нахрен.

Я правильно понимаю?

Ну да. Либо все полностью переписывать, либо брать две ардуины (а тупым соединением двух программ ничего хорошего не получится)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
#define ledPinSmooth 6           // плавный - к ШИМ
#define ledPinPulse 7            // мигающий - всё равно куда
boolean ledDirect = 1;           // 1-разгорается , 0-затухает
byte ledPinSmoothBrightness = 0; // текущая яркость
byte tDelta = 14;                // 14 mS * 256 * 2 = 7,168 S
unsigned long previousMillis;
//=============================================================================
void setup()
{
  pinMode( ledPinSmooth , OUTPUT ); 
  pinMode( ledPinPulse , OUTPUT ); 
  analogWrite( ledPinSmooth , ledPinSmoothBrightness );
}
//=============================================================================
void loop()
{
  unsigned long currentMillis = millis();
  if( currentMillis - previousMillis > tDelta)
  {
    previousMillis = currentMillis;   
    if ( ledDirect == 1)
    {
      ledPinSmoothBrightness = ledPinSmoothBrightness + 1;
      analogWrite( ledPinSmooth , ledPinSmoothBrightness );
      if ( ledPinSmoothBrightness == 255 )
      {
        ledDirect = ! ledDirect;
      }
    }
    else
    {
      ledPinSmoothBrightness = ledPinSmoothBrightness - 1;
      analogWrite( ledPinSmooth , ledPinSmoothBrightness );
      if ( ledPinSmoothBrightness == 0 )
      {
        ledDirect = ! ledDirect;
      }
    }
  }


  
  
  
// здесь про второй диод, но не сейчас
  
  
  
  
}
//=============================================================================

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
// гореть 4,3 сек   int tDeltaUp = 4300;
// длительность вспышки/паузы = 342 mS   byte tDeltaPulse = 342;
// удвоенное количество миганий = 16 , т.е. мигаем 8 раз    int nPulse = 16;
// период разгорания+затухиния = 11 mS * 256 * 2 = 5,632 S   byte tDelta = 11;

// эти значения можно менять

#define ledPinSmooth 6           // плавный - к ШИМ
boolean ledDirect = 1;           // 1-разгорается , 0-затухает
byte ledPinSmoothBrightness = 0; // текущая яркость
byte tDelta = 11;
#define ledPinPulse 7            // мигающий - всё равно куда
int tDeltaUp = 4300;
int tDeltaPulse = 342;
boolean ledPulseState = 1;       // 1-гореть , 0-мигать
boolean ledState = 1;            // 1-горит , 0-не горит
int nPulse = 16;
int nFact = 0;

unsigned long previousMillisSmooth;
unsigned long previousMillisPulse;
//=============================================================================
void setup()
{
  pinMode( ledPinSmooth , OUTPUT );
  analogWrite( ledPinSmooth , ledPinSmoothBrightness );
  
  pinMode( ledPinPulse , OUTPUT ); 
  digitalWrite( ledPinPulse , ledState );
}
//=============================================================================
void loop()
{
// первый диод
  unsigned long currentMillis = millis();
  if( currentMillis - previousMillisSmooth > tDelta )
  {
    previousMillisSmooth = currentMillis;   
    if ( ledDirect )
    {
      ledPinSmoothBrightness = ledPinSmoothBrightness + 1;
      analogWrite( ledPinSmooth , ledPinSmoothBrightness );
      if ( ledPinSmoothBrightness == 255 )
      {
        ledDirect = ! ledDirect;
      }
    }
    else
    {
      ledPinSmoothBrightness = ledPinSmoothBrightness - 1;
      analogWrite( ledPinSmooth , ledPinSmoothBrightness );
      if ( ledPinSmoothBrightness == 0 )
      {
        ledDirect = ! ledDirect;
      }
    }
  }

// второй диод
  
  if ( ledPulseState )
  {
    if ( currentMillis - previousMillisPulse > tDeltaUp )
    {
      digitalWrite( ledPinPulse , ! ledState );
      ledPulseState = ! ledPulseState;
      ledState = ! ledState;
      previousMillisPulse = millis();
    }
  }
  else
  {
    if ( currentMillis - previousMillisPulse > tDeltaPulse )
    {
      digitalWrite( ledPinPulse , ! ledState );
      ledState = ! ledState;
      previousMillisPulse = millis();
      nFact = nFact + 1;
      if ( nPulse - nFact < 0  )
      {
        nFact = 0;
        ledState = 1;
        digitalWrite( ledPinPulse , ledState );
        ledPulseState = 1;
      }
    }
  }
}
//=============================================================================

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

> Думаю, что когда программа займется одним диодом, другой останется без внимания, и все временные выдержки полетят нахрен.

такт МК - доли микросекунды, один проход лупа этой программы - 150 микросекунд ( например )....

временные интервалы 4300 , 342 и 11 миллисекунд - 11000 mkS / 150 mkS = 73 лупа МК прокрутит ничего не делая для ваших СД ( только время будет проверять )..... за это пустое время он ещё много чего может успеть....

Joiner
Offline
Зарегистрирован: 04.09.2014

Спасибо. Буду пробовать......Осмысливать. Результат отпишу.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

думайте не как человек - а как МК...

например - первые 72 прохода лупа ( нуууу, как выше вычислял - не охота считать ) - строки с 37 по 57 - НЕ БУДУТ ВЫПОЛНЯТЬСЯ, пока в строке 36 не станет "истина" - а истина там станет через 11 миллисекунд.....

....удачи :)-

"......Думаю, что когда программа займется одним диодом, другой останется без внимания, и все временные выдержки полетят нахрен....." - АННУЛИРОВАНО !!!!!!

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
// гореть 4,3 сек   int tDeltaUp = 4300;
// длительность вспышки/паузы = 342 mS   byte tDeltaPulse = 342;
// удвоенное количество миганий = 16 , т.е. мигаем 8 раз    int nPulse = 16;
// период разгорания+затухиния = 11 mS * 256 * 2 = 5,632 S   byte tDelta = 11;

// эти значения можно менять


#define ledPinSmooth 6           // плавный - к ШИМ
boolean ledDirect = 1;           // 1-разгорается , 0-затухает
byte ledPinSmoothBrightness = 0; // текущая яркость
byte tDelta = 11;
#define ledPinPulse 7            // мигающий - всё равно куда
int tDeltaUp = 4300;
int tDeltaPulse = 342;
boolean ledPulseState = 1;       // 1-гореть , 0-мигать
boolean ledState = 1;            // 1-горит , 0-не горит
int nPulse = 16;
int nFact = 0;

unsigned long previousMillisSmooth;
unsigned long previousMillisPulse;

unsigned long microsStart;
unsigned long microsStop;
//=============================================================================
void setup()
{
  Serial.begin( 9600 );
  
  pinMode( ledPinSmooth , OUTPUT );
  analogWrite( ledPinSmooth , ledPinSmoothBrightness );
  
  pinMode( ledPinPulse , OUTPUT ); 
  digitalWrite( ledPinPulse , ledState );
}
//=============================================================================
void loop()
{
// старт замера
  microsStart = micros();
  
// первый диод
  unsigned long currentMillis = millis();
  if( currentMillis - previousMillisSmooth > tDelta )
  {
    previousMillisSmooth = currentMillis;   
    if ( ledDirect )
    {
      ledPinSmoothBrightness = ledPinSmoothBrightness + 1;
      analogWrite( ledPinSmooth , ledPinSmoothBrightness );
      if ( ledPinSmoothBrightness == 255 )
      {
        ledDirect = ! ledDirect;
      }
    }
    else
    {
      ledPinSmoothBrightness = ledPinSmoothBrightness - 1;
      analogWrite( ledPinSmooth , ledPinSmoothBrightness );
      if ( ledPinSmoothBrightness == 0 )
      {
        ledDirect = ! ledDirect;
      }
    }
  }

// второй диод
  
  if ( ledPulseState )
  {
    if ( currentMillis - previousMillisPulse > tDeltaUp )
    {
      digitalWrite( ledPinPulse , ! ledState );
      ledPulseState = ! ledPulseState;
      ledState = ! ledState;
      previousMillisPulse = millis();
    }
  }
  else
  {
    if ( currentMillis - previousMillisPulse > tDeltaPulse )
    {
      digitalWrite( ledPinPulse , ! ledState );
      ledState = ! ledState;
      previousMillisPulse = millis();
      nFact = nFact + 1;
      if ( nPulse - nFact < 0  )
      {
        nFact = 0;
        ledState = 1;
        digitalWrite( ledPinPulse , ledState );
        ledPulseState = 1;
      }
    }
  }
  
// стоп замера
  microsStop = micros();
  Serial.println( microsStop - microsStart );
}
//=============================================================================

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

.....замерил время прохождения лупа - 8 , 12 , 16 микросекунд - т.е.  в #31 моя ошиблась с среднем в 12,5 раз - НЕ 150 микросекунд !!!!!

Joiner
Offline
Зарегистрирован: 04.09.2014

:(

Я думал Ардуина умнее. Windows же может выполнять несколько задач одновременно. Например музыка играет и картинка фотошопится. Музыка совсем не страдает, хоть ее ни кто не пересчитывает.

Тогда не понимаю как роботы на Андуринках работают (или в них несколько Ардуин?). Там ведь сложнее чем 2 светодиода.

Спасибо за ответы. Пошел читать книжки, писать пробные скетчи.....

Joiner
Offline
Зарегистрирован: 04.09.2014

Хотел вставить ссылку на ролик про робота.....Моих мозгов не хватило :(  Такая сложная процедура! Зачем?

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

Joiner
Offline
Зарегистрирован: 04.09.2014

Joiner пишет:

Хотел вставить ссылку на ролик про робота.....Моих мозгов не хватило :(  Такая сложная процедура! Зачем?

 

Я здесь хотел вставить ссылку на YOUTUBE с интересным роликом про ардуино. Там малыш читает лекцию про робота из набора на ардуино. Но почему-то не смог осилить. Процес вставки ссылки оказался для меня не понятным.

Да и с вопросами, наверное, поторопился. Надо сначала поизучать самому, понять суть, а потом уж и вопросы задавать.

А лекция малыша пошла мне на пользу, кое-что новое узнал, и кое-что понял. :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Я думал Ардуина умнее.

ум - у человеков... Ардуина может всего-то выполнять ваши повелевания, исходя из своих сил.... сравнили, блин      .....а не забыли вы про тактовую частоту ? 16 Mhz и  2 Ghz ? про шину данных - 8 бит и 32 ( 64 ) ? 125 * 4 = 500 - Ардуина минимум в 500 раз слабее компа... читайте... потом - снова читайте.... Вылысыпед - не может быть лучше АВТО !

Joiner
Offline
Зарегистрирован: 04.09.2014

Бродил по интернету, случайно набрел http://robocraft.ru/blog/985.html
Там как по моему вопросу 2 светодиода, многозадачное управление. Попробую изучить и что-то понять.
Ссылку дал, может кому интересно. Там и видео есть как диодики работают типа независимо.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Joiner пишет:

:(

Я думал Ардуина умнее. Windows же может выполнять несколько задач одновременно. Например музыка играет и картинка фотошопится. Музыка совсем не страдает, хоть ее ни кто не пересчитывает.

Эх молодежь.... Идем гуглить википедию на предмет "начиная с какой версии Винды стали по настоящему многозадачными".

Вас разве не удивило что Ардуина маленькая и стоит 10 баксов, а системный блок большой и стоит дорого?

Хотя как вариант - компы собирают близорукие китайцы у которых денег на очки нету.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Там как по моему вопросу 2 светодиода, многозадачное управление.

1 - 2 светика = двузадачное управление ! а не многозадачное !

2 - чем вам не понравился код из #34 ? два светика работают Асинхронно, каждый под вашу задачу.... подсоединяли ? видели как работает ?

> Там и видео есть как диодики работают типа независимо.

3 - и в #34 - ТОЖЕ РАБОТАЮТ НЕЗАВИСИМО ! Асинхронно ! 

 

...определитесь - чё вам нужно ?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Вас разве не удивило что Ардуина маленькая и стоит 10 баксов, а системный блок большой и стоит дорого?

...три недели лежал в реанимации - как узнал про ето :( спасибо дохтурам !

( ето заявление не относится к JollyBiber - он же = Дохтур, к Марии Ивановне, к Ивану Сергеевичу и др. , у кого моя когда-то лечил воспаление шейки малого гипофиза заднего моста ( у миня - 4WD )  )

Joiner
Offline
Зарегистрирован: 04.09.2014

SU-27-16 пишет:

Там как по моему вопросу 2 светодиода, многозадачное управление.

1 - 2 светика = двузадачное управление ! а не многозадачное !

2 - чем вам не понравился код из #34 ? два светика работают Асинхронно, каждый под вашу задачу.... подсоединяли ? видели как работает ?

> Там и видео есть как диодики работают типа независимо.

3 - и в #34 - ТОЖЕ РАБОТАЮТ НЕЗАВИСИМО ! Асинхронно ! 

 

...определитесь - чё вам нужно ?

SU-27-16, я не сказал, что мне не нравится #34. Я просто еще не разбирался. Обязательно закачаю и изучу. Большое спасибо за ответы, советы. Очень рад, что я не прокричал в пустоту и не получил ответы, типа - "а не хотите ли вы ключи от квартиры, где деньги лежат".

Большое спасибо. Подразберусь немного,  обязательно отпишу результат. Обязательно попробую на макетной плате.

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

:)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

 "а не хотите ли вы ключи от квартиры, где деньги лежат".

кому - и кобыла = невеста !!!!!

Joiner
Offline
Зарегистрирован: 04.09.2014

Много читал......... осмысливал.....много понял. Понял, что такое все-таки эта Arduina и на что она примерно способна. По теме топика вопросов больше нет. Двигаюсь дальше, изучаю. Спасибо всем, кто откликнулся.

OploZ
Offline
Зарегистрирован: 24.11.2017

здравствуйте! помогите объединить два кода воедино и по возможности доработать, буду очень благодарен.

это концепт проект стенда для чистки форсунок. задумка такова что есть  насос, есть кнопка, также 4 реле.

надо что бы по нажатию кнопки сначала включался насос потом через 2 секунды реле(в последовательности с 1-4 по 4-1).

при повторном нажатии сначала выключается реле заканчивают цикл. 

пока что ве это должно работать на светодиодах.

 
 1)      #define ledPin1 6    //пин выхода LED1
#define ledPin2[]
[2, 3, 4, 5];
#define buttonPin1 7  //пин кнопки 1
#define buttonPin2 8 //пин кнопки 2
unsigned long previousMillis1 = 0;      //храним время последнего Включения светодиода 1
unsigned long previousMillis2 = 0;      //храним время последнего Включения светодиода 2
unsigned long interval = 60000;         //интервал работы светодиодов (10 секунд)
unsigned long interva2 = 70000;         //интервал работы светодиодов (10 секунд)
 
void setup() 
{
  //задаем режим выхода для порта, подключенного к светодиоду
  pinMode(ledPin1, OUTPUT);     
  pinMode(ledPin2, OUTPUT);
}
void loop()
{
  delay(10);
  //Нажимаем кнопку 1 - включаеться светодиод 1
  if (digitalRead(buttonPin1) == HIGH)
  {
    digitalWrite(ledPin1, HIGH);
    digitalWrite(ledPin2, HIGH);
    previousMillis1 = millis();
    previousMillis2 = millis();  // каждый раз при нажатии кнопки отсчёт отсрочки начинаеться сначала...
  }
  // Прошло время выключаем светодиод 1
  if(millis()-previousMillis1 >= interval) 
  {
    digitalWrite(ledPin1, LOW);
    }
  if(millis()-previousMillis2 >= interva2){  
    digitalWrite(ledPin2, LOW);
  }
  
  //Нажимаем кнопку 2 - включаеться светодиод 2
  if (digitalRead(buttonPin2) == HIGH)
  {
    digitalWrite(ledPin2, HIGH);
    previousMillis2 = millis(); // каждый раз при нажатии кнопки отсчёт отсрочки начинаеться сначала...
  }
  // Прошло время выключаем светодиод 2
  if(millis()-previousMillis2 >= interva2)
  {
    digitalWrite(ledPin2, LOW);
  }
}
2)
int timer = 100; // чем больше значение, тем медленнее отсчет времени.
int ledPins[] = {
 2, 3, 4, 5}; // массив данным с номерами пинов, к которым подключены светодиоды
int pinCount = 4; // количество пинов (то есть, длина массива)
void setup() {
int ledPin = 6;
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
pinMode(ledPins[thisPin], OUTPUT);
}
}
void loop() {
// итерации от пина с наименьшим значением к пину с наибольшим:
for (int thisPin = 0; thisPin < pinCount; thisPin++) {
pinMode(ledPin, HIGH);
delay(200);
((digitalWrite(ledPins[thisPin], HIGH);
delay(timer);
// выключение светодиодов:
digitalWrite(ledPins[thisPin], LOW)));
}
// цикл от пина с наибольшим номером к пину с наименьшим:
for (int thisPin = pinCount - 1; thisPin >= 0; thisPin--) {
// светодиоды зажигаются:
digitalWrite(ledPins[thisPin], HIGH);
delay(timer);
// светодиоды тухнут:
digitalWrite(ledPins[thisPin], LOW);
}
}
 
b707
Offline
Зарегистрирован: 26.05.2017

OploZ -

1 - ГЛАВНОЕ - выложите код как положено (вверху есть тема "Вставка кода в комментарии"

2 - задавайте конкретные вопросы. Улучшать ваш код никому не интересно. Если он не работает или работает, но не так, как надо - напишите, что не так.

3 - лучше создать новую тему