Содержание

Электронное приложение к набору «IO.KIT Базовый»

На этой странице ты найдёшь все нужные материалы для сборки мини-проектов из базового набора IO.KIT:

Обрати внимание

IO.KIT Базовый понадобится для сборки всех дополнений IO.KIT.

Проекты

Прежде чем приступать к экспериментам, нужно подготовить свой компьютер:

Драйвер чипа CH340

Установи драйвер CH340 для Windows или Linux, чтобы твой компьютер мог корректно распознать и прошить плату Iskra Nano.

№1. Маячок

Blink.ino
  1. // Даём понятное имя светодиоду на пине 5
  2. constexpr int LED_PIN = 5;
  3.  
  4. void setup() {
  5. // Настраиваем пин со светодиодом в режим выхода
  6. pinMode(LED_PIN, OUTPUT);
  7. }
  8.  
  9. void loop() {
  10. // Зажигаем светодиод
  11. digitalWrite(LED_PIN, HIGH);
  12. // Ждём 500 мс
  13. delay(500);
  14. // Гасим светодиод
  15. digitalWrite(LED_PIN, LOW);
  16. // Ждём 500 мс
  17. delay(500);
  18. }

№2. Дыхание света

LedBrightness.ino
  1. // Даём понятное имя светодиоду на пине 5
  2. constexpr int LED_PIN = 5;
  3.  
  4. void setup() {
  5. // Настраиваем пин со светодиодом в режим выхода
  6. pinMode(LED_PIN, OUTPUT);
  7. }
  8.  
  9. void loop() {
  10. // Создаём цикл для перебора всех значений от 0 до 255
  11. for (int brightness = 0; brightness <= 255; brightness++) {
  12. // Выдаём на светодиод ШИМ-сигнал
  13. analogWrite(LED_PIN, brightness);
  14. // Ждём 10 мс
  15. delay(10);
  16. }
  17. }

№3. Детектор нажатий

ButtonConsole.ino
  1. // Подключаем библиотеку для работы с кнопкой
  2. #include <TroykaButton.h>
  3.  
  4. // Создаём объект кнопки на пине 2
  5. TroykaButton button(2);
  6.  
  7. void setup() {
  8. // Открываем монитор Serial-порта
  9. Serial.begin(9600);
  10. // Инициализируем кнопку
  11. button.begin();
  12. }
  13.  
  14. void loop() {
  15. // Считываем данные с кнопки
  16. button.read();
  17. // Определяем нажатие кнопки
  18. if (button.justPressed()) {
  19. // Печатаем фиксацию нажатия в консоль
  20. Serial.println("Key was just pressed");
  21. }
  22. }

№4. Фонарик

SwitchLight.ino
  1. // Подключаем библиотеку для работы с кнопкой
  2. #include <TroykaButton.h>
  3.  
  4. // Даём понятное имя светодиоду на пине 5
  5. constexpr int LED_PIN = 5;
  6.  
  7. // Создаём объект кнопки на пине 2
  8. TroykaButton button(2);
  9.  
  10. // Создаём переменную для хранения состояния светодиода
  11. bool state = false;
  12.  
  13. void setup() {
  14. // Открываем монитор Serial-порта
  15. Serial.begin(9600);
  16. // Инициализируем кнопку
  17. button.begin();
  18. // Настраиваем пин со светодиодом в режим выхода
  19. pinMode(LED_PIN, OUTPUT);
  20. }
  21.  
  22. void loop() {
  23. // Считываем данные с кнопки
  24. button.read();
  25. // Определяем нажатие кнопки
  26. if (button.justPressed()) {
  27. // Инвертируем состояние светодиода
  28. state = !state;
  29. digitalWrite(LED_PIN, state);
  30. }
  31. }

№5. Трекинг поворота

