标签:blog serial 状态 oid direction dht break .com 传感器
一. 设备及要求
目的:制作一个可以自动根据事实的天气的状况进行对衣架上的衣服进行晾晒。
基础装置:可伸缩的晾衣架。
开发环境:Arduino1. 8.1
主控板:Arduino UNO
动力装置:二相四线步进电机、电机控制板
供电设备:5V/500mA电源、12V/2A电机供电电源
传感器:雨滴传感器、接触传感器
其它:双面胶若干(固定传接触感器)
二. 布线:
三.代码:
1 // I/O引脚定义 2 #define PUL 2 //电机时钟 3 #define L_ENA 3 //A电机使能 4 #define L_DIR 4 //A电机转向 5 #define L_key 5 //A电机复位按键(0) 6 #define R_ENA 6 //B电机使能 7 #define R_DIR 7 //B电机转向 8 #define R_key 8 //B电机复位按键(1) 9 #define Rain A0 //雨水 10 11 //宏定义 12 bool Clock_status = 0; 13 14 void set_init_pinMode(){ 15 pinMode(PUL,OUTPUT); //时钟 16 pinMode(L_ENA,OUTPUT); //L 17 pinMode(L_DIR,OUTPUT); 18 pinMode(L_key,INPUT); 19 pinMode(R_ENA,OUTPUT); //R 20 pinMode(R_DIR,OUTPUT); 21 pinMode(R_key,INPUT); 22 pinMode(Rain,INPUT); //雨水 23 } 24 /*************************************/ 25 //时钟函数 26 void Clock_function(void){ 27 delayMicroseconds(10000); //时钟 28 digitalWrite(PUL,Clock_status); 29 Clock_status = !Clock_status; 30 } 31 /***********************************/ 32 //电机使能关闭 33 void Close_motor(void){ 34 digitalWrite(L_ENA,1); 35 digitalWrite(R_ENA,1); 36 } 37 //电机使能开启 38 void start_motor(void){ 39 digitalWrite(L_ENA,0); 40 digitalWrite(R_ENA,0); 41 } 42 /**********************************/ 43 //拉回方向 44 void Pull_direction(){ 45 digitalWrite(L_DIR,0); 46 digitalWrite(R_DIR,0); 47 } 48 //推出方向 49 void Push_direction(){ 50 digitalWrite(L_DIR,1); 51 digitalWrite(R_DIR,1); 52 } 53 /********************************/ 54 //拉回电机 55 void Pull_motor(){ 56 start_motor(); //开启电机 57 Pull_direction(); //拉回电机凤方向设置 58 } 59 //推出电机 60 void Push_motor(){ 61 start_motor(); //开启电机 62 Push_direction(); //拉回电机凤方向设置 63 } 64 //无检验停止 65 void No_test_stop_motor(){ 66 Close_motor(); //关闭使能 67 } 68 //检验停止 69 void test_stop_motor(int key1,int key2){ 70 if(key1)digitalWrite(L_ENA,1); 71 else digitalWrite(L_ENA,0); 72 if(key2)digitalWrite(R_ENA,1); 73 else digitalWrite(L_ENA,0); 74 } 75 /********************************/ 76 void printf_all(int mode,unsigned int step1){ 77 Serial.print("mode ="); 78 Serial.print(mode); 79 Serial.print(" "); 80 Serial.print("PUL ="); 81 Serial.print(digitalRead(PUL)); 82 Serial.print(" "); 83 Serial.print("L_DIR ="); 84 Serial.print(digitalRead(L_DIR)); 85 Serial.print(" "); 86 Serial.print("L_ENA ="); 87 Serial.print(digitalRead(L_ENA)); 88 Serial.print(" "); 89 Serial.print("L_key ="); 90 Serial.print(digitalRead(L_key)); 91 Serial.print(" "); 92 Serial.print("R_DIR ="); 93 Serial.print(digitalRead(R_DIR)); 94 Serial.print(" "); 95 Serial.print("R_ENA ="); 96 Serial.print(digitalRead(R_ENA)); 97 Serial.print(" "); 98 Serial.print("R_key ="); 99 Serial.print(digitalRead(R_key)); 100 Serial.print(" "); 101 Serial.print("Rain ="); 102 Serial.print(analogRead(Rain)); 103 Serial.print(" "); 104 Serial.print("step1 ="); 105 Serial.println(step1); 106 } 107 //初始化 108 void setup(){ 109 set_init_pinMode(); 110 Serial.begin(19200); 111 Serial.println("DHTxx test!"); 112 } 113 void loop(){ 114 int mode = 0; //模式 115 int a,b; 116 unsigned int step1 = 0; 117 while(1){ 118 switch(mode){ 119 case 0:{ //拉回电机 120 Pull_motor(); 121 mode = 1; 122 }break; 123 case 1:{ //检测状态 124 a = digitalRead(L_key); 125 b = digitalRead(R_key); 126 digitalWrite(L_ENA,a); 127 digitalWrite(R_ENA,b-1); 128 step1--; 129 if((1==a)&&(0==b)&&(analogRead(Rain) > 850)){ 130 mode = 2; 131 step1 = 0; 132 Push_motor(); 133 } 134 }break; 135 case 2:{ //雨板检测 136 if(analogRead(Rain) < 850)mode = 0; 137 else if(7000 < step1++){ 138 Close_motor(); 139 step1 = 65000; 140 } 141 }break; 142 } 143 //printf_all(mode,step1); 144 Clock_function(); 145 } 146 }
四. 缺陷与不足:
进阶之路(中级篇) - 018 基于arduino的简易版智能衣架
标签:blog serial 状态 oid direction dht break .com 传感器
原文地址:http://www.cnblogs.com/jikexianfeng/p/6825772.html