Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

akapulko
2024-02-23 22:50:02

Треба внести правку в код, в частину (було):

if (OCR1B == 65) {
    TIMSK2 = 0;
    DDRD &= ~_BV(3);
  }

потрібно зробити:

if (OCR1B == 65) {
    DDRD &= ~_BV(3);
    TIMSK1 = 0x20;
    TIMSK2 = 0x00;
  }

Без правки, приблизно раз на 17 годин, протягом ~1 хв функціонал "побачив перешкоду - подав напругу на пін 5" не буде працювати. Лістинг програми з урахуванням правки приводжу нижче:

/* Connections (UNO): 
 *  HC-SR501 sensor output --------> to pin 8
 *  Voltage output (active_HIGH) --> to pin 5
 *  White_LED cathode -------------> to pin 4
 *  Yellow_LED cathode ------------> to pin 3
*/

void setup() {
  MCUCR |= _BV(PUD); // Disable all pull-ups
  DDRD |= _BV(4) | _BV(5); // White LED | Output signal
  initTIM1();
  initTIM2();
  sei();
}

void loop() {}

void initTIM1(void) { // Time interval
  TCCR1A = 0x00;
  TCCR1B = 0xCD;
  TIMSK1 = 0x22;
  OCR1A = 15625; // 1 sec at 16MHz
  TCNT1 = OCR1B = 0; 
}

void initTIM2(void) { // Flash LED
  TCCR2A = 0x03;
  TCCR2B = 0x04;
  TIMSK2 = 0x00;
}

ISR(TIMER1_COMPA_vect) {
  if (++OCR1B == 5) {
    DDRD &= ~_BV(4);
    DDRD |= _BV(3);
    TIMSK2 = 0x06;
  }
  if (OCR1B == 65) {
    DDRD &= ~_BV(3);
    TIMSK1 = 0x20;
    TIMSK2 = 0x00;
  }
}

ISR(TIMER1_CAPT_vect) {
  (OCR1B > 64) ? (PORTD |= _BV(5)) : (OCR1B = 0);
  TIMSK2 = 0x00;
  PORTD &= ~_BV(3);
}

ISR(TIMER2_COMPA_vect) {
  --OCR2B;
  PORTD |= _BV(3);
}

ISR(TIMER2_COMPB_vect) {
  PORTD &= ~_BV(3);
}
akapulko
2024-02-23 00:34:14

Підключення: "плюси"  обох діодів через резистори 200 Ом до плюсу живлення (5 чи 3.3В); "-" білого до піна 4, "-" жовтого до піна 3; вихід сенсора до піна 8; ну а напругу у разі спрацьовування після 1хв знімайте з піна 5. Тестуйте.

/* Connections (UNO): 
 *  HC-SR501 sensor output --------> to pin 8
 *  Voltage output (active_HIGH) --> to pin 5
 *  White_LED cathode -------------> to pin 4
 *  Yellow_LED cathode ------------> to pin 3
*/

void setup() {
  MCUCR |= (1 << PUD); // Disable all pull-ups
  DDRD |= _BV(4) | _BV(5); // White LED | Output signal
  initTIM1(); //
  initTIM2(); // LED flashes
  sei();
}

void loop() {}

void initTIM1(void) { // Time interval
  TCCR1A = 0x00;
  TCCR1B = 0xCD;
  TIMSK1 = 0x22;
  OCR1A = 15625; // 1 sec at 16MHz
  TCNT1 = OCR1B = 0; 
}

void initTIM2(void) { // Flash LED
  TCCR2A = 0x03;
  TCCR2B = 0x04;
  TIMSK2 = 0;
}

ISR(TIMER1_COMPA_vect) {
  if (++OCR1B == 5) {
    DDRD &= ~_BV(4);
    DDRD |= _BV(3);
    TIMSK2 = 0x06;
  }
  if (OCR1B == 65) {
    TIMSK2 = 0;
    DDRD &= ~_BV(3);
  }
}

ISR(TIMER1_CAPT_vect) {
  (OCR1B > 64) ? (PORTD |= _BV(5)) : (OCR1B = 0);
  TIMSK2 = 0;
  PORTD &= ~_BV(3);
}

ISR(TIMER2_COMPA_vect) {
  --OCR2B;
  PORTD |= _BV(3);
}

ISR(TIMER2_COMPB_vect) {
  PORTD &= ~_BV(3);
}
г0cть
2024-02-22 22:32:59
Savik пише:

Минулорічний скетч не працює