PotConsole.ino
  1. // Даём понятное имя потенциометру на пине A2
  2. constexpr int POT_PIN = A2;
  3.  
  4. void setup() {
  5. // Открываем монитор Serial-порта
  6. Serial.begin(9600);
  7. // Настраиваем пин с потенциометром в режим входа
  8. pinMode(POT_PIN, INPUT);
  9. }
  10.  
  11. void loop() {
  12. // Считываем аналоговый сигнал с потенциометра
  13. int rotation = analogRead(POT_PIN);
  14. // Преобразуем диапазон значений с потенциометра [0;1023]
  15. // в процентный диапазон значений [0;100]
  16. int percent = map(rotation, 0, 1023, 0, 100);
  17. // Выводим результат в консоль
  18. Serial.print("Value = ");
  19. Serial.println(percent);
  20. }

№6. Диммер

Dimmer.ino
  1. // Даём понятное имя светодиоду на пине 5
  2. constexpr int LED_PIN = 5;
  3. // Даём понятное имя потенциометру на пине A2
  4. constexpr int POT_PIN = A2;
  5.  
  6. void setup() {
  7. // Настраиваем пин со светодиодом в режим выхода
  8. pinMode(LED_PIN, OUTPUT);
  9. // Настраиваем пин с потенциометром в режим входа
  10. pinMode(POT_PIN, INPUT);
  11. }
  12.  
  13. void loop() {
  14. // Считываем аналоговый сигнал с потенциометра
  15. int rotation = analogRead(POT_PIN);
  16. // Преобразуем диапазон значений с потенциометра [0;1023]
  17. // в диапазон значений для светодиода [0;255]
  18. int brightness = map(rotation, 0, 1023, 0, 255);
  19. // Выдаём результат на светодиод
  20. analogWrite(LED_PIN, brightness);
  21. }

№7. Синтезатор

FrequencyRange.ino
  1. // Даём понятное имя пищалке на пине 12
  2. constexpr int BUZZER_PIN = 12;
  3. // Даём понятное имя потенциометру на пине A2
  4. constexpr int POT_PIN = A2;
  5.  
  6. void setup() {
  7. // Настраиваем пин с пищалкой в режим выхода
  8. pinMode(BUZZER_PIN, OUTPUT);
  9. // Настраиваем пин с потенциометром в режим входа
  10. pinMode(POT_PIN, INPUT);
  11. }
  12.  
  13. void loop() {
  14. // Считываем аналоговый сигнал с потенциометра
  15. int rotation = analogRead(POT_PIN);
  16. // Преобразуем диапазон значений с потенциометра [0;1023]
  17. // в диапазон значений для зуммера [20;20000]
  18. int freq = map(rotation, 0, 1023, 20, 20000);
  19. // Заставляем пин с пищалкой звучать на высчитанной частоте
  20. tone(BUZZER_PIN, freq);
  21. }

№8. Плеер

