반응형

https://blog.naver.com/tndk4997/221769188778

 

아두이노&프로세싱으로 마술지팡이 만들기

이번 기말 텀은 조별과제로 아두이노를 활용해서 뭔가를 만드는거였다 나는 뭔가 영상을 만들거나, 스토리...

blog.naver.com

예전에 블로그에 올렸던 코드

코드를 정리를 안해두는 바람에 최종 코드가 뭔지 잘 모르겠고, 코드가 상-당히 스파게티 상태 + 비효율 + 읽기 힘듦

사용센서

아두이노 우노, 자석센서

아두이노

int inPin = 7;
int inPinPin = 6;
int inPinPinPin = 5;

void setup()
{
  Serial.begin(9600);
}
void loop()
{
  if(digitalRead(inPin)!=LOW&&digitalRead(inPinPin)!=LOW){
      Serial.println("non");
      Serial.write(5);
    }
   //마법진
  if(digitalRead(inPin)==LOW){
    Serial.println("마법진");
    Serial.write(1);
  }
  
  // 무한대
  if(digitalRead(inPinPin)==LOW){
    Serial.println("fire");
    //int infinte = digitalRead(6);
    //Serial.println(infinte);
    Serial.write(2);
  }

//눈내리는 코드에 삽입할거

     if(digitalRead(inPinPinPin)==LOW){
      Serial.println("snow");    
//      int snow = digitalReda(5);
//      Serial.println(눈); 
      Serial.write(3);
      }


//if(digitalRead(inPinPin==LOW)){
//    Serial.println("fire");
//    Serial.write(2);
//  }
  delay(100);      
}

세부적으로

int inPin = 7;
int inPinPin = 6;
int inPinPinPin = 5;

void setup()
{
  Serial.begin(9600);
}

연결된 센서는 총 3개로 inPin / inPininPin / inPininPininPin으로 구분했다... 왜 그랬지

void loop()
{
  if(digitalRead(inPin)!=LOW&&digitalRead(inPinPin)!=LOW){
      Serial.println("non");
      Serial.write(5);
    }
   //마법진
  if(digitalRead(inPin)==LOW){
    Serial.println("마법진");
    Serial.write(1);
  }
  
  // 무한대
  if(digitalRead(inPinPin)==LOW){
    Serial.println("fire");
    Serial.write(2);
  }

//눈내리는 코드에 삽입할거

     if(digitalRead(inPinPinPin)==LOW){
      Serial.println("snow");    
      Serial.write(3);
      }
  delay(100);      
}

loop() 안에서 센서가 반응하면 각각에 맞는 신호를 write로 프로세싱으로 보낸다. 신호를 받는동안 delay값을 100으로 주었다.

프로세싱

import processing.serial.*;
import processing.video.*;
import processing.sound.*;
SoundFile song;

Serial port;

Movie fire;
Movie snow;
Sound s;

void setup()
{
  maxR = 400;
  size(1040,640);
  background(0);
  
  port=new Serial(this,"COM3",9600);


}
void draw()
{
  background(0);
  if(val != 5){

    play();
  }
if(val == 5){
  fire = new Movie(this,"fire.mp4");
  snow = new Movie(this,"snow.mp4");
  song = new SoundFile(this,"magic_circle.mp3");
  }
}

프로세싱 오디오 라이브러리는 minim도 있지만 sound를 사용하였다.

https://openprocessing.org/sketch/531428

 

Magic Circle - OpenProcessing

Draw a magic circle randomly

openprocessing.org

마법진 코드는 삭제하고 업로드 하였다.

마법진 코드는 해당 코드를 조금씩 수정하였다.

play()에서 마법진을 불러온다.

void play(){
  if(val == 0){
    background(0);
  }
  if(val == 1){
    pushMatrix(); 
    s = new Sound(this);
    song.play();
    popMatrix();  
    if(val == 5){
     song.pause();
    }
  }
  if(val == 2){
    fire.play();
    image(fire,0,0,width,height);
   if(val == 5){
     fire.pause();
    }
  }
  if(val == 3){
    snow.play();
    image(snow,0,0,width,height);
     if(val == 5){
     snow.pause();
    }

  }


}

만약 val이 5 일경우 == 3개의 센서에 아무 값이 없는 경우 영상이 종료된다.

val == 1 은 마법진 코드가 작성되었던 곳 원래는 loop함수 안에 작성했었는데 그렇게 하면 마법진이 처음에 생성 된 후 다시 신호를 주어도 똑같은 마법진이 나타나서 play()로 옮겨놨다.

이렇게 하면 마법진과 연결이 되어있는 자석센서에 자석이 닿일 때 마다 새로운 마법진이 생성된다.

void serialEvent(Serial port)
{
 val = port.read();
 old_val = val;
 
}
void movieEvent(Movie m){
  m.read();
}

전 값을 가지고 오는 코드와

비디오를 읽어오는 코드

반응형
반응형

https://www.acmicpc.net/problem/9506

 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.  예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net

문제

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 

예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.

n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

입력

입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100, 000)

입력의 마지막엔 -1이 주어진다.

출력

테스트케이스 마다 한줄에 하나씩 출력해야 한다.

n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).

이때, 약수들은 오름차순으로 나열해야 한다.

n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.

 


풀이

1. 1~n-1의 숫자로 나눠서 나머지가 0이면 약수로 저장하기

2. 해당 약수를 출력하기

# 9506 약수들의 합

# 숫자를 계속 입력받기
while True:
    n = int(input())
    # -1을 받으면 while문 종료
    if n == -1:
        break
    
    ans = []
    add = 0
    # 나누어지면 약수로 배열에 넣어주기
    # 자동 오름차순
    for i in range(1, n):
        if n % i == 0:
            ans.append(i)

    for i in range(len(ans)):
        add += ans[i]

    if add != n:
        print('{} is NOT perfect.'.format(n))
    else:
        print('{} ='.format(n),end=' ')
        for i in range(len(ans)):
            # 마지막 숫자의 뒤에는 + 를 빼주기
            if i == len(ans)-1:
                print('{}'.format(ans[i]))
            else:
                print('{} +'.format(ans[i]), end=' ')

엄청 어려운 문제는 아니지만 -1이 마지막에 주어진다는걸 못봐서

입력을 하나하나 받다가 틀렸던 문제.

반응형
반응형

https://www.acmicpc.net/problem/1789

 

1789번: 수들의 합

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

www.acmicpc.net

문제

서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까?

입력

첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다.

출력

첫째 줄에 자연수 N의 최댓값을 출력한다.


 

S = int(input())
num = 1
ans = 0

while ans <= S:
    ans += num
    if ans >= S-num:
        break
    # print('num : {}, ans : {}'.format(num,ans))
    num += 1
print(num)

풀이

1. 모두 다른 수 이므로 더해지는 서로 다른 N을 1부터 +1

2. 마지막에 수를 더할 경우 S를 초과하게 되므로 마지막 수는 빼기

반응형

+ Recent posts