국내 최초 국가기술자격증 전문 사이트! - 올배움kisa


저작권지킴이

저작권지킴이 캠페인안내

고객센터

고객센터

메뉴 바로가기

쇼셜 바로가기

  • 유튜브-국가기술자격증TV
  • 올배움kisa 페이스북
  • 올배움kisa 인스타그램
  • kisa 블로그
  • 올배움kisa - 카카오톡 채널
  • 인터넷 원서접수 - 큐넷
  • 네이버카페-자격증 닷컴
  1. >
  2. 커뮤니티
  3. >
  4. 베스트 질문 답변

베스트 질문 답변

 
작성일 : 21-10-13 22:03
 
[전자산업기사(박성호)] 브레드보드 질문입니다.
1. 부품 중에 주파수 조절/발생기 연결 방법 부탁드립니다.

 1) Vin +

 2) Vin - 

 3) PWM

 4) GND

 이렇게 각각 연결해야 하는 것 같은데, GND는 연결 가능한데 Vin +,- 와 PWM을 어디에 연결해야할지 모르겠습니다.

 

2. 기판을 작동시키고, 다른모드에서 다른화면으로 넘어갈때, 이전 화면에 있던 글씨들이 겹치지 않는 부분은 그대로 다음화면으로 넘어가는데.. 코드값 중에 어디가 잘못된건가요??(사진 첨부하겠습니다.)

 

3. 온도센서가 아무런 조작을 안했는데도 너무 범위가 넓게 왔다갔다하는데 9도~ 20도 혹시 코드값 문제 있는지 확인 좀 해주실 수 있으실까요?

 

코드값 참고 부탁드립니다.

 

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27,16,2);


const int sw1 = 10;

const int sw2 = 9;

const int sw3 = 8;

int s_state1 = 0;

int s_state2 = 0;

int s_state3 = 0;

int sw_flag_1 = 0;

int sw_flag_2 = 0;

int sw_flag_3 = 0;

int old_state1 = 1;

int old_state2 = 1;

int old_state3 = 1;

int sw1_pulse_flag = 0;

int sw1_sensor_flag = 0;

int sw2_pulse_flag = 0;

int sw2_sensor_flag = 0;

int sw3_select_flag = 0;

int start_flag = 1;

long reset_timer = 0;

int pulse_pin = 2;

float pulsewidth;

float peri;

int freq;

int timer_flag = 0;


int temp_pin = A1;

float temp_value = 0;

float temp = 0;


int cds_value = 0;

float cds_voltage = 0;

int POTEN = A0;


int trig_pin = 3;

int echo_pin = 4;

float duration = 0;

int distance = 0;

int i = 0;

int j = 0;


byte b00[8] {00,00,00,00,00,00,00,00};

byte b16[8] {16,16,16,16,16,16,16,16};

byte b24[8] {24,24,24,24,24,24,24,24};

byte b28[8] {28,28,28,28,28,28,28,28};

byte b30[8] {30,30,30,30,30,30,30,30};

byte b31[8] {31,31,31,31,31,31,31,31};


void setup()

{

 pulse_mode_setup();

 sw_mode_setup();

 ultra_mode_setup();


 lcd.createChar(0,b00);

 lcd.createChar(1,b16);

 lcd.createChar(2,b24);

 lcd.createChar(3,b28);

 lcd.createChar(4,b30);

 lcd.createChar(5,b31);


 lcd.init();

 lcd.backlight();

}


void loop()

{

 if(start_flag == 1)

 {

  reset_mode();

  start_mode();

  }

 else

 {

  sw_mode_1();

  sw_mode_2();

  sw_mode_3();

  act_1_mode();

  pulse_mode();

  sensor_mode();

  }

}


void start_mode()

{

 for(int i=0; i<5; i++)

 {

  lcd.setCursor(0,0);

  lcd.print("Digital Pulse");

  lcd.setCursor(0,1);

  lcd.print("Number:     A001");

  delay(500);

  lcd.clear();

  delay(500);

  }

 lcd.setCursor(1,0);

 lcd.print("Mode Button");

 lcd.setCursor(1,1);

 lcd.print("Push Mode SW1!");

}


void act_1_mode()

