간단한 코드 요약


네이버 메인 사이트에서 검색어 긁어오기 + 순위 정렬해서 출력하기



코드 (Color Scripter)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
 
    if (msg == "parse") {
 
        var i;
        var resultmsg = "";
 
        var urlparse = Utils.getWebText("https://www.naver.com");
        //urlparse를 수정하기 위해 substring, replace, split, concat 등을 사용
        var parseedit = urlparse.split("realtimeKeyword")[3];
        for(i=1;i<20;i++) {
            resultmsg = resultmsg.concat(pars.split("ah_k\">")[i].split("</span>")[0].concat("\n"));
        }
        replier.reply(resultmsg);
    }
}
cs


'Programming > # KakaoTalk Bot (JavaScript)' 카테고리의 다른 글

#03 메시지 폭주방지  (0) 2018.09.03
#02 간단한 응답구조  (0) 2018.09.03
#01 카카오톡봇(JS) 프로젝트 시작  (0) 2018.09.03

간단한 코드 요약


받은 메시지를 따라하는 코드. 하지만 같은 말을 할 경우 메시지를 출력하지 않는다.



코드 (Color Scripter)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var prevMsg = "";
 
function messageSend(room, msg) {
 
    if (prevMsg != msg) {
        prevMsg = msg;
        Api.replyRoom(room, msg);   //노란배경 JS봇일 경우
        KakaoTalk.reply(room, msg); //카카오톡봇+(닼토봇)일 경우
    }
    else {
        return;
    }
}
 
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
 
    if (msg == "test") {
 
        messageSend(room, msg);
    }
}
cs


간단한 코드 요약



위 if문은 메시지 따라하기

아래 if문은 받은 메시지의 정보 출력


코드 (Color Scripter)


1
2
3
4
5
6
7
8
9
10
11
12
function response(room, msg, sender, isGroupChat, replier, ImageDB) {
 
    if (msg == "msg") {  //해당 내용 따라하기
 
        replier.reply(msg);
    }
 
//msg 에 !all 이라는 단어가 포함되면, 해당 메시지의 방 이름, 보낸 사람, 그룹채팅 유무가 확인된다.
    if (msg.indexOf("!all"!= -1) {   
        replier.reply("debug - \nroom : "+room+"\nsender : "+sender+"\nisGroupChat : "+isGroupChat);
    }
}
cs


 가상에뮬레이터(Nox) & 카카오톡 앱 & 카카오톡 봇(닼토봇) 을 사용하여 원하는 입맛대로 봇을 만들어 보고, 코드들을 후에도 찾아볼 수 있도록 기록합니다.


 사실상 개인 코드 정리용이나, 필요한 분들께서는 사용하셔도 무방합니다.


 관련 코드들은 9월 3일부터 시작합니다.

'Programming > # KakaoTalk Bot (JavaScript)' 카테고리의 다른 글

#04 파싱 (인터넷 정보 가져오기)  (0) 2018.09.03
#03 메시지 폭주방지  (0) 2018.09.03
#02 간단한 응답구조  (0) 2018.09.03

# 제목: 2N3904 트랜지스터를 사용한 스위칭 예제 - 2



# 내용: 저번 글에 이어 트랜지스터를 사용해서 간단한 회로를 만들고, 이를 아두이노를 통해 제어하는 방법에 대해 알아봅시다.


3개의 LED를 연결하고, 1개의 트랜지스터(2N3904)를 사용하여 회로 제어를 해보도록 한다.


이 회로에서 LED의 cathode(+) 에는 3, 4, 5번 핀으로 input을 넣어주고, 트랜지스터의 base(가운데)에 6번 핀을 연결하여 디지털 신호 HIGH/LOW를 넣어주어 전체 회로를 켰다 끌 수 있도록 구성하였다.


# 코드:

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
int ledPin1 = 3;  //Digital I/O 3번에 1번째 LED 연결
int ledPin2 = 4;  //Digital I/O 4번에 2번째 LED 연결
int ledPin3 = 5;  //Digital I/O 5번에 3번째 LED 연결
int switchPin = 6//Digital I/O 6번에 트랜지스터 base 연결
 
void setup() {
  // put your setup code here, to run once:
  analogWrite(ledPin1, 1023);
  analogWrite(ledPin2, 200);
  analogWrite(ledPin3, 50);       //1~1023 입력시 LED 점등됨. 하지만 너무 낮으면 불이 안켜지니 주의.
  digitalWrite(switchPin, HIGH);  //(스위치를 닫는다 = 회로를 연결한다)
  delay(1000);
  digitalWrite(switchPin, LOW);
  analogWrite(ledPin1, 0);
  analogWrite(ledPin2, 0);
  analogWrite(ledPin3, 0);
}
 
void loop() {
  delay(1000);
  digitalWrite(switchPin, HIGH); //회로를 연결한 상태에서,
  analogWrite(ledPin1, 1023);
  delay(1000);
  analogWrite(ledPin1, 0);
  analogWrite(ledPin2, 1023);
  delay(1000);
  analogWrite(ledPin2, 0);
  analogWrite(ledPin3, 1023);
  delay(1000);
  analogWrite(ledPin3, 0);  //LED 1, 2, 3번 순서대로 1초씩 점등 후 꺼짐.
}
cs


# 회로도(Fritzing):



# 실행결과:




# 비고:


# 제목: 2N3904 트랜지스터를 사용한 스위칭 예제



# 내용: 앞서 스위치를 사용해서 회로를 연결했다 끊었다 하는 예제를 보여드렸죠.


이번에는 수동이 아닌, 전기적 신호를 사용해서 회로를 제어하는 방법을 보여드릴게요.


이번 글에서는 아두이노의 +5V, GND만 사용하고 그 외 I/O를 사용하지 않은 채로 트랜지스터의 사용법만 보여드리고, 


다음 글에서 트랜지스터와 아두이노 I/O를 연결하여 활용예제에 대해 다뤄보도록 할게요.



# 코드: (단순 회로 - 아두이노 사용하지 않음)



# 회로도(Fritzing):

1. 트랜지스터의 가운데단자 (BASE) - GND 연결을 하지 않았을 때. (LED OFF)

2. 트랜지스터의 가운데단자 (BASE) 연결을 했을 때. (LED ON)




# 실행결과: 




# 비고:


2N3904 Datasheet: https://html.alldatasheet.com/html-pdf/11470/ONSEMI/2N3904/180/1/2N3904.html



# 제목: 가변저항을 사용한 활용 예제



# 내용: 가변저항의 값을 아날로그 데이터로 입력하면 0~ 1023의 값이 입력된다.


이를 활용하여 필요한 만큼 구획을 나누어 원하는 상황에 맞게 사용할 수 있다.


해당 예제에서는 총 4개의 균등한 구획으로 나누고 각 구획마다 LCD에 다른 문구를 표시한다.



# 코드:


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
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x3F162);  // I2C LCD 객체 선언
const int resistorPin = A0;   //아두이노 A0 I/O에 가변저항을 연결합니다.
int sensorValue = 0;
 