PlayMusic.ino
  1. // Подключаем библиотеку для работы с мелодиями в формате RTTTL
  2. #include <anyrtttl.h>
  3. // Подключаем библиотеку для работы с кнопкой
  4. #include <TroykaButton.h>
  5.  
  6. // Даём понятное имя пищалке на пине 12
  7. constexpr uint8_t BUZZER_PIN = 12;
  8.  
  9. // Создаём объект кнопки на пине 2
  10. TroykaButton button(2);
  11.  
  12. // Мелодия «Имперский марш» в формате RTTTL
  13. const char* imperMarch = "imperMarch:d=8,o=5,b=95:"
  14. "4a4,4a4,4a4,f.4,16c,4a4,f.4,16c,"
  15. "2a4,4e,4e,4e,f.,16c,4g#4,f.4,"
  16. "16c,2a4,4a,a.4,16a4,4a,g#.,16g,"
  17. "16f#,16e,f,p,a#4,4d#,d.,16c#,16c,"
  18. "16b4,c,p,f4,4g#4,f.4,16a4,4c,"
  19. "a.4,16c,2e,4a,a.4,16a4,4a,g#.,"
  20. "16g,16f#,16e,f,p,a#4,4d#,d.,"
  21. "16c#,16c,16b4,c,p,f4,4g#4,f.4,"
  22. "16c,4a4,f.4,16c,2a4";
  23.  
  24. // Мелодия «Марио» в формате RTTTL
  25. const char* marioBroth = "marioBroth:d=4,o=5,b=100:"
  26. "16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,"
  27. "8g,8p,8c6,16p,8g,16p,8e,16p,"
  28. "8a,8b,16a#,8a,16g.,16e6,16g6,8a6,"
  29. "16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,"
  30. "16p,8g,16p,8e,16p,8a,8b,16a#,"
  31. "8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,"
  32. "16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,"
  33. "16p,16e6,16p,16g#,16a,16c6,16p,16a,"
  34. "16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,"
  35. "16e6,16p,16c7,16p,16c7,16c7,p,16g6,"
  36. "16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,"
  37. "16c6,16p,16a,16c6,16d6,8p,16d#6,8p,"
  38. "16d6,8p,16c6";
  39.  
  40. // Мелодия «Миссия невыполнима» в формате RTTTL
  41. const char* missionImp = "missionImp:d=16,o=6,b=95:"
  42. "32d,32d#,32d,32d#,32d,32d#,32d,32d#,"
  43. "32d,32d,32d#,32e,32f,32f#,32g,g,8p,"
  44. "g,8p,a#,p,c7,p,g,8p,"
  45. "g,8p,f,p,f#,p,g,8p,"
  46. "g,8p,a#,p,c7,p,g,8p,"
  47. "g,8p,f,p,f#,p,a#,g,"
  48. "2d,32p,a#,g,2c#,32p,a#,g,"
  49. "2c,a#5,8c,2p,32p,a#5,g5,2f#,"
  50. "32p,a#5,g5,2f,32p,a#5,g5,2e,"
  51. "d#,8d";
  52.  
  53. void setup() {
  54. // Инициализируем кнопку
  55. button.begin();
  56. // Настраиваем пин с пищалкой в режим выхода
  57. pinMode(BUZZER_PIN, OUTPUT);
  58. }
  59.  
  60. void loop() {
  61. // Считываем данные с кнопки
  62. button.read();
  63. // Определяем нажатие кнопки
  64. if (button.justPressed()) {
  65. // Запускаем мелодию
  66. anyrtttl::blocking::play(BUZZER_PIN, imperMarch);
  67. }
  68. }

№9. Плеер со светомузыкой

