📣ความรู้ไปประยุกต์ใช้อุปกรณ์อิเล็กทรอนิกส์เพื่อสร้างสรรค์เป็นโครงงานตามที่โจทย์กำหนดได้ คำสั่งเขียน
const int door_lock = 2;
const int water_valve_02 = 3;
const int water_valve_01 = 4;
const int drain_valve = 5;
const int CCW = 6;
const int CW = 7;
const int motor_speed = 8;
const int drain_button = 9;
const int refil_button = 10;
const int spin_button = 11;
const int main_button = 12;
const int water_level_switch = 13;
const long debounce = 100;
long time_main = 0;
long time_spin = 0;
long time_refil = 0;
long time_drain = 0;
int state_drain = LOW;
int current_drain;
int previous_drain = HIGH;
int state_main = LOW;
int current_main;
int previous_main = HIGH;
int state_refil = LOW;
int current_refil;
int previous_refil = HIGH;
int state_spin = LOW;
int current_spin;
int previous_spin = HIGH;
int time = 360000;
void setup()
{
pinMode(door_lock, INPUT);
pinMode(water_valve_02, OUTPUT);
pinMode(water_valve_01, OUTPUT);
pinMode(drain_valve, OUTPUT);
pinMode(CCW, OUTPUT);
pinMode(CW, OUTPUT);
pinMode(motor_speed, OUTPUT);
pinMode(drain_button, INPUT);
pinMode(refil_button, INPUT);
pinMode(spin_button, INPUT);
pinMode(main_button, INPUT);
pinMode(water_level_switch, INPUT_PULLUP);
digitalWrite(CCW, LOW);
digitalWrite(CW, LOW);
}
void loop()
{
current_drain = digitalRead(drain_button);
if (current_drain == HIGH && previous_drain == LOW && millis() - time_drain > debounce)
{
if (state_drain == HIGH)
{
state_drain = LOW;
}
else
{
state_drain = HIGH;
}
time_drain = millis();
}
previous_drain = current_drain;
current_main = digitalRead(main_button);
if (current_main == HIGH && previous_main == LOW && millis() - time_main > debounce)
{
if (state_main == HIGH)
{
state_main = LOW;
}
else
{
state_main = HIGH;
}
time_main = millis();
}
previous_main = current_main;
current_refil = digitalRead(refil_button);
if (current_refil == HIGH && previous_refil == LOW && millis() - time_refil > debounce)
{
if (state_refil == HIGH)
{
state_refil = LOW;
}
else
{
state_refil = HIGH;
}
time_refil = millis();
}
previous_refil = current_refil;
current_spin = digitalRead(spin_button);
if (current_spin == HIGH && previous_spin == LOW && millis() - time_spin > debounce)
{
if (state_spin == HIGH)
{
state_spin = LOW;
}
else
{
state_spin = HIGH;
}
time_spin = millis();
}
previous_spin = current_spin;
for(int j=0; j<100; j++){
if(digitalRead(water_level_switch) == HIGH && state_drain == LOW && state_main == HIGH && state_refil == HIGH && state_spin == HIGH){ // get feedback from water level switch
digitalWrite(drain_valve, HIGH);
delay(1000);
}
else{
digitalWrite(drain_valve, LOW);
break;
}
}
state_drain = HIGH;
for(int i=0; i<100; i++){
if(digitalRead(water_level_switch) == LOW && digitalRead(door_lock) == HIGH && state_refil == LOW && state_main == HIGH && state_drain == HIGH && state_spin == HIGH){ // get feedback from water level switch and door lock
digitalWrite(water_valve_02, HIGH);
delay(1000);
}
else{
digitalWrite(water_valve_02, LOW);
break;
}
}
state_refil = HIGH;
if(digitalRead(door_lock) == HIGH && state_spin == LOW && state_drain == HIGH && state_main == HIGH && state_refil == HIGH){
digitalWrite(drain_valve, HIGH);
digitalWrite(motor_speed, HIGH);
digitalWrite(CW, HIGH);
delay(10000);
digitalWrite(CW, LOW);
}
digitalWrite(drain_valve, LOW);
digitalWrite(motor_speed, LOW);
state_spin = HIGH;
if(digitalRead(door_lock) == HIGH && state_spin == HIGH && state_drain == HIGH && state_main == LOW && state_refil == HIGH){
for(int i=0; i<100; i++){
if(digitalRead(water_level_switch) == LOW){
digitalWrite(water_valve_01, HIGH);
delay(1000);
}
else{
digitalWrite(water_valve_01, LOW);
break;
}
}
for(long k = 0; k>1; k= time/40000){
digitalWrite(CCW, HIGH);
delay(10000);
digitalWrite(CCW, LOW);
delay(10000);
digitalWrite(CW, HIGH);
delay(10000);
digitalWrite(CW, LOW);
delay(10000);
}
for(int j=0; j<100; j++){
if(digitalRead(water_level_switch) == HIGH){
digitalWrite(drain_valve, HIGH);
delay(1000);
}
else{
digitalWrite(drain_valve, LOW);
break;
}
}
for(int i=0; i<100; i++){
if(digitalRead(water_level_switch) == LOW){
digitalWrite(water_valve_02, HIGH);
delay(1000);
}
else{
digitalWrite(water_valve_02, LOW);
break;
}
}
for(long k = 0; k>1; k= time/40000){
digitalWrite(CCW, HIGH);
delay(10000);
digitalWrite(CCW, LOW);
delay(10000);
digitalWrite(CW, HIGH);
delay(10000);
digitalWrite(CW, LOW);
delay(10000);
}
digitalWrite(drain_valve, HIGH);
digitalWrite(motor_speed, HIGH);
digitalWrite(CW, HIGH);
delay(10000);
digitalWrite(CW, LOW);
digitalWrite(drain_valve, LOW);
digitalWrite(motor_speed, LOW);
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น
ครูเต้ง เทคโนฯ