아두이노 실습
팅커캐드에 들어가서 회원가입 Try Circuits에서 실습 가능
setup()과 loop()함수는 필수
setup()은 초기화하는 함수로 한 번만 실행된다.
void setup()
{
//초기화하는 코드들은 여기에, setup()은 초기에 한 번 호출됨
pinMode(13, OUTPUT);
//13번 핀을 출력 모드로 설정
//input(입력 모드), output(출력 모드),
//input_pullup(내부 풀업 저항을 사용할 때)
}
void loop()
{
//loop() 무한 반복으로 호출되는 함수
digitalWrite(13, HIGH); //13번 출력에 1값 내보냄
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(13, LOW); //13번 출력ㅇ 1을
delay(1000); // Wait for 1000 millisecond(s)
}
전원과 연결 빨간색 선, 접지는 검은색 선
전류가 흐르는 양을 조절하기 위해서 적절한 저항을 사용해야 한다. ( V = I*R )
Serial
void setup()
{
Serial.begin(9600);
//시리얼 통신을 초당 9600비트의 데이터를 전송하겠다. Serial 직렬 통신을 하겠다.
pinMode(13, OUTPUT);
}
void loop()
{
if(Serial.available()){
//시리얼 안에 데이터가 있으면 true를 반환한다.
int sw=(int)Serial.read();
//1을 입력하면 49가 출력된다. 아스키 코드를 출력하는 것
Serial.println("sw: " +(String)sw); //값을 확인하고 싶을떄는 String으로 변환해주는게 좋다.
if(sw=='1'){
digitalWrite(13,HIGH); //1이면 불이 켜진다.
}else{
digitalWrite(13,LOW);
}
delay(100);
}
}
PUSH
void setup()
{
Serial.begin(9600);
pinMode(7,INPUT); //7번핀이 input
pinMode(8, OUTPUT); //8번핀이 output
}
void loop()
{
int val = digitalRead(7); //7번핀 통해서 읽겠다.
Serial.println("val"+(String)val);
if(val==HIGH){
digitalWrite(8,HIGH);
}else{
digitalWrite(8,LOW);
}
delay(500);
}
풀다운 저항
- 저항을 어디에 연결하느냐에 따라 풀다운 저항과 풀업 저항으로 나뉜다.
저항을 전원선에 연결하면 pull_up저항이고 접지선에 연결하면 pull-down 저항이 된다.
풀다운 저항을 사용하면 7번핀은 푸시버튼을 누르지 않을때 저항을 거쳐 접지로 연결된 선을 통해 low값을 읽는다.
푸시버튼을 누르면 전류가 전원에서 푸시버튼, 저항을 거쳐 접지로 흐르는데 이 때 디지털 7번핀과
전원의 전압차를 감지해서 입력값이 HIGH로 바뀐다.
풀업 저항은 반대이다.
아두이노에서는 기본적으로 풀업 저항을 제공해주므로 사용할 수 있다.
void setup()
{
//내부 풀업 저항을 이용하기
pinMode(8,OUTPUT);
pinMode(7,INPUT_PULLUP);
}
void loop()
{
int val = digitalRead(7);
if(val == HIGH){
digitalWrite(8,HIGH);
}else{
digitalWrite(8,LOW);
}
}
아두이노 홈페이지에서 ide 받고 진행
usb연결 - 포트 연결 - 작동
스위치
void setup()
{
pinMode(7, INPUT);
pinMode(8, OUTPUT);
}
void loop()
{
int val = (int)digitalRead(7);
if(val==HIGH){
digitalWrite(8,HIGH);
}else{
digitalWrite(8,LOW);
}
delay(100); //loop가 빠르기 때문에 delay를 주지 않으면 부하가 걸릴 수 있다.
}
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
서브쿼리를 이용한 테이블 생성
- 데이터 생성시 이미 만들어진 기존 테이블을 이용해 새로운 테이블을 만들고자 할 때 사용
- CREATE TABLE 테이블명(컬럼명1, 컬럼명2, ....)
AS SUBQUERY;
문제1) EMP에서 30번 부서에 근무하는 사원 정보만 추출하여 EMP_30 테이블을 생성하세요
단, 사번, 이름, 업무, 급여, 보너스만 포함시키세요
CREATE TABLE EMP_30 (EMPNO, ENAME, JOB ,SAL, COMM)
AS SELECT EMPNO, ENAME, JOB, SAL, COMM from EMP
where DEPTNO=30;
문제2) EMP테이블에서 부서별로 인원수, 평균 급여, 급여합, 최소급유, 최대급여를 포함하는 EMP_DEPTNO 테이블을 생성하세요.
create table emp_deptno
as
select deptno,count(*) cnt, round(avg(sal),2) avg_sal,sum(sal) sum_sal,min(sal) min_sal,max(sal) max_sal
from emp group by deptno;
문제3) EMP 테이블에서 사번, 이름, 업무, 입사일자, 부서번호만 포함하는 EMP_TEMP테이블을 만들되, 데이터는 포험시키지 말고 테이블 구조만 생성하세요
CREATE TABLE EMP_TEMP (NO,NAME,JOB,HDATE,DNO)
AS
SELECT EMPNO, ENAME, JOB, HIREDATE, DEPTNO
FROM EMP WHERE 1=2 ;
컬럼 추가, 변경, 삭제
(1) 컬럼 추가
ALTER TABLE 테이블명 ADD 컬럼명 자료형 (DEFAULT 값);
(2) 컬럼 변경
ALTER TABLE 테이블명 MODIFY 변결할 컬럼정보;
이름 변경
ALTER TABLE 테이블명 TEMP RENAME COLUMN NO TO NUM;
(3) 컬럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 삭제할 컬럼명;
select * from temp;
alter table temp add NAME VARCHAR2(20);
alter table temp modify no char(4);
alter table temp drop column name;
객체 이름 변경
RENAME OLD_NAME TO NEW_NAME;
RENAME EMP_30 TO EMPLOYEE30;
INSERT 문에서의 SUBQUERY
INSERT INTO 테이블명(컬럼명1, 컬럼명2,...)
SUBQUERY;
INSERT INO emp_10
SELECT * FROM EMP WHERE DEPTNO=10;
UPDATE 문에서의 SUBQUERY
UPDATE 테이블명 SET 컬럼명=값1, 컬럼명2=값2
WHERE 조건
문제1) EMP2테이블에서 사번이 7788인 사원의 부서번호를 10번 부서로 수정하세요.
UPDATE EMP2 SET DEPTNO=20
WHERE EMPNO=7788;
문제2) EMP2 테이블에서 사번이 7369인사원의 부서를 20, 급여를 4500으로 수정하세요
UPDATE EMP2 SET DEPTNO=20, SAL=4500
WHERE EMPNO=7369;
문제3) EMP2테이블에서 SCOTT의 업무와 급여가 일치하도록 JONES의 업무와 급여를 수정하세요
UPDATE EMP2 SET (JOB,SAL)
=(SELECT JOB, SAL FROM EMP2 WHERE ENAME='SCOTT')
WHERE ENAME='JONES';
UPDATE 문과 무결성 제약조건 에러
--DEPT테이블을 카피해서 DEPT2 테이블을 만들기
CREATE TABLE DEPT2
AS SELECT * FROM DEPT;
-- DEPT2테이블에 DEPTNO 컬럼에 대해 PRIMARY KEY 제약조건을 추가하세요
ALTER TABLE DEPT2 ADD CONSTRAINT DEPT2_PK PRIMARY KEY (DEPTNO);
-- EMP2테이블의 DEPTNO 컬럼에 대해 DEPT2의 DEPTNO를 외래키로 참조하도록 제약조건을 추가하세요
ALTER TABLE EMP2 ADD CONSTRAINT EMP2_FK FOREIGN KEY (DEPTNO)
REFERENCES DEPT2 (DEPTNO)
-- EMP2에서 SCOTT의 부서번호를 90번 부서로 수정하세요
UPDATE EMP2 SET DEPTNO=90
WHERE ENAME ='SCOTT';
-- 불가능하다 DEPTNO가 없기 때문이다.