카테고리 없음

[동아리 과제] 5월 23일 아두이노 7차시 과제

20308박동진 2022. 5. 24. 20:46

LCD란?

- Liquid Crystal Display(액정 디스플레이)의 줄임말

- 보통은 1602(16칸 2줄)을 사용하지만, 2004(20칸 4줄)을 사용하기도 합니다.

- 아날로그핀을 이용하거나 12C전용 핀을 사용합니다.

+들어가기에 앞서....

LCD를 사용하기 위해서 꼭 필요한 헤더 파일이 있습니다. 바로 <LiquidCrystal_12C.h><wire.h>를 코드에 각각 추가해 주어야 합니다.

 

 

<회로도>

 

<코드>

#include <wire.h>
#include <LiquidCrystal_12C.h>
LiquidCrystal_12C lcd(0x27, 16,2);
void setup()
{
  lcd.begin(); //lcd모듈 초기화
  lcd.backlight(); //lcd백라이트 켜기
  lcd.clear();//내용 삭제하기
}

void loop()
{
  lcd.setCursor(0,0);//lcd커서 표현하기 --> 행(0), 열(0) 
  lcd.print("Hi, Nefus");//lcd화면 안의()내용을 출력하기
  lcd.setCursor(0,1);
  lcd.print("Nefus Focus");
}

 

lcd응용

 

<회로도>

<코드>

#include <wire.h>
#include <LiquidCrystal_12C.h>
LiquidCrystal_12C lcd(0x27, 16,2);
void setup()
{
  lcd.begin(); //lcd모듈 초기화
  lcd.backlight(); //lcd백라이트 켜기
  lcd.clear();//내용 삭제하기
}

void loop()
{
  lcd.setCursor(0,0);//lcd커서 표현하기 --> 행(0), 열(0) 
  lcd.print("Hi, Nefus");//lcd화면 안의()내용을 출력하기
  lcd.setCursor(0,1);
  lcd.print("Nefus Focus");
  for(int position = 0 ; position < 16 ; position++){//position이 0~15라면 값을 하나씩 증가시킴
    lcd.scrollDisplayRight(); //오른쪽으로 한칸씩 이동
    delay(1000);
  }
}  

.

.

.

.

.

.

과제

 

<회로도>

<코드>

#include <LiquidCrystal_12C.h>
#include <Wire.h>
int bu = 2;
LiquidCrystal_12C lcd(0x27, 16,2);
void setup() {
  Serial.begin(9600);//시리얼 통신 선언
  lcd.begin(); //lcd모듈 초기화
  lcd.backlight(); //lcd백라이트 켜기
  lcd.clear();//내용 삭제하기
  pinMode(bu,OUTPUT);
}
  

void loop() { //반복
  int poten = analogRead(A0);//A0의 핀 읽기
    int mapp = map(poten, 0, 1023, 0, 180); //poten의 값을 0~1023에서 0~180 으로 바꿈
  delay(100);
 

  if(poten <= 90){
    lcd.setCursor(0,0);//lcd커서 표현하기 --> 행(0), 열(0) 
    lcd.print("Hi, Nefus");//lcd화면 안의()내용을 출력하기
    lcd.setCursor(0,1);
    lcd.print("Nefus Focus");
    for(int position = 0 ; position < 16 ; position++){//position이 0~15라면 값을 하나씩 증가시킴
      lcd.scrollDisplayRight(); //오른쪽으로 한칸씩 이동
      delay(1000);
    }
    tone(bu, 659);
    tone(bu, 698);
    tone(bu, 784);
  }
  else{
    lcd.setCursor(0,0);//lcd커서 표현하기 --> 행(0), 열(0) 
    lcd.print("Hi, Nefus");//lcd화면 안의()내용을 출력하기
    lcd.setCursor(0,1);
    lcd.print("Nefus Focus");
    for(int position = 0 ; position < 16 ; position++){//position이 0~15라면 값을 하나씩 증가시킴
      lcd.scrollDisplayLeft(); //오른쪽으로 한칸씩 이동
      delay(1000);
    } 
    tone(bu, 659);
    tone(bu, 698);
    tone(bu, 784);
  }
}

 

.

.

.

 

안되서...ㅠ ( --> 왜 팅커캐드는 #include <LiquidCrystal_12C.h>가 없을까요?)

다른 과제로 할려했는데....

 

int led1 = 8;
int led2 = 9;
int led3 = 10;
int trig = 2;// 송신핀은 2번으로
int echo = 3;// 수신핀은 3번으로함
void setup()
{
  Serial.begin(9600);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(10,OUTPUT);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop()
{
  int data = 0;
  int poten = analogRead(A0);
  int mapp = map(poten, 0, 1023, 0, 180);
  data = analogRead(A0);
  Serial.println(data);
  delay(500);
  digitalWrite(trig, HIGH);
  delay(10);
  digitalWrite(trig, LOW);
  
  
  float distance = (340*pulseIn(echo, HIGH) / 1000/2);
  
  if(data<500){
   digitalWrite(led1, HIGH);
   delay(500);
   digitalWrite(led1, LOW);
  }
  if(data<1000&&distance<=100){
    digitalWrite(led2, HIGH);

    digitalWrite(led1, HIGH);

    delay(500);
    digitalWrite(led2, LOW);

    digitalWrite(led1, LOW);
  }
  if(data<1000&&distance<=100&&poten<=500){
   digitalWrite(led3,HIGH);

   digitalWrite(led2, HIGH);

   digitalWrite(led1, HIGH);

   delay(500);

   digitalWrite(led2, LOW);

   digitalWrite(led1, LOW);

   digitalWrite(led3, LOW);

 
  }
}

 

 

진짜 찐막

 

<회로도>

 

 

<코드>

int led1 = 8;
int led2 = 9;
int trig = 2;// 송신핀은 2번으로
int echo = 3;// 수신핀은 3번으로함
void setup()
{
  Serial.begin(9600);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
}

void loop()
{
  int data = 0;
  data = analogRead(A0);
  Serial.println(data);
  delay(500);
  digitalWrite(trig, HIGH);
  delay(10);
  digitalWrite(trig, LOW);

  float distance = (pulseIn(echo, HIGH)*34 / 1000/2);

  if(data<50){
   digitalWrite(led1, HIGH);
   delay(500);
    digitalWrite(led1, LOW);
  }
  if(data<100&&distance<=100){
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    delay(500);
    digitalWrite(led2, LOW);
    digitalWrite(led1, LOW);
  }
}