void setup() {
  lcd.begin(); // lcd를 사용을 시작합니다.
  lcd.clear(); // lcd를 전부 지웁니다.
  lcd.home();  // 첫번째 줄 첫번째(좌측) 위치로 이동한다.
 
  pinMode(resistorPin, INPUT);  //resistorPin 을 입력으로 설정합니다.
}
 
void loop() {
  lcd.home();
  sensorValue = analogRead(resistorPin);  //analogRead()를 사용해서 아날로그 입력을 받는다.
 
  if(sensorValue >= 0 && sensorValue <255) {         //sensorValue 값이 0~254 일때
    lcd.print("1st quarter");
  }
  else if(sensorValue >= 255 && sensorValue <511) {  //값이 255~510 일때
    lcd.print("2nd quarter");
  }
  else if(sensorValue >= 511 && sensorValue <766) {  //값이 511~765 일때
    lcd.print("3rd quarter");
  }
  else {                                             //값이 766~1023 일때
    lcd.print("4th quarter");
  }
}
cs


# 회로도(Fritzing):




# 실행결과:



# 비고:


# 제목: 3-pin 스위치(토글 스위치)를 사용해서 두가지 상태를 만들어보자.



# 내용: 3-pin 스위치에 경우 방향에 따라 다른 회로를 구성할 수 있다.



위 사진과 같이 회로를 구성하고 스위치를 좌-우로 움직여보면 어떤 상황일 때 LED가 켜지는 지 확인할 수 있다.

(스위치 구성에 따라 방향이 반대일 수 있으므로 꼭 사용하기 전에 확인하세요)


가운데 핀은 항상 연결이 되어있고, 스위치의 이동에 따라 좌측핀 혹은 우측핀과 가운데핀이 연결되는 구조이다.


오른쪽 버튼스위치의 경우 아예 회로가 단절되었다가 버튼을 눌렀을 때만 회로가 연결되는 구조라면, 토글스위치는 회로가 항상 연결은 되어있으나