PlayMusicLight.ino
  1. // Подключаем библиотеку для работы с мелодиями в формате RTTTL
  2. #include <anyrtttl.h>
  3. // Подключаем библиотеку для работы с кнопкой
  4. #include <TroykaButton.h>
  5.  
  6. // Даём понятное имя пищалке на пине 12
  7. constexpr uint8_t BUZZER_PIN = 12;
  8. // Даём понятное имя светодиоду на пине 5
  9. constexpr uint8_t LED_PIN = 5;
  10.  
  11. // Создаём объект кнопки на пине 2
  12. TroykaButton button(2);
  13.  
  14. // Мелодия «Имперский марш» в формате RTTTL
  15. const char* imperM = "imperMarch:d=8,o=5,b=95:"
  16. "4a4,4a4,4a4,f.4,16c,4a4,f.4,16c,"
  17. "2a4,4e,4e,4e,f.,16c,4g#4,f.4,"
  18. "16c,2a4,4a,a.4,16a4,4a,g#.,16g,"
  19. "16f#,16e,f,p,a#4,4d#,d.,16c#,16c,"
  20. "16b4,c,p,f4,4g#4,f.4,16a4,4c,"
  21. "a.4,16c,2e,4a,a.4,16a4,4a,g#.,"
  22. "16g,16f#,16e,f,p,a#4,4d#,d.,"
  23. "16c#,16c,16b4,c,p,f4,4g#4,f.4,"
  24. "16c,4a4,f.4,16c,2a4";
  25.  
  26. // Мелодия «Марио» в формате RTTTL
  27. const char* marioB = "marioBroth:d=4,o=5,b=100:"
  28. "16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,"
  29. "8g,8p,8c6,16p,8g,16p,8e,16p,"
  30. "8a,8b,16a#,8a,16g.,16e6,16g6,8a6,"
  31. "16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,"
  32. "16p,8g,16p,8e,16p,8a,8b,16a#,"
  33. "8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,"
  34. "16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,"
  35. "16p,16e6,16p,16g#,16a,16c6,16p,16a,"
  36. "16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,"
  37. "16e6,16p,16c7,16p,16c7,16c7,p,16g6,"
  38. "16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,"
  39. "16c6,16p,16a,16c6,16d6,8p,16d#6,8p,"
  40. "16d6,8p,16c6";
  41.  
  42. // Мелодия «Миссия невыполнима» в формате RTTTL
  43. const char* misImp = "missionImpossible:d=16,o=6,b=95:"
  44. "32d,32d#,32d,32d#,32d,32d#,32d,32d#,"
  45. "32d,32d,32d#,32e,32f,32f#,32g,g,8p,"
  46. "g,8p,a#,p,c7,p,g,8p,"
  47. "g,8p,f,p,f#,p,g,8p,"
  48. "g,8p,a#,p,c7,p,g,8p,"
  49. "g,8p,f,p,f#,p,a#,g,"
  50. "2d,32p,a#,g,2c#,32p,a#,g,"
  51. "2c,a#5,8c,2p,32p,a#5,g5,2f#,"
  52. "32p,a#5,g5,2f,32p,a#5,g5,2e,"
  53. "d#,8d";
  54.  
  55. // Функция переопределения мелодии RTTTL в функцию tone
  56. // В нашем проекте не используется
  57. // void customTone(byte pin, uint16_t frequency, uint32_t duration) {
  58. // tone(pin, frequency, duration);
  59. // }
  60.  
  61. // Функция переопределения мелодии RTTTL в функцию noTone
  62. // В нашем проекте не используется
  63. // void customNoTone(byte pin) {
  64. // noTone(pin);
  65. // }
  66.  
  67. // Функция переопределения мелодии RTTTL в функцию delay
  68. void customDelay(uint32_t duration) {
  69. // Соотношения задержки свечения от общей длительности ноты
  70. // Диапазон от 0.00 до 1.00
  71. float ledDurationRatio = 0.25;
  72. digitalWrite(LED_PIN, HIGH);
  73. delay(duration * ledDurationRatio);
  74. digitalWrite(LED_PIN, LOW);
  75. delay(duration * (1 - ledDurationRatio));
  76. }
  77.  
  78. void setup() {
  79. // Инициализируем кнопку
  80. button.begin();
  81. // Настраиваем пин с пищалкой в режим выхода
  82. pinMode(BUZZER_PIN, OUTPUT);
  83. // Настраиваем пин со светодиодом в режим выхода
  84. pinMode(LED_PIN, OUTPUT);
  85. // Переопределяем мелодию RTTTL в кастомную функцию delay
  86. anyrtttl::setDelayFunction(&customDelay);
  87. // Если понадобится, можно передать также свои определения функций
  88. // tone и noTone. Но для нашего проекта это не нужно.
  89. //anyrtttl::setToneFunction(&customTone);
  90. //anyrtttl::setNoToneFunction(&customNoTone);
  91. }
  92.  
  93. void loop() {
  94. // Считываем данные с кнопки
  95. button.read();
  96. // Определяем нажатие кнопки
  97. if (button.justPressed()) {
  98. // Запускаем мелодию
  99. anyrtttl::blocking::play(BUZZER_PIN, imperM);
  100. }
  101. }

Ресурсы

Софт

Библиотеки