{

 if(sw1_pulse_flag == 1 && sw2_pulse_flag == 0)

 {

  lcd.setCursor(0,0);

  lcd.print("1.Pulse Mode");

  lcd.setCursor(1,1);

  lcd.print("Push Select!");

 }

 if(sw1_sensor_flag == 1 && sw2_sensor_flag == 0)

 {

  lcd.setCursor(0,0);

  lcd.print("2.Sensor Mode");

  lcd.setCursor(1,1);

  lcd.print("Push Select!");

 }

}


void pulse_mode_setup()

{

 pinMode(pulse_pin,INPUT);

}


void pulse_mode()

{

 if(sw2_pulse_flag == 1)

 {

  pulsewidth = pulseIn(pulse_pin,HIGH);

  delay(100);

  peri = float((pulsewidth/1000)*2);

  freq = (1000/peri);

  lcd.setCursor(0,0);

  lcd.print("[Pulse Mode]");

  lcd.setCursor(0,1);

  lcd.print("Freq:");

  lcd.print(freq);

  lcd.print("Hz");

 }

}


void sensor_mode()

{

 if(sw2_sensor_flag == 1)

 {

  temp_mode();

  cds_mode();

  ultra_mode();

 }

}


void temp_mode()

{

 temp_value = analogRead(temp_pin);

 temp = 0.488155 * (temp_value - 20);

 delay(500);

 lcd.setCursor(0,0);

 lcd.print("T:");

 lcd.print(temp,2);

 lcd.print("C");

}


void cds_mode()

{

 cds_value = analogRead(POTEN);

 cds_voltage = cds_value * 5.0 / 1024.0;

 lcd.setCursor(9,0);

 lcd.print("CDS:");

 lcd.setCursor(13,0);

 if(cds_voltage >= 2.5)

  {

   lcd.print("NIG");

  }

 else

 {

  lcd.print("DAY");

 }

}


void ultra_mode_setup()

{

 lcd.createChar(0,b00);

 lcd.createChar(1,b16);

 lcd.createChar(2,b24);

 lcd.createChar(3,b28);

 lcd.createChar(4,b30);

 lcd.createChar(5,b31);


 lcd.init();

 lcd.backlight();

 

 pinMode(trig_pin,OUTPUT);

 pinMode(echo_pin,INPUT);

 Serial.begin(9600);

}


void ultra_mode()

{

 digitalWrite(trig_pin,HIGH);

 delayMicroseconds(10);

 digitalWrite(trig_pin,LOW);


 duration = pulseIn(echo_pin,HIGH);

 distance = duration / 29 / 2;


 lcd.setCursor(0,1);

 lcd.print("U:");

 lcd.setCursor(2,1);

 lcd.print("              ");

 int i = distance/5;

 int j = distance%5; 

 Serial.print(distance);

 Serial.print("              ");

 Serial.print(i);

 Serial.print("              ");

 Serial.print(j);

 

 lcd.setCursor(2,1);

 if(i>=14)

 {

  for(int k=0; k<14; k++)

  {lcd.write(5);}

  }

 else if(i<14)

 {

  for(int k=0; k<i; k++)

  {lcd.write(5);}

  }

 lcd.setCursor(i+2,1);

 lcd.write(j);

}


void sw_mode_setup()

{

 pinMode(sw1,INPUT);

 pinMode(sw2,INPUT);

 pinMode(sw3,INPUT);

}


void sw_reset()

{

 while(! s_state1 && reset_timer ++<= 3000)

 {

  s_state1 = digitalRead(sw1);

  delayMicroseconds(1000);

  if(reset_timer == 3000)

  {

   start_flag = 1;

   }

  }

 reset_timer = 0;

}


void sw_mode_1()

{

 s_state1 = digitalRead(sw1);

 if(old_state1 != s_state1)

  {

   old_state1 = s_state1;

   if(s_state1 == HIGH)

    {

     if(sw2_pulse_flag == 0 && sw2_sensor_flag == 0)

     {

     sw_flag_1++;

     if(sw_flag_1 > 1)

     {

      sw_flag_1 = 0;

     }

     if(sw_flag_1%2 == 1)

     {

      sw1_pulse_flag = 1;

      sw1_sensor_flag = 0;

      }

     else

     {

      sw1_sensor_flag = 1;

      sw1_pulse_flag = 0;

      }

     }


    if(sw2_pulse_flag == 1)

    {

     sw1_pulse_flag = 1;

     sw2_pulse_flag = 0;

     }

  

    if(sw2_sensor_flag == 1)

    {

     sw1_sensor_flag = 1;

     sw2_sensor_flag = 0;

     sw3_select_flag = 0;

    }

   }

  }

 sw_reset();

}