두가지 회로 중 선택하는 스위치라고 생각하면 된다.


이번 예제에서는 스위치로 Apple 혹은 Banana 를 표시할 수 있는 회로를 만들어본다.


# 코드:


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
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x3F162);  // I2C LCD 객체 선언
 
const int switchPin = 2;   //아두이노 디지털핀 2번 I/O에 스위치를 연결합니다.
int sensorValue = 0;
 
void setup() {
  lcd.begin(); // lcd를 사용을 시작합니다.
  lcd.clear(); // lcd를 전부 지웁니다.
  lcd.home();  // 첫번째 줄 첫번째(좌측) 위치로 이동한다.
 
  pinMode(switchPin, INPUT);  //switchPin 을 입력으로 설정합니다.
}
 
void loop() {
  lcd.home();
  sensorValue = digitalRead(switchPin);  //digitalRead()를 사용해서 디지털 입력을 받는다.
  if(sensorValue == HIGH) {  //스위치가 +5V와 연결되었을 경우 (HIGH)
    lcd.print(" Apple");
  }
  else {                     //스위치가 GND와 연결되었을 경우 (LOW)
    lcd.print("Banana");
  }
}
cs


# 회로도(Fritzing):




# 실행결과:



# 비고:




# 제목: 가변저항(INPUT) - 아두이노 - LCD1602(OUTPUT)으로 



# 내용: 가변저항을 사용해서 사용자가 직접 특정값을 입력해서 원하는 기능을 하도록 해보자.


일단 가변저항으로 어떻게 신호를 입력할 수 있을까?


이는 "전압분배법칙"을 사용해서 가능합니다.


법칙 자체를 설명하면 너무 복잡해질 것 같아서... 간단한 원리만 설명합니다.


가변저항은 총 3개의 핀으로 구성되어있고 좌/우측 끝 핀을 연결하면 전체저항값이 나오고,


끝단 중 하나와 가운데 핀을 연결하면 회전량만큼의 저항에 대한 값만 나오게 됩니다.


이걸 사용해서 좌/우끝단에 각각 +5V / GND 를 연결하고 가운데를 analog 입력에 넣으면 회전한 만큼 전압을 넣게되어


0~ 1023의 값을 입력할 수 있습니다. (analogRead() 메소드를 사용합니다)



# 코드:


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
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x3F162);  // I2C LCD 객체 선언
const int resistorPin = A0;   //아두이노 A0 I/O에 가변저항을 연결합니다.
int sensorValue = 0;
 
void setup() {
  lcd.begin(); // lcd를 사용을 시작합니다.
  lcd.clear(); // lcd를 전부 지웁니다.
  lcd.home();  // 첫번째 줄 첫번째(좌측) 위치로 이동한다.
 
  pinMode(resistorPin, INPUT);  //resistorPin 을 입력으로 설정합니다.
}
 
void loop() {
  lcd.home();
  lcd.print("Resistor(0~1023)");
  lcd.setCursor(0,1);   // LCD 에 한자리 ~ 네자리가 표시될 때
  lcd.print("    ");    // 네자리 표시 후에 한자리~세자리 표시로 바뀌면
  lcd.setCursor(0,1);   // 마지막자리 숫자가 그대로 남아있게 되어 표기오류가 생긴다.
                        // 그래서 이 방법을 사용해서 해당 LCD칸을 초기화해준다.
  sensorValue = analogRead(resistorPin);  //analogRead()를 사용해서 아날로그 입력을 받는다.
  lcd.print(sensorValue);   //lcd에 0~1023 값을 출력한다.
  lcd.setCursor(4,1);
  lcd.print("value");
}
cs


# 회로도(Fritzing):




# 실행결과:



# 비고:


이 방법을 사용하여 가변저항입력값 (0~1023)에 범위를 주어 특정값에 특정한 액션을 취하게 할 수 있습니다. 가변저항 입력을 사용하여 구현할 수 있는 예제를 다음 글에 써보도록 할게요~



http://fritzing.org/download/




아두이노 회로도를 그리기 위해 전세계 사람들이 제일 많이 쓰는 프로그램


(과제용 / 전시용 / 포스팅 용으로 사용)


엄청 편할뿐만 아니라 시각적 효과도 아주 뛰어남

'Arduino > # Softwares' 카테고리의 다른 글

Arduino IDE (코딩 프로그램)  (0) 2018.06.08

+ Recent posts