BASIC4MCU | 질문게시판 | 적외선센서+LED
페이지 정보
작성자 코딩코딩 작성일2018-12-23 21:49 조회11,726회 댓글2건본문
IR센서가 값을 읽어온 후 색을 판별했을 때 검은색이고 LED(rd)가 켜졌으면 signalviolation변수값을 1씩 증가시키고 싶은데 조건문안에서 변수값 증가가 되지 않고, 시리얼 모니터에도 그 값이 뜨지 않습니다. 무엇이 문제인건가요
const char BLACK = 0;
const char WHITE = 1;int r1=D3, r2=D9, rd=D6;
int yd=D7;
int g1=D12, g2=D10, gd=D8;
int IRsensor;
int signalviolation=0;int color;
int bluetoothTx=D4;
int bluetoothRx=D5;SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup() {
pinMode(r1, OUTPUT); pinMode(r2, OUTPUT); pinMode(rd, OUTPUT);
pinMode(yd, OUTPUT);
pinMode(g1, OUTPUT); pinMode(g2, OUTPUT); pinMode(gd, OUTPUT);
digitalWrite(r1, LOW); digitalWrite(r2, LOW); digitalWrite(rd, LOW);
digitalWrite(yd, LOW);
digitalWrite(g1, LOW); digitalWrite(g2, LOW); digitalWrite(gd, LOW);Serial.begin(9600);
bluetooth.begin(9600);
}void loop() {
char cmd;
char read_data;
int ir;
if(bluetooth.available()){
cmd=char(bluetooth.read());
//낮일 때
if(cmd=='1'){
day();
readSensors();
ir=colorFinder(IRsensor);
if((ir==0)&&(digitalRead(rd==HIGH))) {
signalviolation++;
Serial.println(signalviolation);
}
else if(cmd=='2') {
dawn();
}
}
if(Serial.available()) {
read_data=(char)Serial.read();
if(read_data == '3') {
digitalWrite(r1, LOW); digitalWrite(r2, LOW); digitalWrite(rd, HIGH);
digitalWrite(yd, LOW);
digitalWrite(g1, LOW); digitalWrite(g2, HIGH); digitalWrite(gd, LOW);
Serial.println("traffic light on");
}
delay(10);
}
}void day() {
digitalWrite(r1, HIGH);
digitalWrite(r2, HIGH);
digitalWrite(gd, HIGH);
delay(3000);
digitalWrite(gd, LOW);
digitalWrite(yd, HIGH);
delay(3000);
digitalWrite(r1, LOW);
digitalWrite(r2, LOW);
digitalWrite(yd, LOW);
digitalWrite(g1, HIGH);
digitalWrite(g2, HIGH);
digitalWrite(rd, HIGH);
}void dawn() {
digitalWrite(r1, LOW); digitalWrite(r2, LOW); digitalWrite(rd, LOW);
digitalWrite(g1, LOW); digitalWrite(g2, LOW); digitalWrite(gd, LOW);
digitalWrite(yd, LOW);
digitalWrite(yd, HIGH);
}void readSensors() {
const int OFFSET = 1024;
IRsensor = 1024-analogRead(A0);
}char colorFinder(int sensorValue){
char color;
const int threshold = 860; //검정색과 흰색의 경계값 860
if (sensorValue < threshold)
color = WHITE;
else
color = BLACK;
return color;
}
댓글 2
조회수 11,726master님의 댓글
master 작성일컴파일 오류가 없는 소스를 첨부해주세요
master님의 댓글
master 작성일
if( (ir==0) && ( digitalRead(rd==HIGH) ) ) { // digitalRead() 함수에 오류가 있습니다.
if( (ir==0) && ( digitalRead(rd)==HIGH ) ) { // 이렇게 수정하세요
if( (ir==0) && digitalRead(rd) ) { // 이렇게 해도 되고
if( !ir && digitalRead(rd) ) { // 이렇게 해도 되겠죠