[email protected] webmail now available. Want one? Go here.
Windows getting boring or just want to try something Open Source for your next Desktop Environment?! Go Zorin OS.
Paste
Pasted as ARM assembler by registered user vhson ( 2 years ago )
// COVID-19: AUTOMATIC ALCOHOL DISPENSER
// MÁY RỬA TAY TỰ ĐỘNG - CHUNG TAY ĐẨY LÙI COVID
// Code by: Chợ Sáng Tạo Team
// Chức năng: Đóng trễ, ngắt trễ relay khi nhận tín hiệu điều khiển.
// Đặc điểm:
// - Cài đặt trước thờ gian đóng/ngắt trễ relay
// - Cho phép sử dụng biến trở để điều chỉnh thời gian đóng trễ và/hoặc ngắt trễ
// - Có tùy chọn để sử dụng được cho cả cảm biến trả về mức cao và mức thấp
// - Có tùy chọn để sử dụng cho cả relay kích mức HIGH hoặc mức LOW
//#define USE_POT_DELAY_ON //Bỏ dấu // nếu dùng biến trở để chỉnh thời gian đóng trễ
//#define USE_POT_DELAY_OFF //Bỏ dấu // nếu dùng biến trở để chỉnh thời gian ngắt trễ
#define DELAY_ON 800 // Thời gian đóng relay trễ
#define DELAY_OFF 1000 // Thời gian ngắt relay trễ - 1000 = 1 giây
#define DELAY_ON_RANGE 10000 //Dải thời gian chậm đóng relay (từ 0 đến 10 giây)
#define DELAY_OFF_RANGE 60000 //Dải thời gian chậm ngắt relay (từ 0 đến 60 giây)
#define SENSOR_PIN 2 //chân cảm biến
#define RELAY_PIN 13 //Chân điều khiển relay
#ifdef USE_POT_DELAY_ON
#define DELAY_ON_POT_PIN A0 //Chân cho biến trở điều chỉnh thời gian đóng trễ
#endif
#ifdef USE_POT_DELAY_OFF
#define DELAY_OFF_POT_PIN A1 //Chân cho biến trở điều chỉnh thời gian ngắt trễ
#endif
#define SENSOR_LOW_SIGNAL //Dùng cảm biến xuất tín hiệu mức thấp
//#define SENSOR_HIGH_SIGNAL //Dùng cho cảm biến xuất tín hiệu mức cao
//#define RELAY_LOW_TRIGGER //Dùng cho relay kích mức thấp (LOW)
#define RELAY_HIGH_TRIGGER //Dùng cho relay kích mức cao (HIGH)
uint32_t pre_millis, pre_millis_2;
uint32_t delay_on = DELAY_ON;
uint32_t delay_off = DELAY_OFF;
bool relay_on;
void setup() {
// put your setup code here, to run once:
pinMode(SENSOR_PIN, INPUT_PULLUP);
pinMode(RELAY_PIN, OUTPUT);
Serial.begin(9600);
//init relay status
#ifdef RELAY_LOW_TRIGGER
digitalWrite(RELAY_PIN, HIGH);
#elif defined(RELAY_HIGH_TRIGGER)
digitalWrite(RELAY_PIN, LOW);
#endif
}
void loop() {
//read sensor value
int sensor_value;
#ifdef SENSOR_LOW_SIGNAL
sensor_value = !digitalRead(SENSOR_PIN);
#elif defined(SENSOR_HIGH_SIGNAL)
sensor_value = digitalRead(SENSOR_PIN);
#endif
#ifdef USE_POT_DELAY_ON
//read potentialmeter to define delay on time
delay_on = map(analogRead(DELAY_ON_POT_PIN),0,1023,0,DELAY_ON_RANGE);
#endif
#ifdef USE_POT_DELAY_OFF
//read potentialmeter to define delay on time
delay_off = map(analogRead(DELAY_OFF_POT_PIN),0,1023,0,DELAY_OFF_RANGE);
#endif
// received sensor signal
if (relay_on){
if (millis()-pre_millis_2 >= delay_off) {
#ifdef RELAY_LOW_TRIGGER
relay_on = false;
digitalWrite(RELAY_PIN,HIGH);
pre_millis = millis();
#elif defined(RELAY_HIGH_TRIGGER)
relay_on = false;
digitalWrite(RELAY_PIN,LOW);
pre_millis = millis();
#endif
}
} else {
if (sensor_value) {
if (millis() - pre_millis >= delay_on) {
#ifdef RELAY_LOW_TRIGGER
digitalWrite(RELAY_PIN, LOW);
relay_on = true;
pre_millis_2 = millis();
#elif defined(RELAY_HIGH_TRIGGER)
digitalWrite(RELAY_PIN, HIGH);
relay_on = true;
pre_millis_2 = millis();
#endif
}
} else {
pre_millis = millis();
}
}
}
Revise this Paste
Parent: 104151
Children: 104153