void sw_mode_2()

{

 s_state2 = digitalRead(sw2);

 if(old_state2 != s_state2)

  {

   old_state2 = s_state2;

   if(s_state2 == HIGH)

   {

    if(sw1_pulse_flag == 1)

    {

     sw2_pulse_flag = 1;

     timer_flag = 1;

     }

    if(sw1_sensor_flag == 1)

    {

     sw2_sensor_flag = 1;

    }

    }

   }

}


void sw_mode_3()

{

 s_state3 = digitalRead(sw3);

 if(old_state3 != s_state3)

  {

   old_state3 = s_state3;

   if(s_state3 == HIGH)

    {

     s_state1 = 0;

     s_state2 = 0;

     s_state3 = 0;

     sw_flag_1 = 1;

     sw_flag_2 = 0;

     sw_flag_3 = 0;

     old_state1 = 1;

     old_state2 = 1;

     old_state3 = 1;

     sw1_pulse_flag = 1;

     sw1_sensor_flag = 0;

     sw2_pulse_flag = 0;

     sw2_sensor_flag = 0;

     }

    }

}


void reset_mode()

{

 start_flag = 0;

 s_state1 = 0;

 s_state2 = 0;

 s_state3 = 0;

 sw_flag_1 = 0;

 sw_flag_2 = 0;

 sw_flag_3 = 0;

 old_state1 = 1;

 old_state2 = 1; 

 old_state3 = 1;

 sw1_pulse_flag = 0;

 sw1_sensor_flag = 0;

 sw2_pulse_flag = 0;

 sw2_sensor_flag = 0;

 sw3_select_flag = 0;

 cds_value = 0;

 cds_voltage = 0;

 duration = 0;

 distance = 0;

 temp_value = 0;

 temp = 0;

}


올배움 21-10-15 08:54
 
안녕하세요.

해결 방법 알려드리겠습니다.
1. 주파수 발생기  VIN + = VCC , VIN- = GND, PWM = 지정 핀
2. void act_1_mode()

{

 if(sw1_pulse_flag == 1 && sw2_pulse_flag == 0)

 {

  lcd.setCursor(0,0);

  lcd.print("1.Pulse Mode");

  lcd.setCursor(1,1);

  lcd.print("Push Select!");

 }

 if(sw1_sensor_flag == 1 && sw2_sensor_flag == 0)

 {

  lcd.setCursor(0,0);

  lcd.print("2.Sensor Mode");

  lcd.setCursor(1,1);

  lcd.print("Push Select!");

 }
이 코드에서 빈 자리를 띄어쓰기로 채워주시면 됩니다.
띄어쓰기가 빠져서 전에 출력되던 내용들이 겹쳐보이는 것입니다.

3. 온도센서를  잡고있을때 값이 유지되지 않는다면 온도센서 불량 아니면, 온도센서와 조도센서의 핀을 서로 반대로 연결한것일수 있습니다. 코드에는 문제 없는것으로 보입니다
 

Total 4,084

번호 강좌명 제목
2724 자동차정비기사(임세순) 3회 필답 (1)
2723 콘크리트기사(김현우) 콘크리트 기사 작업형 답안지, 지난 필답형1번에 관해 질문드립니다. (1)
2722 식품산업기사(박대준) 5강 일반세균수 검사 (1)
2721 산림기사(권현준) 클리노미터, 하이트미터 계산시 질문이요 (1)
2720 건축산업기사 건축산업기사 실기 시험 방법 (1)
2719 컴퓨터응용선반기능사(NEW) 실기시험시 사용 프로그램 (1)
2718 의공기사(신) 212p. 4번문제 문의 (1)
2717 의공기사(신) 이상적인 연산증폭기의 특징에서..... (1)
2716 의공기사(신) 교재214p. 7번문제. 인코더, 디코더 문의. (1)
2715 건축설비산업기사(김성태) 2014년1회9번문제
   136  137  138  139  140  141  142  143  144  145  146  147  148  149  150