差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| arduino:grovebeginnerkit [2023/05/16 18:40] – baba | arduino:grovebeginnerkit [2024/05/21 11:00] (現在) – [3. OLED Display 0.96] baba | ||
|---|---|---|---|
| 行 86: | 行 86: | ||
| </ | </ | ||
| - | <code .c countdown.pde> | + | <file .c countdown.pde> |
| void setup() | void setup() | ||
| { | { | ||
| 行 97: | 行 97: | ||
| delay(1000); | delay(1000); | ||
| } | } | ||
| - | </code> | + | </file> |
| - | <code .c ring.pde> | + | <file .c ring.pde> |
| // Reference: http:// | // Reference: http:// | ||
| void setup() | void setup() | ||
| 行 159: | 行 159: | ||
| delay(1500); | delay(1500); | ||
| } | } | ||
| - | </code> | + | </file> |
| ==== 音階で音を鳴らしてみる ==== | ==== 音階で音を鳴らしてみる ==== | ||
| ON/ | ON/ | ||
| 行 180: | 行 180: | ||
| * https:// | * https:// | ||
| - | <code .c nokiatune.pde> | + | <file .c nokiatune.pde> |
| float getFreq(int n) | float getFreq(int n) | ||
| { | { | ||
| 行 187: | 行 187: | ||
| void setup() | void setup() | ||
| { | { | ||
| - | pinMode(6, OUTPUT); | + | pinMode(5, OUTPUT); |
| } | } | ||
| int interval = 250; | int interval = 250; | ||
| void loop() { | void loop() { | ||
| - | tone(6, getFreq(76), | + | tone(5, getFreq(76), |
| delay(interval/ | delay(interval/ | ||
| - | tone(6, getFreq(74), | + | tone(5, getFreq(74), |
| delay(interval/ | delay(interval/ | ||
| - | tone(6, getFreq(66), | + | tone(5, getFreq(66), |
| delay(interval); | delay(interval); | ||
| - | tone(6, getFreq(68), | + | tone(5, getFreq(68), |
| delay(interval); | delay(interval); | ||
| - | tone(6, | + | tone(5, |
| delay(interval/ | delay(interval/ | ||
| - | tone(6, getFreq(71), | + | tone(5, getFreq(71), |
| delay(interval/ | delay(interval/ | ||
| - | tone(6, getFreq(62), | + | tone(5, getFreq(62), |
| delay(interval); | delay(interval); | ||
| - | tone(6, getFreq(64), | + | tone(5, getFreq(64), |
| delay(interval); | delay(interval); | ||
| - | tone(6, getFreq(71), | + | tone(5, getFreq(71), |
| delay(interval/ | delay(interval/ | ||
| - | tone(6, getFreq(69), | + | tone(5, getFreq(69), |
| delay(interval/ | delay(interval/ | ||
| - | tone(6, getFreq(61), | + | tone(5, getFreq(61), |
| delay(interval); | delay(interval); | ||
| - | tone(6, getFreq(64), | + | tone(5, getFreq(64), |
| delay(interval); | delay(interval); | ||
| - | tone(6, getFreq(69), | + | tone(5, getFreq(69), |
| delay(interval*4); | delay(interval*4); | ||
| delay(interval*4); | delay(interval*4); | ||
| } | } | ||
| - | </code> | + | </file> |
| ==== 余談 ==== | ==== 余談 ==== | ||
| 鳴らしたいノート番号を指定することでその周波数を計算することができますが、その逆である「鳴らしたい周波数が決まっている場合、それはピアノの鍵盤でいうところのどの位置になるのか?」を計算するには、方程式をnについてとけば良いです。 | 鳴らしたいノート番号を指定することでその周波数を計算することができますが、その逆である「鳴らしたい周波数が決まっている場合、それはピアノの鍵盤でいうところのどの位置になるのか?」を計算するには、方程式をnについてとけば良いです。 | ||
| 行 230: | 行 230: | ||
| ==== 3. OLED Display 0.96 ==== | ==== 3. OLED Display 0.96 ==== | ||
| Arduino Library Managerから U8g2 をインストールしてから,以下のコードを実行 | Arduino Library Managerから U8g2 をインストールしてから,以下のコードを実行 | ||
| - | < | + | < |
| #include < | #include < | ||
| #include < | #include < | ||
| 行 293: | 行 293: | ||
| </ | </ | ||
| ==== 6. Light ==== | ==== 6. Light ==== | ||
| + | < | ||
| + | void setup() | ||
| + | { | ||
| + | Serial.begin(9600); | ||
| + | } | ||
| + | void loop() { | ||
| + | int a = analogRead(6); | ||
| + | Serial.println(a); | ||
| + | delay(33); | ||
| + | } | ||
| + | </ | ||
| ==== 7. Sound ==== | ==== 7. Sound ==== | ||
| + | < | ||
| + | void setup() | ||
| + | { | ||
| + | Serial.begin(9600); | ||
| + | } | ||
| + | void loop() { | ||
| + | int a = analogRead(2); | ||
| + | Serial.println(a); | ||
| + | delay(33); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | === FFT === | ||
| + | < | ||
| + | #include < | ||
| + | |||
| + | #define SAMPLES 64 // サンプル数(2の累乗数) | ||
| + | #define SAMPLING_FREQUENCY 1000 // サンプリング周波数 | ||
| + | |||
| + | |||
| + | unsigned int sampling_period_us; | ||
| + | unsigned long microseconds; | ||
| + | |||
| + | double vReal[SAMPLES]; | ||
| + | double vImag[SAMPLES]; | ||
| + | |||
| + | arduinoFFT FFT = arduinoFFT(); | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(9600); | ||
| + | sampling_period_us = round(1000000*(1.0/ | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | /* サンプリング */ | ||
| + | for(int i=0; i< | ||
| + | microseconds = micros(); | ||
| + | vReal[i] = analogRead(2); | ||
| + | vImag[i] = 0; | ||
| + | // 次のサンプリング時間まで待つ | ||
| + | while(micros() - microseconds < sampling_period_us){ | ||
| + | // wait | ||
| + | } | ||
| + | } | ||
| + | |||
| + | /* FFT */ | ||
| + | FFT.Windowing(vReal, | ||
| + | FFT.Compute(vReal, | ||
| + | FFT.ComplexToMagnitude(vReal, | ||
| + | | ||
| + | double peak = FFT.MajorPeak(vReal, | ||
| + | |||
| + | /* 結果を出力 */ | ||
| + | Serial.println(peak); | ||
| + | |||
| + | // delay(1000); | ||
| + | } | ||
| + | |||
| + | </ | ||
| ==== 8. Temperature & Humidity Sensor ==== | ==== 8. Temperature & Humidity Sensor ==== | ||
| + | Grove Temperature And Humidity Sensor | ||
| + | < | ||
| + | // | ||
| + | #include " | ||
| + | #include < | ||
| + | #include < | ||
| + | #define DHTPIN 3 // what pin we're connected to | ||
| + | #define DHTTYPE DHT11 // DHT 11 | ||
| + | DHT dht(DHTPIN, DHTTYPE); | ||
| + | |||
| + | U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/* reset=*/ U8X8_PIN_NONE); | ||
| + | |||
| + | void setup(void) { | ||
| + | Serial.begin(9600); | ||
| + | Serial.println(" | ||
| + | dht.begin(); | ||
| + | u8x8.begin(); | ||
| + | u8x8.setPowerSave(0); | ||
| + | u8x8.setFlipMode(1); | ||
| + | } | ||
| + | |||
| + | void loop(void) { | ||
| + | |||
| + | float temp, humi; | ||
| + | temp = dht.readTemperature(); | ||
| + | humi = dht.readHumidity(); | ||
| + | | ||
| + | u8x8.setFont(u8x8_font_chroma48medium8_r); | ||
| + | u8x8.setCursor(0, | ||
| + | u8x8.print(" | ||
| + | u8x8.print(temp); | ||
| + | u8x8.print(" | ||
| + | u8x8.setCursor(0, | ||
| + | u8x8.print(" | ||
| + | u8x8.print(humi); | ||
| + | u8x8.print(" | ||
| + | u8x8.refreshDisplay(); | ||
| + | delay(200); | ||
| + | } | ||
| + | </ | ||
| ==== 9. Air Pressure Sensor ==== | ==== 9. Air Pressure Sensor ==== | ||
| + | Barometer Sensor BMP280 を追加する | ||
| + | < | ||
| + | //Air pressure detection | ||
| + | #include " | ||
| + | #include < | ||
| + | BMP280 bmp280; | ||
| + | |||
| + | void setup() { | ||
| + | Serial.begin(9600); | ||
| + | if (!bmp280.init()) { | ||
| + | Serial.println(" | ||
| + | } | ||
| + | } | ||
| + | |||
| + | void loop() { | ||
| + | |||
| + | float pressure; | ||
| + | |||
| + | //get and print temperatures | ||
| + | Serial.print(" | ||
| + | Serial.print(bmp280.getTemperature()); | ||
| + | Serial.println(" | ||
| + | |||
| + | //get and print atmospheric pressure data | ||
| + | Serial.print(" | ||
| + | Serial.print(pressure = bmp280.getPressure()); | ||
| + | Serial.println(" | ||
| + | |||
| + | //get and print altitude data | ||
| + | Serial.print(" | ||
| + | Serial.print(bmp280.calcAltitude(pressure)); | ||
| + | Serial.println(" | ||
| + | |||
| + | Serial.println(" | ||
| + | |||
| + | delay(1000); | ||
| + | } | ||
| + | </ | ||
| ==== 10. 3-Axis Accelerator ==== | ==== 10. 3-Axis Accelerator ==== | ||
| + | grove-3-axis-digital-accelerometer-2g-to-16g を追加 | ||
| + | < | ||
| + | //Gravity Acceleration | ||
| + | #include " | ||
| + | #ifdef SOFTWAREWIRE | ||
| + | #include < | ||
| + | SoftwareWire myWire(3, 2); | ||
| + | LIS3DHTR< | ||
| + | #define WIRE myWire | ||
| + | #else | ||
| + | #include < | ||
| + | LIS3DHTR< | ||
| + | #define WIRE Wire | ||
| + | #endif | ||
| + | void setup() { | ||
| + | Serial.begin(9600); | ||
| + | while (!Serial) {}; | ||
| + | LIS.begin(WIRE, | ||
| + | delay(100); | ||
| + | LIS.setOutputDataRate(LIS3DHTR_DATARATE_50HZ); | ||
| + | } | ||
| + | void loop() { | ||
| + | if (!LIS) { | ||
| + | Serial.println(" | ||
| + | while (1); | ||
| + | return; | ||
| + | } | ||
| + | //3 axis | ||
| + | Serial.print(" | ||
| + | Serial.print(" | ||
| + | Serial.print(" | ||
| + | |||
| + | delay(500); | ||
| + | } | ||
| + | </ | ||