개발자의 생활

2023년 1학기 4주차 과제 본문

과제/아두이노

2023년 1학기 4주차 과제

Developer성현 2023. 4. 1. 21:26

4_1

#include "pitches.h"

int speakerPin = A3;
// 스피커 연결 핀

int melody[] = {
  // 학교 종 멜로디, 0은 쉼표
  NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_G4, NOTE_E4, 0,
  // 392, 392, 440, 440, 392, 392, 330, 0,
  NOTE_G4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, 0,
  // 392, 392, 330, 330, 294, 0,
  NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_G4, NOTE_E4, 0,
  // 392, 392, 440, 440, 392, 392, 330, 0,
  NOTE_G4, NOTE_E4, NOTE_D4, NOTE_E4, NOTE_C4, 0
  // 392, 330, 294, 330, 262, 0
};

int noteDuration = 4;
// 4분 음표

void setup() {

  Serial.begin(9600);

}

void loop() {
  for (int thisNote = 0; thisNote < sizeof(melody) / sizeof(int); thisNote++) {

    int noteLength = 1000 / noteDuration;
    // 음표 길이를 시간으로 변환

    tone(speakerPin, melody[thisNote], noteLength);
    // 단음 재생
    delay(noteLength);
    // 음계간 구분
    noTone(speakerPin);
    // 현재 음 재생 중지(A0)

  }
  Serial.println(sizeof(melody) / sizeof(int));
  Serial.println(sizeof(melody));
  Serial.println(sizeof(int));

  while (true);
  // 1회 재생 후 대기

}

pitches.h 해더파일 안에는 음에 맞는 주파수 코드가 들어있습니다.

 

4_2

int input_button[8] ={2,3,4,5,6,7,8,9};

//int note[8]={262,294,330,349,392,440,494,523};
int note[8]={2093,2349,2637,2793,3136,3520,3951,4186};

int value[8]={};
int piezo = A3;
  
void setup()
{
  for (int i = 0; i < 8; i++){
    
  pinMode(input_button[i], INPUT);
  //배열에 있는 핀을 모두 입력으로 설정
  }
  
  pinMode(piezo, OUTPUT);
  //A3에 연결된 부저 핀을 출력으로 설정
}

void loop(){
  
  for (int i = 0; i < sizeof(note)/sizeof(int) ; i++){
    //배열길이를 가져와 0~배열길이 만큼 반복
    value[i] = digitalRead(input_button[i]);
  //해당 핀의 상태를 가져와 배열에 순서대로 담는다.
  }
  
  for (int i = 0; i < 8; i++){
    
    if( value[i] == HIGH){
      //0~7까지 반복하면서 HIGH일때만 실행
      tone(piezo, note[i]);
      //A3핀에 해당 주파수를 가져와 실행
      delay(200);
      //0.2초 딜레이
      
    }
  }
  
  noTone(piezo);
  //출력정지
  
}

 

4_3

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

void loop( ) {
  int reading = analogRead(A1);                   
  // 온도 센서 읽기
                                
  float voltage = reading * 5.0 / 1024.0;         
  // ADC 반환값을 전압으로 변환
  float temperatureC = voltage * 100;             
  // 전압에 100을 곱하면 섭씨온도를 얻을 수 있다.
  Serial.print(voltage + String(" V : "));
  Serial.print(temperatureC + String(" C, "));
  
  float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0; 
  // 화씨온도로 변환
  
  Serial.println(temperatureF + String(" F"));
  
  delay(1000);
}

 

4_4

void setup() {
  Serial.begin(9600); 
  // 직렬 포트 초기화
}

void loop() {
  
  int reading = analogRead(A2);               
  // 조도 센서 읽기
  Serial.print(String("ADC : ") + reading );
  
  float voltage = reading * 5.0 / 1024.0;     
  // ADC 반환 값을 전압으로 변환
  Serial.println(String(", Voltage : ") + voltage);
  
  delay(1000);
}

 

4_5

int Sensor_input = A2;
int LED_1 = 9, LED_2 = 10, LED_3 = 11, LED_4 = 12;
int Sensor_Value = 0;

void setup() 
{
  pinMode(Sensor_input, INPUT);
  pinMode(LED_1, OUTPUT);
  pinMode(LED_2, OUTPUT);
  pinMode(LED_3, OUTPUT);
  pinMode(LED_4, OUTPUT);
  Serial.begin(9600);
}

void loop() 
{
 digitalWrite(LED_1, LOW);
 digitalWrite(LED_2, LOW);
 digitalWrite(LED_3, LOW);
 digitalWrite(LED_4, LOW);
  
 Sensor_Value = analogRead(Sensor_input);
 Serial.println(Sensor_Value);
 
 if ((0 <= Sensor_Value) && (Sensor_Value < 250))
 {
  digitalWrite(LED_1, HIGH);
  delay(3000);
 }

 else if ((250 <= Sensor_Value) && (Sensor_Value < 500))
{
  digitalWrite(LED_2, HIGH);
  delay(3000);
  }

 else if ((500 <= Sensor_Value) && (Sensor_Value < 750))
 {
  digitalWrite(LED_3, HIGH);
  delay(3000);
 }

else if ((750 <= Sensor_Value) && (Sensor_Value < 1000))
{
digitalWrite(LED_4, HIGH);
  delay(3000);
 }

 else
 {
  digitalWrite(LED_4, HIGH);
  delay(500);
  digitalWrite(LED_4, LOW);
  delay(500);
  }
}