arduino examples
This commit is contained in:
7
Blink/.vscode/arduino.json
vendored
Normal file
7
Blink/.vscode/arduino.json
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"sketch": "Blink.ino",
|
||||
"board": "arduino:avr:nano",
|
||||
"configuration": "cpu=atmega328",
|
||||
"port": "/dev/ttyUSB0",
|
||||
"programmer": "AVRISP mkII"
|
||||
}
|
||||
21
Blink/.vscode/c_cpp_properties.json
vendored
Normal file
21
Blink/.vscode/c_cpp_properties.json
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Arduino",
|
||||
"includePath": [
|
||||
"/snap/arduino/current/tools/**",
|
||||
"/snap/arduino/current/hardware/arduino/avr/**",
|
||||
"${workspaceFolder}/**"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "/usr/bin/cpp",
|
||||
"cStandard": "c11",
|
||||
"cppStandard": "c++17",
|
||||
"intelliSenseMode": "gcc-x64",
|
||||
"forcedInclude": [
|
||||
"/snap/arduino/current/hardware/arduino/avr/cores/arduino/Arduino.h"
|
||||
]
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
17
Blink/Blink.ino
Normal file
17
Blink/Blink.ino
Normal file
@@ -0,0 +1,17 @@
|
||||
#include <Arduino.h>
|
||||
|
||||
// the setup function runs once when you press reset or power the board
|
||||
void setup()
|
||||
{
|
||||
// initialize digital pin LED_BUILTIN as an output.
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
}
|
||||
|
||||
// the loop function runs over and over again forever
|
||||
void loop()
|
||||
{
|
||||
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
delay(2000); // wait for a second
|
||||
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
|
||||
delay(1000); // wait for a second
|
||||
}
|
||||
83
I2C_Scanner/I2C_Scanner.ino
Normal file
83
I2C_Scanner/I2C_Scanner.ino
Normal file
@@ -0,0 +1,83 @@
|
||||
// --------------------------------------
|
||||
// i2c_scanner
|
||||
//
|
||||
// Version 1
|
||||
// This program (or code that looks like it)
|
||||
// can be found in many places.
|
||||
// For example on the Arduino.cc forum.
|
||||
// The original author is not know.
|
||||
// Version 2, Juni 2012, Using Arduino 1.0.1
|
||||
// Adapted to be as simple as possible by Arduino.cc user Krodal
|
||||
// Version 3, Feb 26 2013
|
||||
// V3 by louarnold
|
||||
// Version 4, March 3, 2013, Using Arduino 1.0.3
|
||||
// by Arduino.cc user Krodal.
|
||||
// Changes by louarnold removed.
|
||||
// Scanning addresses changed from 0...127 to 1...119,
|
||||
// according to the i2c scanner by Nick Gammon
|
||||
// http://www.gammon.com.au/forum/?id=10896
|
||||
// Version 5, March 28, 2013
|
||||
// As version 4, but address scans now to 127.
|
||||
// A sensor seems to use address 120.
|
||||
// Version 6, November 27, 2015.
|
||||
// Added waiting for the Leonardo serial communication.
|
||||
//
|
||||
//
|
||||
// This sketch tests the standard 7-bit addresses
|
||||
// Devices with higher bit address might not be seen properly.
|
||||
//
|
||||
|
||||
#include <Wire.h>
|
||||
|
||||
|
||||
void setup()
|
||||
{
|
||||
Wire.begin();
|
||||
|
||||
Serial.begin(9600);
|
||||
while (!Serial); // Leonardo: wait for serial monitor
|
||||
Serial.println("\nI2C Scanner");
|
||||
}
|
||||
|
||||
|
||||
void loop()
|
||||
{
|
||||
byte error, address;
|
||||
int nDevices;
|
||||
|
||||
Serial.println("Scanning...");
|
||||
|
||||
nDevices = 0;
|
||||
for(address = 1; address < 127; address++ )
|
||||
{
|
||||
// The i2c_scanner uses the return value of
|
||||
// the Write.endTransmisstion to see if
|
||||
// a device did acknowledge to the address.
|
||||
Wire.beginTransmission(address);
|
||||
error = Wire.endTransmission();
|
||||
|
||||
if (error == 0)
|
||||
{
|
||||
Serial.print("I2C device found at address 0x");
|
||||
if (address<16)
|
||||
Serial.print("0");
|
||||
Serial.print(address,HEX);
|
||||
Serial.println(" !");
|
||||
|
||||
nDevices++;
|
||||
}
|
||||
else if (error==4)
|
||||
{
|
||||
Serial.print("Unknown error at address 0x");
|
||||
if (address<16)
|
||||
Serial.print("0");
|
||||
Serial.println(address,HEX);
|
||||
}
|
||||
}
|
||||
if (nDevices == 0)
|
||||
Serial.println("No I2C devices found\n");
|
||||
else
|
||||
Serial.println("done\n");
|
||||
|
||||
delay(5000); // wait 5 seconds for next scan
|
||||
}
|
||||
BIN
blink_and_serial/.vscode/ipch/1cc73c488439ca3e/mmap_address.bin
vendored
Normal file
BIN
blink_and_serial/.vscode/ipch/1cc73c488439ca3e/mmap_address.bin
vendored
Normal file
Binary file not shown.
70
blink_and_serial/blink_and_serial.ino
Normal file
70
blink_and_serial/blink_and_serial.ino
Normal file
@@ -0,0 +1,70 @@
|
||||
const unsigned int TABLE[] = {
|
||||
0X0000, 0XC0C1, 0XC181, 0X0140, 0XC301, 0X03C0, 0X0280, 0XC241,
|
||||
0XC601, 0X06C0, 0X0780, 0XC741, 0X0500, 0XC5C1, 0XC481, 0X0440,
|
||||
0XCC01, 0X0CC0, 0X0D80, 0XCD41, 0X0F00, 0XCFC1, 0XCE81, 0X0E40,
|
||||
0X0A00, 0XCAC1, 0XCB81, 0X0B40, 0XC901, 0X09C0, 0X0880, 0XC841,
|
||||
0XD801, 0X18C0, 0X1980, 0XD941, 0X1B00, 0XDBC1, 0XDA81, 0X1A40,
|
||||
0X1E00, 0XDEC1, 0XDF81, 0X1F40, 0XDD01, 0X1DC0, 0X1C80, 0XDC41,
|
||||
0X1400, 0XD4C1, 0XD581, 0X1540, 0XD701, 0X17C0, 0X1680, 0XD641,
|
||||
0XD201, 0X12C0, 0X1380, 0XD341, 0X1100, 0XD1C1, 0XD081, 0X1040,
|
||||
0XF001, 0X30C0, 0X3180, 0XF141, 0X3300, 0XF3C1, 0XF281, 0X3240,
|
||||
0X3600, 0XF6C1, 0XF781, 0X3740, 0XF501, 0X35C0, 0X3480, 0XF441,
|
||||
0X3C00, 0XFCC1, 0XFD81, 0X3D40, 0XFF01, 0X3FC0, 0X3E80, 0XFE41,
|
||||
0XFA01, 0X3AC0, 0X3B80, 0XFB41, 0X3900, 0XF9C1, 0XF881, 0X3840,
|
||||
0X2800, 0XE8C1, 0XE981, 0X2940, 0XEB01, 0X2BC0, 0X2A80, 0XEA41,
|
||||
0XEE01, 0X2EC0, 0X2F80, 0XEF41, 0X2D00, 0XEDC1, 0XEC81, 0X2C40,
|
||||
0XE401, 0X24C0, 0X2580, 0XE541, 0X2700, 0XE7C1, 0XE681, 0X2640,
|
||||
0X2200, 0XE2C1, 0XE381, 0X2340, 0XE101, 0X21C0, 0X2080, 0XE041,
|
||||
0XA001, 0X60C0, 0X6180, 0XA141, 0X6300, 0XA3C1, 0XA281, 0X6240,
|
||||
0X6600, 0XA6C1, 0XA781, 0X6740, 0XA501, 0X65C0, 0X6480, 0XA441,
|
||||
0X6C00, 0XACC1, 0XAD81, 0X6D40, 0XAF01, 0X6FC0, 0X6E80, 0XAE41,
|
||||
0XAA01, 0X6AC0, 0X6B80, 0XAB41, 0X6900, 0XA9C1, 0XA881, 0X6840,
|
||||
0X7800, 0XB8C1, 0XB981, 0X7940, 0XBB01, 0X7BC0, 0X7A80, 0XBA41,
|
||||
0XBE01, 0X7EC0, 0X7F80, 0XBF41, 0X7D00, 0XBDC1, 0XBC81, 0X7C40,
|
||||
0XB401, 0X74C0, 0X7580, 0XB541, 0X7700, 0XB7C1, 0XB681, 0X7640,
|
||||
0X7200, 0XB2C1, 0XB381, 0X7340, 0XB101, 0X71C0, 0X7080, 0XB041,
|
||||
0X5000, 0X90C1, 0X9181, 0X5140, 0X9301, 0X53C0, 0X5280, 0X9241,
|
||||
0X9601, 0X56C0, 0X5780, 0X9741, 0X5500, 0X95C1, 0X9481, 0X5440,
|
||||
0X9C01, 0X5CC0, 0X5D80, 0X9D41, 0X5F00, 0X9FC1, 0X9E81, 0X5E40,
|
||||
0X5A00, 0X9AC1, 0X9B81, 0X5B40, 0X9901, 0X59C0, 0X5880, 0X9841,
|
||||
0X8801, 0X48C0, 0X4980, 0X8941, 0X4B00, 0X8BC1, 0X8A81, 0X4A40,
|
||||
0X4E00, 0X8EC1, 0X8F81, 0X4F40, 0X8D01, 0X4DC0, 0X4C80, 0X8C41,
|
||||
0X4400, 0X84C1, 0X8581, 0X4540, 0X8701, 0X47C0, 0X4680, 0X8641,
|
||||
0X8201, 0X42C0, 0X4380, 0X8341, 0X4100, 0X81C1, 0X8081, 0X4040
|
||||
};
|
||||
|
||||
// the setup function runs once when you press reset or power the board
|
||||
void setup() {
|
||||
Serial.begin(9600);
|
||||
// initialize digital pin LED_BUILTIN as an output.
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
|
||||
}
|
||||
|
||||
// the loop function runs over and over again forever
|
||||
void loop() {
|
||||
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
|
||||
delay(500); // wait for a second
|
||||
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
|
||||
delay(1000); // wait for a second
|
||||
byte data[] = {0x7e,0x01,0x01};
|
||||
unsigned int r = crc(data, 3);
|
||||
Serial.println(r, HEX);
|
||||
//Serial.println(highByte(r), HEX);
|
||||
//Serial.println(lowByte(r), HEX);
|
||||
}
|
||||
|
||||
unsigned int crc (byte* nData, unsigned int nLength){
|
||||
byte nTemp;
|
||||
unsigned int wCRCWord = 0xFFFF;
|
||||
|
||||
while (nLength--)
|
||||
{
|
||||
nTemp = *nData++ ^ wCRCWord;
|
||||
wCRCWord >>= 8;
|
||||
wCRCWord ^= TABLE[nTemp];
|
||||
}
|
||||
return wCRCWord;
|
||||
}
|
||||
|
||||
|
||||
32
buzz/buzz.ino
Normal file
32
buzz/buzz.ino
Normal file
@@ -0,0 +1,32 @@
|
||||
|
||||
#include "muze.h"
|
||||
|
||||
#define PIN_BUZZ 3
|
||||
|
||||
unsigned long last_time_millis, current_time_millis;
|
||||
|
||||
Muze muze = Muze(PIN_BUZZ);
|
||||
|
||||
void setup() {
|
||||
|
||||
pinMode(LED_BUILTIN, OUTPUT);
|
||||
pinMode(PIN_BUZZ, OUTPUT);
|
||||
|
||||
Serial.begin(115200);
|
||||
last_time_millis = millis();
|
||||
|
||||
muze.setScore(GREEN_SLEEVES);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
current_time_millis = millis();
|
||||
if (current_time_millis < last_time_millis) {
|
||||
last_time_millis = current_time_millis;
|
||||
return;
|
||||
}
|
||||
|
||||
muze.play();
|
||||
|
||||
last_time_millis = current_time_millis;
|
||||
}
|
||||
|
||||
25
buzz/datetime.cpp
Normal file
25
buzz/datetime.cpp
Normal file
@@ -0,0 +1,25 @@
|
||||
#include "Arduino.h"
|
||||
#include "datetime.h"
|
||||
|
||||
unsigned long DateTime::get(){
|
||||
return _set_time + _elapsed_ms_after_set_time/1000;
|
||||
}
|
||||
|
||||
void DateTime::set(unsigned long sec_since_epoch){
|
||||
_set_time = sec_since_epoch;
|
||||
_elapsed_ms_after_set_time = 0;
|
||||
}
|
||||
|
||||
void DateTime::update(){
|
||||
_current_ts = millis();
|
||||
if (_current_ts < _last_ts) {
|
||||
_set_time = _set_time + _elapsed_ms_after_set_time/1000;
|
||||
_elapsed_ms_after_set_time = _current_ts + (MAX_UL - _last_ts);
|
||||
|
||||
} else {
|
||||
_elapsed_ms_after_set_time += _current_ts;
|
||||
|
||||
}
|
||||
|
||||
_last_ts = _current_ts;
|
||||
}
|
||||
32
buzz/datetime.h
Normal file
32
buzz/datetime.h
Normal file
@@ -0,0 +1,32 @@
|
||||
#ifndef Elex_DateTime_lib
|
||||
#define Elex_DateTime_lib
|
||||
|
||||
#include "Arduino.h"
|
||||
|
||||
#define MAX_UL 0xfffffffful
|
||||
|
||||
class DateTime {
|
||||
public:
|
||||
/*
|
||||
* 매 루프마다 반복 실행해 줄 것.
|
||||
*/
|
||||
void update();
|
||||
/**
|
||||
* 현재 시간 설정 (초)
|
||||
* 기준 시간은 알아서 정할 것.
|
||||
*/
|
||||
void set(unsigned long sec_since_epoch);
|
||||
/*
|
||||
* 현재 시간 (초)
|
||||
*/
|
||||
unsigned long get();
|
||||
private:
|
||||
// 시간 값이 설정된 기준 시간. 오버플로가 발생한 때에도 업데이트된다.
|
||||
unsigned long _set_time;
|
||||
// 기준 시간 이후 경과한 시간 (밀리초)
|
||||
unsigned long _elapsed_ms_after_set_time;
|
||||
// 매 루프마다 업데이트됨.
|
||||
unsigned long _current_ts, _last_ts;
|
||||
};
|
||||
|
||||
#endif
|
||||
101
buzz/muze.cpp
Normal file
101
buzz/muze.cpp
Normal file
@@ -0,0 +1,101 @@
|
||||
#include "Arduino.h"
|
||||
#include "muze.h"
|
||||
|
||||
#define GAP_BETWEEN_NOTES 5
|
||||
|
||||
Melody _green_sleeves[] = {
|
||||
{NOTE_G5, NOTE_LEN_8},
|
||||
{NOTE_B5_F, NOTE_LEN_4}, {NOTE_C6, NOTE_LEN_8}, {NOTE_D6, NOTE_LEN_8_DOT}, {NOTE_E6, NOTE_LEN_16}, {NOTE_D6, NOTE_LEN_8},
|
||||
{NOTE_C6, NOTE_LEN_4}, {NOTE_A5, NOTE_LEN_8}, {NOTE_F5, NOTE_LEN_8_DOT}, {NOTE_G5, NOTE_LEN_16}, {NOTE_A5, NOTE_LEN_8},
|
||||
{NOTE_B5_F, NOTE_LEN_4}, {NOTE_G5, NOTE_LEN_8}, {NOTE_G5, NOTE_LEN_8_DOT}, {NOTE_F5_S, NOTE_LEN_16}, {NOTE_G5, NOTE_LEN_8},
|
||||
{NOTE_A5, NOTE_LEN_4}, {NOTE_F5_S, NOTE_LEN_8}, {NOTE_D5, NOTE_LEN_4}, {NOTE_G5, NOTE_LEN_8},
|
||||
|
||||
{NOTE_B5_F, NOTE_LEN_4}, {NOTE_C6, NOTE_LEN_8}, {NOTE_D6, NOTE_LEN_8_DOT}, {NOTE_E6, NOTE_LEN_16}, {NOTE_D6, NOTE_LEN_8},
|
||||
{NOTE_C6, NOTE_LEN_4}, {NOTE_A5, NOTE_LEN_8}, {NOTE_F5, NOTE_LEN_8_DOT}, {NOTE_G5, NOTE_LEN_16}, {NOTE_A5, NOTE_LEN_8},
|
||||
{NOTE_B5_F, NOTE_LEN_8_DOT}, {NOTE_A5, NOTE_LEN_16}, {NOTE_G5, NOTE_LEN_8}, {NOTE_F5_S, NOTE_LEN_8_DOT}, {NOTE_E5, NOTE_LEN_16}, {NOTE_F5_S, NOTE_LEN_8},
|
||||
{NOTE_G5, NOTE_LEN_2_DOT},
|
||||
|
||||
{NOTE_F6, NOTE_LEN_4_DOT}, {NOTE_F6, NOTE_LEN_8_DOT}, {NOTE_E6, NOTE_LEN_16}, {NOTE_D6, NOTE_LEN_8},
|
||||
{NOTE_C6, NOTE_LEN_4}, {NOTE_A5, NOTE_LEN_8}, {NOTE_F5, NOTE_LEN_8_DOT}, {NOTE_G5, NOTE_LEN_16}, {NOTE_A5, NOTE_LEN_8},
|
||||
{NOTE_B5_F, NOTE_LEN_4}, {NOTE_G5, NOTE_LEN_8}, {NOTE_G5, NOTE_LEN_8_DOT}, {NOTE_F5_S, NOTE_LEN_16}, {NOTE_G5, NOTE_LEN_8},
|
||||
{NOTE_A5, NOTE_LEN_4}, {NOTE_F5_S, NOTE_LEN_8}, {NOTE_D5, NOTE_LEN_4_DOT},
|
||||
|
||||
{NOTE_F6, NOTE_LEN_4_DOT}, {NOTE_F6, NOTE_LEN_8_DOT}, {NOTE_E6, NOTE_LEN_16}, {NOTE_D6, NOTE_LEN_8},
|
||||
{NOTE_C6, NOTE_LEN_4}, {NOTE_A5, NOTE_LEN_8}, {NOTE_F5, NOTE_LEN_8_DOT}, {NOTE_G5, NOTE_LEN_16}, {NOTE_A5, NOTE_LEN_8},
|
||||
{NOTE_B5_F, NOTE_LEN_8_DOT}, {NOTE_A5, NOTE_LEN_16}, {NOTE_G5, NOTE_LEN_8}, {NOTE_F5_S, NOTE_LEN_8_DOT}, {NOTE_E5, NOTE_LEN_16}, {NOTE_F5_S, NOTE_LEN_8},
|
||||
{NOTE_G5, NOTE_LEN_2_DOT}
|
||||
};
|
||||
|
||||
Melody _minions[] = {
|
||||
{NOTE_G3, NOTE_LEN_8}, {NOTE_G3, NOTE_LEN_8}, {NOTE_G3, NOTE_LEN_4}, {NOTE_G3, NOTE_LEN_16}, {NOTE_G3, NOTE_LEN_8}, {NOTE_G3, NOTE_LEN_16}, {NOTE_G3, NOTE_LEN_4},
|
||||
{NOTE_G3, NOTE_LEN_8}, {NOTE_G3, NOTE_LEN_8}, {NOTE_G3, NOTE_LEN_4}, {NOTE_G3, NOTE_LEN_16}, {NOTE_G3, NOTE_LEN_8}, {NOTE_G3, NOTE_LEN_16}, {NOTE_A5, NOTE_LEN_8}, {NOTE_B5, NOTE_LEN_8},
|
||||
|
||||
};
|
||||
|
||||
Muze::Muze(int pin){
|
||||
pinMode(pin, OUTPUT);
|
||||
_pin = pin;
|
||||
}
|
||||
|
||||
Muze::Muze(int pin, Score score){
|
||||
pinMode(pin, OUTPUT);
|
||||
_pin = pin;
|
||||
setScore(score);
|
||||
}
|
||||
|
||||
boolean Muze::play(){
|
||||
_current_ts = millis();
|
||||
|
||||
if (_current_ts > _next_ts) {
|
||||
if (_cue < _melody_size) {
|
||||
_buzz();
|
||||
_isPlaying = true;
|
||||
} else {
|
||||
noTone(_pin);
|
||||
_isPlaying = false;
|
||||
}
|
||||
}
|
||||
return isPlaying();
|
||||
}
|
||||
|
||||
void Muze::setTempo(unsigned int tempo){
|
||||
_tempo = tempo;
|
||||
}
|
||||
|
||||
void Muze::setScore(Score score){
|
||||
switch (score){
|
||||
|
||||
case MINIONS_0:
|
||||
break;
|
||||
|
||||
case GREEN_SLEEVES:
|
||||
default:
|
||||
_melody = _green_sleeves;
|
||||
_melody_size = sizeof(_green_sleeves) / sizeof(Melody);
|
||||
_tempo = 100;
|
||||
break;
|
||||
}
|
||||
|
||||
_cue = 0;
|
||||
_next_ts = 0;
|
||||
_isPlaying = false;
|
||||
}
|
||||
|
||||
bool Muze::isPlaying(){
|
||||
return _isPlaying;
|
||||
}
|
||||
|
||||
void Muze::_buzz() {
|
||||
|
||||
long duration = _duration(_melody[_cue].len);
|
||||
tone(_pin, _melody[_cue].pitch, duration-GAP_BETWEEN_NOTES);
|
||||
_next_ts = _current_ts + duration;
|
||||
_cue ++;
|
||||
|
||||
}
|
||||
|
||||
unsigned long Muze::_duration(unsigned long len) {
|
||||
return len * 60000 / _tempo / NOTE_LEN_4;
|
||||
}
|
||||
|
||||
|
||||
209
buzz/muze.h
Normal file
209
buzz/muze.h
Normal file
@@ -0,0 +1,209 @@
|
||||
#ifndef Elex_Muze_lib
|
||||
#define Elex_Muze_lib
|
||||
|
||||
#include "Arduino.h"
|
||||
|
||||
#define NOTE_B0 31
|
||||
#define NOTE_C1 33
|
||||
#define NOTE_C1_S 35
|
||||
#define NOTE_D1_F 35
|
||||
#define NOTE_D1 37
|
||||
#define NOTE_D1_S 39
|
||||
#define NOTE_E1_S 39
|
||||
#define NOTE_E1 41
|
||||
#define NOTE_F1 44
|
||||
#define NOTE_F1_S 46
|
||||
#define NOTE_G1_F 46
|
||||
#define NOTE_G1 49
|
||||
#define NOTE_G1_S 52
|
||||
#define NOTE_A1_F 52
|
||||
#define NOTE_A1 55
|
||||
#define NOTE_A1_S 58
|
||||
#define NOTE_B1_F 58
|
||||
#define NOTE_B1 62
|
||||
#define NOTE_C2 65
|
||||
#define NOTE_C2_S 69
|
||||
#define NOTE_D2_F 69
|
||||
#define NOTE_D2 73
|
||||
#define NOTE_D2_S 78
|
||||
#define NOTE_E2_F 78
|
||||
#define NOTE_E2 82
|
||||
#define NOTE_F2 87
|
||||
#define NOTE_F2_S 93
|
||||
#define NOTE_G2_F 93
|
||||
#define NOTE_G2 98
|
||||
#define NOTE_G2_S 104
|
||||
#define NOTE_A2_F 104
|
||||
#define NOTE_A2 110
|
||||
#define NOTE_A2_S 117
|
||||
#define NOTE_B2_F 117
|
||||
#define NOTE_B2 123
|
||||
#define NOTE_C3 131
|
||||
#define NOTE_C3_S 139
|
||||
#define NOTE_D3_F 139
|
||||
#define NOTE_D3 147
|
||||
#define NOTE_D3_S 156
|
||||
#define NOTE_E3_F 156
|
||||
#define NOTE_E3 165
|
||||
#define NOTE_F3 175
|
||||
#define NOTE_F3_S 185
|
||||
#define NOTE_G3_F 185
|
||||
#define NOTE_G3 196
|
||||
#define NOTE_G3_S 208
|
||||
#define NOTE_A3_F 208
|
||||
#define NOTE_A3 220
|
||||
#define NOTE_A3_S 233
|
||||
#define NOTE_B3_F 233
|
||||
#define NOTE_B3 247
|
||||
#define NOTE_C4 262
|
||||
#define NOTE_C4_S 277
|
||||
#define NOTE_D4_F 277
|
||||
#define NOTE_D4 294
|
||||
#define NOTE_D4_S 311
|
||||
#define NOTE_E4_F 311
|
||||
#define NOTE_E4 330
|
||||
#define NOTE_F4 349
|
||||
#define NOTE_F4_S 370
|
||||
#define NOTE_G4_F 370
|
||||
#define NOTE_G4 392
|
||||
#define NOTE_G4_S 415
|
||||
#define NOTE_A4_F 415
|
||||
#define NOTE_A4 440
|
||||
#define NOTE_A4_S 466
|
||||
#define NOTE_B4_F 466
|
||||
#define NOTE_B4 494
|
||||
#define NOTE_C5 523
|
||||
#define NOTE_C5_S 554
|
||||
#define NOTE_D5_F 554
|
||||
#define NOTE_D5 587
|
||||
#define NOTE_D5_S 622
|
||||
#define NOTE_E5_F 622
|
||||
#define NOTE_E5 659
|
||||
#define NOTE_F5 698
|
||||
#define NOTE_F5_S 740
|
||||
#define NOTE_G5_F 740
|
||||
#define NOTE_G5 784
|
||||
#define NOTE_G5_S 831
|
||||
#define NOTE_A5_F 831
|
||||
#define NOTE_A5 880
|
||||
#define NOTE_A5_S 932
|
||||
#define NOTE_B5_F 932
|
||||
#define NOTE_B5 988
|
||||
#define NOTE_C6 1047
|
||||
#define NOTE_C6_S 1109
|
||||
#define NOTE_D6_F 1109
|
||||
#define NOTE_D6 1175
|
||||
#define NOTE_D6_S 1245
|
||||
#define NOTE_E6_F 1245
|
||||
#define NOTE_E6 1319
|
||||
#define NOTE_F6 1397
|
||||
#define NOTE_F6_S 1480
|
||||
#define NOTE_G6_F 1480
|
||||
#define NOTE_G6 1568
|
||||
#define NOTE_G6_S 1661
|
||||
#define NOTE_A6_F 1661
|
||||
#define NOTE_A6 1760
|
||||
#define NOTE_A6_S 1865
|
||||
#define NOTE_B6_F 1865
|
||||
#define NOTE_B6 1976
|
||||
#define NOTE_C7 2093
|
||||
#define NOTE_C7_S 2217
|
||||
#define NOTE_D7_F 2217
|
||||
#define NOTE_D7 2349
|
||||
#define NOTE_D7_S 2489
|
||||
#define NOTE_E7_F 2489
|
||||
#define NOTE_E7 2637
|
||||
#define NOTE_F7 2794
|
||||
#define NOTE_F7_S 2960
|
||||
#define NOTE_G7_F 2960
|
||||
#define NOTE_G7 3136
|
||||
#define NOTE_G7_S 3322
|
||||
#define NOTE_A7_F 3322
|
||||
#define NOTE_A7 3520
|
||||
#define NOTE_A7_S 3729
|
||||
#define NOTE_B7_F 3729
|
||||
#define NOTE_B7 3951
|
||||
#define NOTE_C8 4186
|
||||
#define NOTE_C8_S 4435
|
||||
#define NOTE_D8_F 4435
|
||||
#define NOTE_D8 4699
|
||||
#define NOTE_D8_S 4978
|
||||
|
||||
#define NOTE_REST 0
|
||||
|
||||
#define NOTE_LEN_4 720
|
||||
#define NOTE_LEN_2 1440 // NOTE_LEN_4 * 2
|
||||
#define NOTE_LEN_1 2880 // NOTE_LEN_4 * 4
|
||||
#define NOTE_LEN_8 360 // NOTE_LEN_4 / 2
|
||||
#define NOTE_LEN_16 180 // NOTE_LEN_4 / 4
|
||||
#define NOTE_LEN_32 90 // NOTE_LEN_4 / 8
|
||||
|
||||
#define NOTE_LEN_2_DOT 2160 // NOTE_LEN_2 * 1.5
|
||||
#define NOTE_LEN_4_DOT 1080 // NOTE_LEN_4 * 1.5
|
||||
#define NOTE_LEN_8_DOT 540 // NOTE_LEN_8 * 1.5
|
||||
#define NOTE_LEN_16_DOT 270 // NOTE_LEN_16 * 1.5
|
||||
#define NOTE_LEN_32_DOT 135 // NOTE_LEN_32 * 1.5
|
||||
|
||||
#define NOTE_LEN_4_TRIPLET 240 // NOTE_LEN_4 / 3
|
||||
#define NOTE_LEN_8_TRIPLET 120 // NOTE_LEN_8 / 3
|
||||
#define NOTE_LEN_16_TRIPLET 60 // NOTE_LEN_16 / 3
|
||||
#define NOTE_LEN_32_TRIPLET 30 // NOTE_LEN_32 / 3
|
||||
/*
|
||||
재생 가능한 곡 리스트
|
||||
*/
|
||||
typedef enum _Score {
|
||||
GREEN_SLEEVES = 0,
|
||||
MINIONS_0,
|
||||
} Score;
|
||||
|
||||
/*
|
||||
음의 높이와 길이
|
||||
*/
|
||||
typedef struct _Melody {
|
||||
unsigned int pitch;
|
||||
unsigned int len;
|
||||
} Melody;
|
||||
|
||||
/*
|
||||
노래하는 클래스
|
||||
*/
|
||||
class Muze {
|
||||
public:
|
||||
// 핀 번호
|
||||
Muze(int pin);
|
||||
// 핀 번호, 재생할 곡
|
||||
Muze(int pin, Score score);
|
||||
|
||||
public:
|
||||
// 메인 루프에서 호출하면 재생된다.
|
||||
boolean play();
|
||||
// 곡의 빠르기를 지정
|
||||
void setTempo(unsigned int tempo);
|
||||
// 재생할 곡을 선
|
||||
void setScore(Score score);
|
||||
// 재생 중인가?
|
||||
bool isPlaying();
|
||||
|
||||
private:
|
||||
// 핀 번호
|
||||
int _pin;
|
||||
// 음표 데이터 배열
|
||||
Melody* _melody;
|
||||
// 데이터의 크기
|
||||
unsigned int _melody_size;
|
||||
// 템포
|
||||
unsigned int _tempo = 100;
|
||||
// 데이터의 현재 재생 인덱스
|
||||
unsigned int _cue = 0;
|
||||
// 현재 시간, 다음 재생 이벤트 발생 시간
|
||||
unsigned long _current_ts = 0, _next_ts = 0;
|
||||
// 재생 중?
|
||||
bool _isPlaying;
|
||||
// 소리 발생
|
||||
void _buzz();
|
||||
// 재생 시간 계산
|
||||
unsigned long _duration(unsigned long len);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
39
voltage_check/voltage_check.ino
Normal file
39
voltage_check/voltage_check.ino
Normal file
@@ -0,0 +1,39 @@
|
||||
int result = 0;
|
||||
|
||||
void setup(){
|
||||
Serial.begin(9600);
|
||||
|
||||
}
|
||||
|
||||
long readVcc() {
|
||||
// Read 1.1V reference against AVcc
|
||||
// set the reference to Vcc and the measurement to the internal 1.1V reference
|
||||
#if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
||||
ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
|
||||
#elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
|
||||
ADMUX = _BV(MUX5) | _BV(MUX0);
|
||||
#elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
|
||||
ADMUX = _BV(MUX3) | _BV(MUX2);
|
||||
#else
|
||||
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
|
||||
#endif
|
||||
|
||||
delay(2); // Wait for Vref to settle
|
||||
ADCSRA |= _BV(ADSC); // Start conversion
|
||||
while (bit_is_set(ADCSRA,ADSC)); // measuring
|
||||
|
||||
uint8_t low = ADCL; // must read ADCL first - it then locks ADCH
|
||||
uint8_t high = ADCH; // unlocks both
|
||||
|
||||
long result = (high<<8) | low;
|
||||
|
||||
result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
|
||||
return result; // Vcc in millivolts
|
||||
}
|
||||
|
||||
void loop(){
|
||||
result = readVcc();
|
||||
Serial.println(result);
|
||||
delay(1000);
|
||||
|
||||
}
|
||||
27
watchdog_test/watchdog_test.ino
Normal file
27
watchdog_test/watchdog_test.ino
Normal file
@@ -0,0 +1,27 @@
|
||||
#include <avr/wdt.h>
|
||||
|
||||
void setup() {
|
||||
wdt_disable(); // 셋업 중에는 워치독 사용을 중지한다.
|
||||
Serial.begin(9600);
|
||||
Serial.println("setup()");
|
||||
wdt_enable(WDTO_4S);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
wdt_reset(); // 워치독 타이머를 리셋한다.
|
||||
//wdt_reset();
|
||||
unsigned long currentMillis = millis();
|
||||
Serial.println(currentMillis);
|
||||
if (currentMillis>10000) {
|
||||
|
||||
while(1){
|
||||
Serial.println("delay... ");
|
||||
delay(1000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Serial.println("loop()");
|
||||
|
||||
delay(1000);
|
||||
}
|
||||
Reference in New Issue
Block a user