Все там працює в точності з побажанням: 5 сек один світлодіод, потім 10 хвилин інший і через 10 хвилин, при спрацюванні датчика - третій.

Savik
2024-02-22 17:20:04
Васятко пише:
Savik пише:

Потрібен Скетч для Arduino Uno з датчиком руху HC-SR501:
Функціональність:

При включенні Arduino Uno:
Білий світлодіод горить 5 секунд.
Жовтий світлодіод не блимає.
Після 5 секунд:
Жовтий світлодіод починає блимати на 1 хвилину.
Якщо датчик руху HC-SR501 виявляє рух протягом 1 хвилини:
Жовтий світлодіод загоряється постійним світлом на 5 секунд.
Відлік часу блимання жовтого світлодіода скидається.
Якщо протягом 1 хвилини датчик руху не виявляє руху:
Жовтий світлодіод перестає блимати.
Якщо після 1 хвилини датчик руху виявляє рух:
На пін 8 подається напруга.

А ви свої минулорічні теми принципово не читаєте? Вам краще створити десяток нових з одним і тим же питанням?

Минулорічний скетч не працює

Васятко
2024-02-22 09:27:50
Savik пише:

Потрібен Скетч для Arduino Uno з датчиком руху HC-SR501:
Функціональність:

При включенні Arduino Uno:
Білий світлодіод горить 5 секунд.
Жовтий світлодіод не блимає.
Після 5 секунд:
Жовтий світлодіод починає блимати на 1 хвилину.
Якщо датчик руху HC-SR501 виявляє рух протягом 1 хвилини:
Жовтий світлодіод загоряється постійним світлом на 5 секунд.
Відлік часу блимання жовтого світлодіода скидається.
Якщо протягом 1 хвилини датчик руху не виявляє руху:
Жовтий світлодіод перестає блимати.
Якщо після 1 хвилини датчик руху виявляє рух:
На пін 8 подається напруга.

А ви свої минулорічні теми принципово не читаєте? Вам краще створити десяток нових з одним і тим же питанням?

Savik
2024-02-22 04:26:14
akapulko пише:

В документації на датчик HC-SR501 вказано, що він калібрується 1 хвилину починаючи від моменту увімкнення (можливі непередбачувані спрацьовування)  - запропонуйте, що робити впродовж першої хвилини. "Якщо протягом 1 хвилини датчик руху не виявляє руху: Жовтий світлодіод перестає блимати." - і світиться чи погашений? Не зрозуміла циклічність, за яких умов білий світлодіод знову вмикається? Чи циклічність не потрібна? Пін 8 у ролі виходу принципово? Його зручно використати як вхід для датчика HC-SR501.

Жовтий світодіод після 1 хвилин якщо не було руху, більше не працює він потрібен для відліку часу.
Пін 8 не принципово.

akapulko
2024-02-22 01:39:04

В документації на датчик HC-SR501 вказано, що він калібрується 1 хвилину починаючи від моменту увімкнення (можливі непередбачувані спрацьовування)  - запропонуйте, що робити впродовж першої хвилини. "Якщо протягом 1 хвилини датчик руху не виявляє руху: Жовтий світлодіод перестає блимати." - і світиться чи погашений? Не зрозуміла циклічність, за яких умов білий світлодіод знову вмикається? Чи циклічність не потрібна? Пін 8 у ролі виходу принципово? Його зручно використати як вхід для датчика HC-SR501.

akapulko
2024-02-22 00:02:59

Валіза з мільйоном доларів.
Старі купюри по 50 та 20, без п'ятірок.

г0cть
2024-02-21 23:20:17
Savik пише:

Скетч для Arduino Uno з датчиком руху HC-SR501:

І де скетч?

Savik
2024-02-21 22:18:42

Потрібен Скетч для Arduino Uno з датчиком руху HC-SR501:
Функціональність:

При включенні Arduino Uno:
Білий світлодіод горить 5 секунд.
Жовтий світлодіод не блимає.
Після 5 секунд:
Жовтий світлодіод починає блимати на 1 хвилину.
Якщо датчик руху HC-SR501 виявляє рух протягом 1 хвилини:
Жовтий світлодіод загоряється постійним світлом на 5 секунд.
Відлік часу блимання жовтого світлодіода скидається.
Якщо протягом 1 хвилини датчик руху не виявляє руху:
Жовтий світлодіод перестає блимати.
Якщо після 1 хвилини датчик руху виявляє рух:
На пін 8 подається напруга.

Підвал форуму