개발자/Arduino

센서 보드의 모든 센서와 액츄에이터 구동을 위한 Test 프로그램 소스

지구빵집 2018. 3. 25. 22:44
반응형




보드의 모든 센서들과 액츄에이터를 테스트 하는 코드들.

전체는 부분, 부분은 전체!


아두이노 메가에서 씨리얼 모니터와 캐릭터 LCD로 현재 진행 상태를 모두 뿌려준다. 조이스틱의 스위치 기능을 이용하여 조이스틱을 누를 때마다 카운터가 증가하면서 차례 차례 센서와 액츄에이터를 Test 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include <LiquidCrystal.h>
#include <DHT11.h>
 
 
 
LiquidCrystal lcd(484644424038);
 
#define DHTPIN 2     // what pin we're connected to
 
// Uncomment whatever type you're using!
DHT11 dht11(DHTPIN);
int joykey = 8;
int pushdetect = 0;
int sumofkey_value = 0;
int nearpin = 12;
 
int blueled = 7;
int soundpin = 11;
 
int echoPin = 9;
int trigPin = 10;
 
int redPin = 5;
int greenPin = 6;
int bluePin = 7;
 
void setup() {
  Serial.begin(9600);
  lcd.begin(162);              // start the library
  pinMode(joykey, INPUT);
  pinMode(nearpin, INPUT);
  pinMode(13, INPUT);
 
  pinMode(soundpin, INPUT);
  pinMode(blueled, OUTPUT);
  digitalWrite(blueled, HIGH);
 
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
 
  pinMode(redPin, OUTPUT);
 pinMode(greenPin, OUTPUT);
 pinMode(bluePin, OUTPUT); 
 
}
 
void loop() {
 
  if(digitalRead(joykey) == 0)
  {
    sumofkey_value++;
  }
  
  Serial.print(sumofkey_value);
  delay(500);
  
  if(sumofkey_value == 1)
  {
    display_temphumi();
  }
  if(sumofkey_value == 2)
  {
    lightdigital();
  }
  
  if(sumofkey_value == 3)
  {
    near_detect();
  }
 
  if(sumofkey_value == 4)
  {
    while(!(digitalRead(joykey) == 0))
     sound_blueled();
  }
 
  if(sumofkey_value == 5)
  {
    //compass_out();
  }
 
  if(sumofkey_value == 6)
  {
    while(!(digitalRead(joykey) == 0))
      ultrasonic();
  }
  
 
 
  if(sumofkey_value == 7)
  {
    joystick();
  }
 
  if(sumofkey_value == 8)
  {
    rgbled();
  }
  if(sumofkey_value == 9)
  {
    sumofkey_value = 0;
  }
  
}
 
void display_temphumi()
{
  int err;
  float temp, humi;
  if((err=dht11.read(humi, temp))==0//온도, 습도 읽어와서 표시
  {
    Serial.print("temperature:");
    Serial.print(temp);
    Serial.print(" humidity:");
    Serial.print(humi);
    Serial.println();
  }
  else                                //에러일 경우 처리
  {
    Serial.println();
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();    
  }
  delay(1000);
              //1초마다 측정
 
  lcd.setCursor(00);
  lcd.print("Humidity: ");
  lcd.print(humi);
  lcd.print("%");
 
  lcd.setCursor(01);
  lcd.print("Temp: ");
  lcd.print(temp);
  lcd.print("C ");
}
 
void joystick()
{
  int push = digitalRead(joykey);     // 변수 push에 디지털 3번핀에 입력되는 신호를 대입
  int X = analogRead(0);         // 변수 X에 아날로그 0번핀에 입력되는 신호를 대입
  int Y = analogRead(1);         // 변수 Y에 아날로그 1번핀에 입력되는 신호를 대입
  Serial.print("Button: ");     // 시리얼 모니터에 출력 - Button:
  
  Serial.print(push);           // 시리얼 모니터에 출력 - (push 버튼 신호)
  Serial.print("   ");          // 시리얼 모니터에 출력 - 띄어쓰기 3칸
  Serial.print("X: ");          // 시리얼 모니터에 출력 - X:
  Serial.print(X);              // 시리얼 모니터에 출력 - (X 좌표 신호)
  Serial.print("   ");          // 시리얼 모니터에 출력 - 띄어쓰기 3칸
  Serial.print("Y: ");          // 시리얼 모니터에 출력 - Y:
  Serial.println(Y);            // 시리얼 모니터에 출력 - (Y 좌표 신호)
  delay(300);                   // 0.3초 대기
}
 
void lightdigital()
{
  if (digitalRead(13== HIGH) 
    Serial.println("■■■■■ ");  // 빛이차단되면 출력됩니다
  else
    Serial.println("□□□□□");
  
  delay(500);
}
 
void near_detect()
{
  if (digitalRead(nearpin) == LOW) 
    Serial.println("■■");  // 충돌하면 출력됩니다
  else
    Serial.println("□□");
  
  delay(500);
}
 
void sound_blueled()
{
  if (digitalRead(soundpin) == HIGH) 
    digitalWrite(blueled, LOW); //Turn ON Led; 
  else
    digitalWrite(blueled, HIGH);
  
  delay(100);
}
 
void ultrasonic()
{
    float duration, distance;
  
  // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
  digitalWrite(trigPin, HIGH);
  delay(10);
  digitalWrite(trigPin, LOW);
  
  // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  duration = pulseIn(echoPin, HIGH); 
  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
  distance = ((float)(340 * duration) / 10000/ 2;  
  
  Serial.print(distance);
  Serial.println("cm");
  // 수정한 값을 출력
  delay(100);
}
 
void rgbled()
{
  setColor(25500); // red
  delay(1000);
  setColor(02550); // green
  delay(1000);
  setColor(00255); // blue
  delay(1000);
  setColor(2552550); // yellow
  delay(1000); 
  setColor(80080); // purple
  delay(1000);
  setColor(0255255); // aqua
  delay(1000);
  setColor(255134238); // aqua
  delay(1000);
}
 
void setColor(int red, int green, int blue)
{
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue); 
}
 
cs


어느 소프트웨어 학원 포스터인가. 대단함 ㅎㅎ






반응형