Робототехника: различия между версиями
Перейти к навигации
Перейти к поиску
(не показано 9 промежуточных версий этого же участника) | |||
Строка 2: | Строка 2: | ||
== Схема 1 == | == Схема 1 == | ||
[[Файл:Схема-1.PNG|500px]] | [[Файл:Схема-1.PNG|500px]] | ||
+ | === Код === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | //Задание глобальных переменных целочисленного типа integer | ||
+ | //Присваивание переменной ledLamp (светодиод) значение выхода 12 на плате | ||
+ | int ledLamp = 12; | ||
+ | |||
+ | //Установка начальных параметров | ||
+ | void setup() | ||
+ | { | ||
+ | //Задание пина ledLamp в качестве выходного | ||
+ | pinMode(ledLamp, OUTPUT); | ||
+ | } | ||
+ | |||
+ | //Основной цикл (повторяется бесконечно) | ||
+ | void loop() | ||
+ | { | ||
+ | //Назначение выходного сигнала от пина (выхода ledLamp) HIGH (5 вольт) | ||
+ | digitalWrite(ledLamp, HIGH); //Включение светодиода | ||
+ | //Пауза 2000 – задается в миллисекундах (1 секунда = 1000 миллисекунд) | ||
+ | delay(2000); | ||
+ | //Назначение выходного сигнала от пина (выхода ledLamp) LOW (0 вольт) | ||
+ | digitalWrite(ledLamp, LOW); //Выключение светодиода | ||
+ | //И опять задержка 2 секунды | ||
+ | delay(2000); | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
== Схема 2 == | == Схема 2 == | ||
[[Файл:Схема-2.PNG|500px]] | [[Файл:Схема-2.PNG|500px]] | ||
+ | |||
+ | === Код === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | //Задание глобальных переменных | ||
+ | //Глобальные переменные обладают областью видимости в любом месте программы | ||
+ | int ledLamps[] = {2,3,4,5,6,7,8,9,10}; | ||
+ | //Задание массива (нескольких значений), хранящего номера пинов для светодиодов | ||
+ | int lastLamp = 8; //Значение (маркер) для хранения последнего включенного //светодиода (последний элемент – всего 9 элементов, нумерация начинается с 0) | ||
+ | //Установка начальных параметров | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | //Будем обходить значения по очереди (в цикле), увеличивая с каждым проходом | ||
+ | //цикла значение переменной element и присваивать текущему значению пина, | ||
+ | //значение OUTPUT | ||
+ | int element; //Объявление вспомогательной переменной для обхода цикла | ||
+ | for (element = 0; element <= 8; element++) //Конструкция цикла | ||
+ | { //конструкция «++» означает инкремент (увеличение на 1) | ||
+ | pinMode(ledLamps[element], OUTPUT); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void loop() // Основной цикл | ||
+ | { | ||
+ | //Включение светодиодов по очереди | ||
+ | //Циклом обходим элементы массива номеров пинов | ||
+ | int element; //Объявление вспомогательной переменной для обхода цикла | ||
+ | //Обходим все элементы массива пинов | ||
+ | for (element = 0; element<=8; element++) | ||
+ | { | ||
+ | //Проверим: если сейчас не последний элемент – значит, просто «моргнуть» | ||
+ | if(element != lastLamp) | ||
+ | { | ||
+ | digitalWrite(ledLamps[element], HIGH); //Включить светодиод | ||
+ | delay(100); //Задержка на 0,1 секунды | ||
+ | digitalWrite(ledLamps[element], LOW); //Выключить светодиод | ||
+ | delay(100); //Задержка на 0,1 секунды | ||
+ | } | ||
+ | else //Иначе, если это последний элемент, только зажечь | ||
+ | { | ||
+ | digitalWrite(ledLamps[element], HIGH); //Включить светодиод | ||
+ | delay(100); //Задержка на 0,1 секунды | ||
+ | lastLamp--; //Т.к. последний элемент зажгли, нужно уменьшить маркер | ||
+ | //последнего элемента на 1 (конструкция «--» означает декремент | ||
+ | //(вычитание) единицы) | ||
+ | break; //Принудительно прерываем цикл, чтобы остальные светодиоды, | ||
+ | //которые уже зажжены, не трогать | ||
+ | } | ||
+ | } | ||
+ | //После того как цикл прошел несколько раз (по количеству светодиодов), маркер | ||
+ | //последнего светодиода станет меньше нуля, поэтому мы выключим все светодиоды | ||
+ | //по очереди и снова установим маркер на 8 | ||
+ | if (lastLamp<0) | ||
+ | { | ||
+ | //Снова в цикле обойдем все светодиоды и отключим каждый | ||
+ | for (element = 0; element <=8; element++) | ||
+ | { | ||
+ | digitalWrite(ledLamps[element], LOW); //Отключение | ||
+ | delay(200); //Задержка на 0,2 секунды | ||
+ | } | ||
+ | lastLamp = 8; //Возвращаем маркер на 8 (начальное положение) | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
== Схема 3 == | == Схема 3 == | ||
− | [[Файл:Схема-3. | + | [[Файл:Схема-3.JPG|500px]] |
+ | |||
+ | === Код === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | //Задание глобальных переменных | ||
+ | //Глобальные переменные обладают областью видимости в любом месте программы | ||
+ | const int potentiometr = 0; //Потенциометр соединен с пином 0 на плате | ||
+ | const int ledLamp = 11; //Светодиод соединен с цифровым пином 11 на плате | ||
+ | int potentiometrValue; //Задание переменной для считывания значения | ||
+ | //потенциометра (целочисленный тип int) | ||
+ | |||
+ | //Установка начальных параметров | ||
+ | void setup() | ||
+ | { | ||
+ | //Задание пина ledLamp в качестве выходного | ||
+ | pinMode(ledLamp, OUTPUT); | ||
+ | } | ||
+ | |||
+ | // Основной цикл | ||
+ | void loop() | ||
+ | { | ||
+ | //Считывание значения аналогового пина potentiometr (лежит в пределах от 0 до | ||
+ | //1023 – 0-5 вольт) | ||
+ | potentiometrValue = analogRead(potentiometr); | ||
+ | //Установка напряжения на пин ledLamp светодиода | ||
+ | //(Значение напряжения лежит в пределах от 0 до 255 – поэтому разделим | ||
+ | //значение potentiometrValue на 4) | ||
+ | analogWrite(ledLamp, potentiometrValue / 4); | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
== Схема 4 == | == Схема 4 == | ||
− | [[Файл:Схема-4. | + | [[Файл:Схема-4.JPG|500px]] |
+ | |||
+ | === Код 1 === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | //Определим пины | ||
+ | const int button = 10; //Пин для кнопки 10 | ||
+ | const int ledLamp = 12; //Пин для светодиода 12 | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(button, INPUT); //Установим кнопку на ввод информации | ||
+ | pinMode(ledLamp, OUTPUT); //Светодиод на вывод | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | if (digitalRead(button) == HIGH) //Если с кнопки приходит ток | ||
+ | { | ||
+ | digitalWrite(ledLamp, HIGH); //Включаем светодиод | ||
+ | } | ||
+ | else //Иначе (тока нет) | ||
+ | { | ||
+ | digitalWrite(ledLamp, LOW); //Отключаем светодиод | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Код 2 === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | Включение и выключение по нажатию одной кнопки | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Код 3 === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | //Определим пины | ||
+ | const int button1 = 9; //Пин для кнопки № 1 – 9 | ||
+ | const int button2 = 10; //Пин для кнопки № 2 – 10 | ||
+ | const int ledLamp = 11; //Пин для светодиода – 11 | ||
+ | int bright = 0; //Здесь будем хранить текущее значение яркости | ||
+ | boolean lastButton1 = LOW; //Последнее значение кнопки № 1 (ВЫКЛ) | ||
+ | boolean lastButton2 = LOW; //Последнее значение кнопки № 2 (ВЫКЛ) | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(button1, INPUT); //Установим кнопку на ввод информации | ||
+ | pinMode(button2, INPUT); //Установим кнопку на ввод информации | ||
+ | pinMode(ledLamp, OUTPUT); //Светодиод на вывод | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | boolean valueButton1 = digitalRead(button1); //Считать значение кнопки №1 | ||
+ | boolean valueButton2 = digitalRead(button2); //Считать значение кнопки №2 | ||
+ | delay(10); //Программная задержка для избежания дребезга сигнала | ||
+ | if (valueButton1 == HIGH && lastButton1 == LOW)//Если нажали кнопку №1 | ||
+ | { | ||
+ | lastButton1 = HIGH; //Последнее значение кнопки № 1 (ВКЛ) | ||
+ | bright = bright + 50; //Увеличим яркость лампочки | ||
+ | } | ||
+ | else if (valueButton2 == HIGH && lastButton2 == LOW)//Кнопка № 2 | ||
+ | { | ||
+ | lastButton2 = HIGH; //Последнее значение кнопки № 2 (ВКЛ) | ||
+ | bright = bright - 50; //Уменьшим яркость | ||
+ | } | ||
+ | else //Иначе – нажатий не было, считаем состояние кнопок | ||
+ | { | ||
+ | lastButton1 = valueButton1; | ||
+ | lastButton2 = valueButton2; | ||
+ | } | ||
+ | if (bright < 0) //Если яркость опустилась ниже 0, установим ее в 0 | ||
+ | { | ||
+ | bright = 0; //Яркость может быть только от 0 до 255 | ||
+ | } | ||
+ | else if (bright > 255) //Если поднялась больше 255 | ||
+ | { | ||
+ | bright = 255; //Установим ее в 255 | ||
+ | } | ||
+ | analogWrite(ledLamp, bright); //Передадим значение яркости на светодиод | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
== Схема 7 == | == Схема 7 == | ||
− | [[Файл:Схема-7. | + | [[Файл:Схема-7.png|500px]] |
+ | |||
+ | === Код === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | //Определим пины | ||
+ | int photo = 0; //Пин фоторезистора | ||
+ | int ledLamp = 12; //Пин светодиода | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(ledLamp, OUTPUT); //Устанавливаем пин светодиода на «выход» | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | //Считываем значение фоторезистора в переменную light | ||
+ | int light = analogRead(photo); | ||
+ | //Если значение меньше 700(темно), включим свет | ||
+ | if (light< 700) digitalWrite(ledLamp, HIGH); | ||
+ | else digitalWrite(ledLamp, LOW); //Иначе (светло), отключим свет | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
== Схема 8 == | == Схема 8 == | ||
− | [[Файл:Схема-8. | + | [[Файл:Схема-8.png|500px]] |
+ | |||
+ | === Код 1 === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | const int BUT = 9; | ||
+ | const int BUZ = 8; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(BUZ, OUTPUT); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | if (digitalRead(BUT) == HIGH) { | ||
+ | tone(BUZ, 294, 100); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Код 2 === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | const int BUT = 9; | ||
+ | const int BUZ = 8; | ||
+ | |||
+ | const float re = 293.66; | ||
+ | const float red = 311.13; | ||
+ | const float fa = 349.23; | ||
+ | const float sol = 392.00; | ||
+ | |||
+ | const int tempo = 220; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(BUZ, OUTPUT); | ||
+ | } | ||
+ | |||
+ | void playNote(int port, float freq, float dur) { | ||
+ | tone(port, freq, dur*0.9); | ||
+ | delay(dur); | ||
+ | noTone(port); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | int wholenote = (60000 * 4) / tempo; | ||
+ | int note2 = (wholenote) / 2; | ||
+ | int note4 = (wholenote) / 4; | ||
+ | |||
+ | if (digitalRead(BUT) == HIGH) { | ||
+ | playNote(BUZ, sol, note2); | ||
+ | playNote(BUZ, sol, note4); | ||
+ | playNote(BUZ, sol, note4); | ||
+ | playNote(BUZ, red, wholenote); | ||
+ | |||
+ | delay(800); | ||
+ | |||
+ | playNote(BUZ, fa, note2); | ||
+ | playNote(BUZ, fa, note4); | ||
+ | playNote(BUZ, fa, note4); | ||
+ | playNote(BUZ, re, wholenote); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Код 3 === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | #define NOTE_B0 31 | ||
+ | #define NOTE_C1 33 | ||
+ | #define NOTE_CS1 35 | ||
+ | #define NOTE_D1 37 | ||
+ | #define NOTE_DS1 39 | ||
+ | #define NOTE_E1 41 | ||
+ | #define NOTE_F1 44 | ||
+ | #define NOTE_FS1 46 | ||
+ | #define NOTE_G1 49 | ||
+ | #define NOTE_GS1 52 | ||
+ | #define NOTE_A1 55 | ||
+ | #define NOTE_AS1 58 | ||
+ | #define NOTE_B1 62 | ||
+ | #define NOTE_C2 65 | ||
+ | #define NOTE_CS2 69 | ||
+ | #define NOTE_D2 73 | ||
+ | #define NOTE_DS2 78 | ||
+ | #define NOTE_E2 82 | ||
+ | #define NOTE_F2 87 | ||
+ | #define NOTE_FS2 93 | ||
+ | #define NOTE_G2 98 | ||
+ | #define NOTE_GS2 104 | ||
+ | #define NOTE_A2 110 | ||
+ | #define NOTE_AS2 117 | ||
+ | #define NOTE_B2 123 | ||
+ | #define NOTE_C3 131 | ||
+ | #define NOTE_CS3 139 | ||
+ | #define NOTE_D3 147 | ||
+ | #define NOTE_DS3 156 | ||
+ | #define NOTE_E3 165 | ||
+ | #define NOTE_F3 175 | ||
+ | #define NOTE_FS3 185 | ||
+ | #define NOTE_G3 196 | ||
+ | #define NOTE_GS3 208 | ||
+ | #define NOTE_A3 220 | ||
+ | #define NOTE_AS3 233 | ||
+ | #define NOTE_B3 247 | ||
+ | #define NOTE_C4 262 | ||
+ | #define NOTE_CS4 277 | ||
+ | #define NOTE_D4 294 | ||
+ | #define NOTE_DS4 311 | ||
+ | #define NOTE_E4 330 | ||
+ | #define NOTE_F4 349 | ||
+ | #define NOTE_FS4 370 | ||
+ | #define NOTE_G4 392 | ||
+ | #define NOTE_GS4 415 | ||
+ | #define NOTE_A4 440 | ||
+ | #define NOTE_AS4 466 | ||
+ | #define NOTE_B4 494 | ||
+ | #define NOTE_C5 523 | ||
+ | #define NOTE_CS5 554 | ||
+ | #define NOTE_D5 587 | ||
+ | #define NOTE_DS5 622 | ||
+ | #define NOTE_E5 659 | ||
+ | #define NOTE_F5 698 | ||
+ | #define NOTE_FS5 740 | ||
+ | #define NOTE_G5 784 | ||
+ | #define NOTE_GS5 831 | ||
+ | #define NOTE_A5 880 | ||
+ | #define NOTE_AS5 932 | ||
+ | #define NOTE_B5 988 | ||
+ | #define NOTE_C6 1047 | ||
+ | #define NOTE_CS6 1109 | ||
+ | #define NOTE_D6 1175 | ||
+ | #define NOTE_DS6 1245 | ||
+ | #define NOTE_E6 1319 | ||
+ | #define NOTE_F6 1397 | ||
+ | #define NOTE_FS6 1480 | ||
+ | #define NOTE_G6 1568 | ||
+ | #define NOTE_GS6 1661 | ||
+ | #define NOTE_A6 1760 | ||
+ | #define NOTE_AS6 1865 | ||
+ | #define NOTE_B6 1976 | ||
+ | #define NOTE_C7 2093 | ||
+ | #define NOTE_CS7 2217 | ||
+ | #define NOTE_D7 2349 | ||
+ | #define NOTE_DS7 2489 | ||
+ | #define NOTE_E7 2637 | ||
+ | #define NOTE_F7 2794 | ||
+ | #define NOTE_FS7 2960 | ||
+ | #define NOTE_G7 3136 | ||
+ | #define NOTE_GS7 3322 | ||
+ | #define NOTE_A7 3520 | ||
+ | #define NOTE_AS7 3729 | ||
+ | #define NOTE_B7 3951 | ||
+ | #define NOTE_C8 4186 | ||
+ | #define NOTE_CS8 4435 | ||
+ | #define NOTE_D8 4699 | ||
+ | #define NOTE_DS8 4978 | ||
+ | #define REST 0 | ||
+ | |||
+ | // change this to make the song slower or faster | ||
+ | int tempo = 144; | ||
+ | |||
+ | // change this to whichever pin you want to use | ||
+ | int buzzer = 8; | ||
+ | |||
+ | // notes of the moledy followed by the duration. | ||
+ | // a 4 means a quarter note, 8 an eighteenth , 16 sixteenth, so on | ||
+ | // !!negative numbers are used to represent dotted notes, | ||
+ | // so -4 means a dotted quarter note, that is, a quarter plus an eighteenth!! | ||
+ | int melody[] = { | ||
+ | |||
+ | |||
+ | // Hedwig's theme fromn the Harry Potter Movies | ||
+ | // Socre from https://musescore.com/user/3811306/scores/4906610 | ||
+ | |||
+ | REST, 2, NOTE_D4, 4, | ||
+ | NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4, | ||
+ | NOTE_G4, 2, NOTE_D5, 4, | ||
+ | NOTE_C5, -2, | ||
+ | NOTE_A4, -2, | ||
+ | NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4, | ||
+ | NOTE_F4, 2, NOTE_GS4, 4, | ||
+ | NOTE_D4, -1, | ||
+ | NOTE_D4, 4, | ||
+ | |||
+ | NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4, //10 | ||
+ | NOTE_G4, 2, NOTE_D5, 4, | ||
+ | NOTE_F5, 2, NOTE_E5, 4, | ||
+ | NOTE_DS5, 2, NOTE_B4, 4, | ||
+ | NOTE_DS5, -4, NOTE_D5, 8, NOTE_CS5, 4, | ||
+ | NOTE_CS4, 2, NOTE_B4, 4, | ||
+ | NOTE_G4, -1, | ||
+ | NOTE_AS4, 4, | ||
+ | |||
+ | NOTE_D5, 2, NOTE_AS4, 4,//18 | ||
+ | NOTE_D5, 2, NOTE_AS4, 4, | ||
+ | NOTE_DS5, 2, NOTE_D5, 4, | ||
+ | NOTE_CS5, 2, NOTE_A4, 4, | ||
+ | NOTE_AS4, -4, NOTE_D5, 8, NOTE_CS5, 4, | ||
+ | NOTE_CS4, 2, NOTE_D4, 4, | ||
+ | NOTE_D5, -1, | ||
+ | REST,4, NOTE_AS4,4, | ||
+ | |||
+ | NOTE_D5, 2, NOTE_AS4, 4,//26 | ||
+ | NOTE_D5, 2, NOTE_AS4, 4, | ||
+ | NOTE_F5, 2, NOTE_E5, 4, | ||
+ | NOTE_DS5, 2, NOTE_B4, 4, | ||
+ | NOTE_DS5, -4, NOTE_D5, 8, NOTE_CS5, 4, | ||
+ | NOTE_CS4, 2, NOTE_AS4, 4, | ||
+ | NOTE_G4, -1, | ||
+ | |||
+ | }; | ||
+ | |||
+ | // sizeof gives the number of bytes, each int value is composed of two bytes (16 bits) | ||
+ | // there are two values per note (pitch and duration), so for each note there are four bytes | ||
+ | int notes = sizeof(melody) / sizeof(melody[0]) / 2; | ||
+ | |||
+ | // this calculates the duration of a whole note in ms (60s/tempo)*4 beats | ||
+ | int wholenote = (60000 * 4) / tempo; | ||
+ | |||
+ | int divider = 0, noteDuration = 0; | ||
+ | |||
+ | const int BUT = 9; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(buzzer, OUTPUT); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | if (digitalRead(BUT) == HIGH) { | ||
+ | for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) { | ||
+ | |||
+ | // calculates the duration of each note | ||
+ | divider = melody[thisNote + 1]; | ||
+ | if (divider > 0) { | ||
+ | // regular note, just proceed | ||
+ | noteDuration = (wholenote) / divider; | ||
+ | } else if (divider < 0) { | ||
+ | // dotted notes are represented with negative durations!! | ||
+ | noteDuration = (wholenote) / abs(divider); | ||
+ | noteDuration *= 1.5; // increases the duration in half for dotted notes | ||
+ | } | ||
+ | |||
+ | // we only play the note for 90% of the duration, leaving 10% as a pause | ||
+ | tone(buzzer, melody[thisNote], noteDuration*0.9); | ||
+ | |||
+ | // Wait for the specief duration before playing the next note. | ||
+ | delay(noteDuration); | ||
+ | |||
+ | // stop the waveform generation before the next note. | ||
+ | noTone(buzzer); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
== Схема 10 == | == Схема 10 == | ||
− | [[Файл:Схема-10. | + | [[Файл:Схема-10.png|500px]] |
+ | |||
+ | === Код === | ||
+ | <syntaxhighlight lang="C++" line> | ||
+ | //Объявление переменных | ||
+ | int buzzer = 6; //Зуммер на 6 пине | ||
+ | int button = 7; //Кнопка на 7 | ||
+ | int redRoad = 8; //Красный светодиод дороги на 8 | ||
+ | int yellowRoad = 9; //Желтый светодиод дороги на 9 | ||
+ | int greenRoad = 10; //Зеленый светодиод дороги на 10 | ||
+ | int redZebra = 11; //Красный светодиод перехода на 11 | ||
+ | int greenZebra = 12; //Зеленый светодиод перехода на 12 | ||
+ | boolean lastButton = LOW; //Флаг последнего состояния кнопки | ||
+ | |||
+ | void setup() | ||
+ | { //Установим вход/выход наших пинов | ||
+ | pinMode(buzzer, OUTPUT); | ||
+ | pinMode(button, INPUT); | ||
+ | pinMode(redRoad, OUTPUT); | ||
+ | pinMode(yellowRoad, OUTPUT); | ||
+ | pinMode(greenRoad, OUTPUT); | ||
+ | pinMode(redZebra, OUTPUT); | ||
+ | pinMode(greenZebra, OUTPUT); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | //В функции «стандартная ситуация» опишем поведение, если кнопка не нажата | ||
+ | standardSituation(); | ||
+ | if (digitalRead(button) == HIGH && lastButton == LOW) | ||
+ | { //Кнопку нажимают | ||
+ | lastButton = HIGH; //Установим флаг кнопки на (ВКЛ) | ||
+ | greenBlink(greenRoad); //Зеленый светодиод дороги мигает | ||
+ | digitalWrite(greenRoad, LOW); //Выключаем зеленый светодиод дороги | ||
+ | digitalWrite(yellowRoad, HIGH); //Включаем желтый светодиод дороги | ||
+ | delay(1000); //Задержка в секунду | ||
+ | digitalWrite(yellowRoad, LOW); //Выключаем желтый светодиод дороги | ||
+ | delay(100); //Задержка 100мс | ||
+ | digitalWrite(redRoad, HIGH); //Включаем красный светодиод дороги | ||
+ | delay(500); //Задержка полсекунды | ||
+ | digitalWrite(redZebra, LOW); //Красный светодиод на зебре гаснет | ||
+ | digitalWrite(greenZebra, HIGH); //Зеленый загорается | ||
+ | tone(buzzer, 262, 3000); //Включается звуковой сигнал для слепых | ||
+ | delay(3000); //Идет время для перехода дороги | ||
+ | greenBlink(greenZebra); //Переход заканчивается (зеленый мигает) | ||
+ | digitalWrite(greenZebra, LOW); //Зеленый светодиод зебры гаснет | ||
+ | digitalWrite(redZebra, HIGH); //Красный светодиод зебры загорается | ||
+ | delay(200); //Бегут пешеходы, не успевшие завершить переход на зеленом =) | ||
+ | digitalWrite(yellowRoad, HIGH); //Загорается желтый светодиод дороги | ||
+ | delay(1000); //Задержка на секунду | ||
+ | standardSituation(); //Устанавливаем стандартную ситуацию | ||
+ | delay(5000); //Даем 5 секунд, чтобы пешеходы не сразу жали на кнопку | ||
+ | } | ||
+ | lastButton = digitalRead(button); //Считать состояние кнопки | ||
+ | } | ||
+ | |||
+ | void greenBlink(int pin) | ||
+ | { //Функция «помигать зеленым» | ||
+ | int var = 0; //Объявление переменной счетчика | ||
+ | while (var < 3) | ||
+ | { //Пока переменная меньше трех | ||
+ | digitalWrite(pin, LOW); //Выключить светодиод | ||
+ | delay(500); //Подержать полсекунды | ||
+ | digitalWrite(pin, HIGH); //Включить светодиод | ||
+ | delay(500); //Подержать полсекунды | ||
+ | var ++; //Счетчик увеличить на 1 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void standardSituation() | ||
+ | { //Определим стандартную ситуацию | ||
+ | digitalWrite(yellowRoad, LOW); //Желтый дороги ВЫКЛ | ||
+ | digitalWrite(redRoad, LOW); //Красный дороги ВЫКЛ | ||
+ | digitalWrite(greenRoad, HIGH); //Зеленый дороги ВКЛ | ||
+ | digitalWrite(redZebra, HIGH); //Красный перехода ВКЛ | ||
+ | digitalWrite(greenZebra, LOW); //Зеленый перехода ВЫКЛ | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> |
Текущая версия на 10:27, 10 января 2023
Схема 1
Код
1 //Задание глобальных переменных целочисленного типа integer
2 //Присваивание переменной ledLamp (светодиод) значение выхода 12 на плате
3 int ledLamp = 12;
4
5 //Установка начальных параметров
6 void setup()
7 {
8 //Задание пина ledLamp в качестве выходного
9 pinMode(ledLamp, OUTPUT);
10 }
11
12 //Основной цикл (повторяется бесконечно)
13 void loop()
14 {
15 //Назначение выходного сигнала от пина (выхода ledLamp) HIGH (5 вольт)
16 digitalWrite(ledLamp, HIGH); //Включение светодиода
17 //Пауза 2000 – задается в миллисекундах (1 секунда = 1000 миллисекунд)
18 delay(2000);
19 //Назначение выходного сигнала от пина (выхода ledLamp) LOW (0 вольт)
20 digitalWrite(ledLamp, LOW); //Выключение светодиода
21 //И опять задержка 2 секунды
22 delay(2000);
23 }
Схема 2
Код
1 //Задание глобальных переменных
2 //Глобальные переменные обладают областью видимости в любом месте программы
3 int ledLamps[] = {2,3,4,5,6,7,8,9,10};
4 //Задание массива (нескольких значений), хранящего номера пинов для светодиодов
5 int lastLamp = 8; //Значение (маркер) для хранения последнего включенного //светодиода (последний элемент – всего 9 элементов, нумерация начинается с 0)
6 //Установка начальных параметров
7
8 void setup()
9 {
10 //Будем обходить значения по очереди (в цикле), увеличивая с каждым проходом
11 //цикла значение переменной element и присваивать текущему значению пина,
12 //значение OUTPUT
13 int element; //Объявление вспомогательной переменной для обхода цикла
14 for (element = 0; element <= 8; element++) //Конструкция цикла
15 { //конструкция «++» означает инкремент (увеличение на 1)
16 pinMode(ledLamps[element], OUTPUT);
17 }
18 }
19
20 void loop() // Основной цикл
21 {
22 //Включение светодиодов по очереди
23 //Циклом обходим элементы массива номеров пинов
24 int element; //Объявление вспомогательной переменной для обхода цикла
25 //Обходим все элементы массива пинов
26 for (element = 0; element<=8; element++)
27 {
28 //Проверим: если сейчас не последний элемент – значит, просто «моргнуть»
29 if(element != lastLamp)
30 {
31 digitalWrite(ledLamps[element], HIGH); //Включить светодиод
32 delay(100); //Задержка на 0,1 секунды
33 digitalWrite(ledLamps[element], LOW); //Выключить светодиод
34 delay(100); //Задержка на 0,1 секунды
35 }
36 else //Иначе, если это последний элемент, только зажечь
37 {
38 digitalWrite(ledLamps[element], HIGH); //Включить светодиод
39 delay(100); //Задержка на 0,1 секунды
40 lastLamp--; //Т.к. последний элемент зажгли, нужно уменьшить маркер
41 //последнего элемента на 1 (конструкция «--» означает декремент
42 //(вычитание) единицы)
43 break; //Принудительно прерываем цикл, чтобы остальные светодиоды,
44 //которые уже зажжены, не трогать
45 }
46 }
47 //После того как цикл прошел несколько раз (по количеству светодиодов), маркер
48 //последнего светодиода станет меньше нуля, поэтому мы выключим все светодиоды
49 //по очереди и снова установим маркер на 8
50 if (lastLamp<0)
51 {
52 //Снова в цикле обойдем все светодиоды и отключим каждый
53 for (element = 0; element <=8; element++)
54 {
55 digitalWrite(ledLamps[element], LOW); //Отключение
56 delay(200); //Задержка на 0,2 секунды
57 }
58 lastLamp = 8; //Возвращаем маркер на 8 (начальное положение)
59 }
60 }
Схема 3
Код
1 //Задание глобальных переменных
2 //Глобальные переменные обладают областью видимости в любом месте программы
3 const int potentiometr = 0; //Потенциометр соединен с пином 0 на плате
4 const int ledLamp = 11; //Светодиод соединен с цифровым пином 11 на плате
5 int potentiometrValue; //Задание переменной для считывания значения
6 //потенциометра (целочисленный тип int)
7
8 //Установка начальных параметров
9 void setup()
10 {
11 //Задание пина ledLamp в качестве выходного
12 pinMode(ledLamp, OUTPUT);
13 }
14
15 // Основной цикл
16 void loop()
17 {
18 //Считывание значения аналогового пина potentiometr (лежит в пределах от 0 до
19 //1023 – 0-5 вольт)
20 potentiometrValue = analogRead(potentiometr);
21 //Установка напряжения на пин ledLamp светодиода
22 //(Значение напряжения лежит в пределах от 0 до 255 – поэтому разделим
23 //значение potentiometrValue на 4)
24 analogWrite(ledLamp, potentiometrValue / 4);
25 }
Схема 4
Код 1
1 //Определим пины
2 const int button = 10; //Пин для кнопки 10
3 const int ledLamp = 12; //Пин для светодиода 12
4
5 void setup()
6 {
7 pinMode(button, INPUT); //Установим кнопку на ввод информации
8 pinMode(ledLamp, OUTPUT); //Светодиод на вывод
9 }
10
11 void loop()
12 {
13 if (digitalRead(button) == HIGH) //Если с кнопки приходит ток
14 {
15 digitalWrite(ledLamp, HIGH); //Включаем светодиод
16 }
17 else //Иначе (тока нет)
18 {
19 digitalWrite(ledLamp, LOW); //Отключаем светодиод
20 }
21 }
Код 2
1 Включение и выключение по нажатию одной кнопки
Код 3
1 //Определим пины
2 const int button1 = 9; //Пин для кнопки № 1 – 9
3 const int button2 = 10; //Пин для кнопки № 2 – 10
4 const int ledLamp = 11; //Пин для светодиода – 11
5 int bright = 0; //Здесь будем хранить текущее значение яркости
6 boolean lastButton1 = LOW; //Последнее значение кнопки № 1 (ВЫКЛ)
7 boolean lastButton2 = LOW; //Последнее значение кнопки № 2 (ВЫКЛ)
8
9 void setup() {
10 pinMode(button1, INPUT); //Установим кнопку на ввод информации
11 pinMode(button2, INPUT); //Установим кнопку на ввод информации
12 pinMode(ledLamp, OUTPUT); //Светодиод на вывод
13 }
14
15 void loop() {
16 boolean valueButton1 = digitalRead(button1); //Считать значение кнопки №1
17 boolean valueButton2 = digitalRead(button2); //Считать значение кнопки №2
18 delay(10); //Программная задержка для избежания дребезга сигнала
19 if (valueButton1 == HIGH && lastButton1 == LOW)//Если нажали кнопку №1
20 {
21 lastButton1 = HIGH; //Последнее значение кнопки № 1 (ВКЛ)
22 bright = bright + 50; //Увеличим яркость лампочки
23 }
24 else if (valueButton2 == HIGH && lastButton2 == LOW)//Кнопка № 2
25 {
26 lastButton2 = HIGH; //Последнее значение кнопки № 2 (ВКЛ)
27 bright = bright - 50; //Уменьшим яркость
28 }
29 else //Иначе – нажатий не было, считаем состояние кнопок
30 {
31 lastButton1 = valueButton1;
32 lastButton2 = valueButton2;
33 }
34 if (bright < 0) //Если яркость опустилась ниже 0, установим ее в 0
35 {
36 bright = 0; //Яркость может быть только от 0 до 255
37 }
38 else if (bright > 255) //Если поднялась больше 255
39 {
40 bright = 255; //Установим ее в 255
41 }
42 analogWrite(ledLamp, bright); //Передадим значение яркости на светодиод
43 }
Схема 7
Код
1 //Определим пины
2 int photo = 0; //Пин фоторезистора
3 int ledLamp = 12; //Пин светодиода
4
5 void setup()
6 {
7 pinMode(ledLamp, OUTPUT); //Устанавливаем пин светодиода на «выход»
8 }
9
10 void loop()
11 {
12 //Считываем значение фоторезистора в переменную light
13 int light = analogRead(photo);
14 //Если значение меньше 700(темно), включим свет
15 if (light< 700) digitalWrite(ledLamp, HIGH);
16 else digitalWrite(ledLamp, LOW); //Иначе (светло), отключим свет
17 }
Схема 8
Код 1
1 const int BUT = 9;
2 const int BUZ = 8;
3
4 void setup()
5 {
6 pinMode(BUZ, OUTPUT);
7 }
8
9 void loop()
10 {
11 if (digitalRead(BUT) == HIGH) {
12 tone(BUZ, 294, 100);
13 }
14 }
Код 2
1 const int BUT = 9;
2 const int BUZ = 8;
3
4 const float re = 293.66;
5 const float red = 311.13;
6 const float fa = 349.23;
7 const float sol = 392.00;
8
9 const int tempo = 220;
10
11 void setup()
12 {
13 pinMode(BUZ, OUTPUT);
14 }
15
16 void playNote(int port, float freq, float dur) {
17 tone(port, freq, dur*0.9);
18 delay(dur);
19 noTone(port);
20 }
21
22 void loop()
23 {
24 int wholenote = (60000 * 4) / tempo;
25 int note2 = (wholenote) / 2;
26 int note4 = (wholenote) / 4;
27
28 if (digitalRead(BUT) == HIGH) {
29 playNote(BUZ, sol, note2);
30 playNote(BUZ, sol, note4);
31 playNote(BUZ, sol, note4);
32 playNote(BUZ, red, wholenote);
33
34 delay(800);
35
36 playNote(BUZ, fa, note2);
37 playNote(BUZ, fa, note4);
38 playNote(BUZ, fa, note4);
39 playNote(BUZ, re, wholenote);
40 }
41 }
Код 3
1 #define NOTE_B0 31
2 #define NOTE_C1 33
3 #define NOTE_CS1 35
4 #define NOTE_D1 37
5 #define NOTE_DS1 39
6 #define NOTE_E1 41
7 #define NOTE_F1 44
8 #define NOTE_FS1 46
9 #define NOTE_G1 49
10 #define NOTE_GS1 52
11 #define NOTE_A1 55
12 #define NOTE_AS1 58
13 #define NOTE_B1 62
14 #define NOTE_C2 65
15 #define NOTE_CS2 69
16 #define NOTE_D2 73
17 #define NOTE_DS2 78
18 #define NOTE_E2 82
19 #define NOTE_F2 87
20 #define NOTE_FS2 93
21 #define NOTE_G2 98
22 #define NOTE_GS2 104
23 #define NOTE_A2 110
24 #define NOTE_AS2 117
25 #define NOTE_B2 123
26 #define NOTE_C3 131
27 #define NOTE_CS3 139
28 #define NOTE_D3 147
29 #define NOTE_DS3 156
30 #define NOTE_E3 165
31 #define NOTE_F3 175
32 #define NOTE_FS3 185
33 #define NOTE_G3 196
34 #define NOTE_GS3 208
35 #define NOTE_A3 220
36 #define NOTE_AS3 233
37 #define NOTE_B3 247
38 #define NOTE_C4 262
39 #define NOTE_CS4 277
40 #define NOTE_D4 294
41 #define NOTE_DS4 311
42 #define NOTE_E4 330
43 #define NOTE_F4 349
44 #define NOTE_FS4 370
45 #define NOTE_G4 392
46 #define NOTE_GS4 415
47 #define NOTE_A4 440
48 #define NOTE_AS4 466
49 #define NOTE_B4 494
50 #define NOTE_C5 523
51 #define NOTE_CS5 554
52 #define NOTE_D5 587
53 #define NOTE_DS5 622
54 #define NOTE_E5 659
55 #define NOTE_F5 698
56 #define NOTE_FS5 740
57 #define NOTE_G5 784
58 #define NOTE_GS5 831
59 #define NOTE_A5 880
60 #define NOTE_AS5 932
61 #define NOTE_B5 988
62 #define NOTE_C6 1047
63 #define NOTE_CS6 1109
64 #define NOTE_D6 1175
65 #define NOTE_DS6 1245
66 #define NOTE_E6 1319
67 #define NOTE_F6 1397
68 #define NOTE_FS6 1480
69 #define NOTE_G6 1568
70 #define NOTE_GS6 1661
71 #define NOTE_A6 1760
72 #define NOTE_AS6 1865
73 #define NOTE_B6 1976
74 #define NOTE_C7 2093
75 #define NOTE_CS7 2217
76 #define NOTE_D7 2349
77 #define NOTE_DS7 2489
78 #define NOTE_E7 2637
79 #define NOTE_F7 2794
80 #define NOTE_FS7 2960
81 #define NOTE_G7 3136
82 #define NOTE_GS7 3322
83 #define NOTE_A7 3520
84 #define NOTE_AS7 3729
85 #define NOTE_B7 3951
86 #define NOTE_C8 4186
87 #define NOTE_CS8 4435
88 #define NOTE_D8 4699
89 #define NOTE_DS8 4978
90 #define REST 0
91
92 // change this to make the song slower or faster
93 int tempo = 144;
94
95 // change this to whichever pin you want to use
96 int buzzer = 8;
97
98 // notes of the moledy followed by the duration.
99 // a 4 means a quarter note, 8 an eighteenth , 16 sixteenth, so on
100 // !!negative numbers are used to represent dotted notes,
101 // so -4 means a dotted quarter note, that is, a quarter plus an eighteenth!!
102 int melody[] = {
103
104
105 // Hedwig's theme fromn the Harry Potter Movies
106 // Socre from https://musescore.com/user/3811306/scores/4906610
107
108 REST, 2, NOTE_D4, 4,
109 NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4,
110 NOTE_G4, 2, NOTE_D5, 4,
111 NOTE_C5, -2,
112 NOTE_A4, -2,
113 NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4,
114 NOTE_F4, 2, NOTE_GS4, 4,
115 NOTE_D4, -1,
116 NOTE_D4, 4,
117
118 NOTE_G4, -4, NOTE_AS4, 8, NOTE_A4, 4, //10
119 NOTE_G4, 2, NOTE_D5, 4,
120 NOTE_F5, 2, NOTE_E5, 4,
121 NOTE_DS5, 2, NOTE_B4, 4,
122 NOTE_DS5, -4, NOTE_D5, 8, NOTE_CS5, 4,
123 NOTE_CS4, 2, NOTE_B4, 4,
124 NOTE_G4, -1,
125 NOTE_AS4, 4,
126
127 NOTE_D5, 2, NOTE_AS4, 4,//18
128 NOTE_D5, 2, NOTE_AS4, 4,
129 NOTE_DS5, 2, NOTE_D5, 4,
130 NOTE_CS5, 2, NOTE_A4, 4,
131 NOTE_AS4, -4, NOTE_D5, 8, NOTE_CS5, 4,
132 NOTE_CS4, 2, NOTE_D4, 4,
133 NOTE_D5, -1,
134 REST,4, NOTE_AS4,4,
135
136 NOTE_D5, 2, NOTE_AS4, 4,//26
137 NOTE_D5, 2, NOTE_AS4, 4,
138 NOTE_F5, 2, NOTE_E5, 4,
139 NOTE_DS5, 2, NOTE_B4, 4,
140 NOTE_DS5, -4, NOTE_D5, 8, NOTE_CS5, 4,
141 NOTE_CS4, 2, NOTE_AS4, 4,
142 NOTE_G4, -1,
143
144 };
145
146 // sizeof gives the number of bytes, each int value is composed of two bytes (16 bits)
147 // there are two values per note (pitch and duration), so for each note there are four bytes
148 int notes = sizeof(melody) / sizeof(melody[0]) / 2;
149
150 // this calculates the duration of a whole note in ms (60s/tempo)*4 beats
151 int wholenote = (60000 * 4) / tempo;
152
153 int divider = 0, noteDuration = 0;
154
155 const int BUT = 9;
156
157 void setup()
158 {
159 pinMode(buzzer, OUTPUT);
160 }
161
162 void loop()
163 {
164 if (digitalRead(BUT) == HIGH) {
165 for (int thisNote = 0; thisNote < notes * 2; thisNote = thisNote + 2) {
166
167 // calculates the duration of each note
168 divider = melody[thisNote + 1];
169 if (divider > 0) {
170 // regular note, just proceed
171 noteDuration = (wholenote) / divider;
172 } else if (divider < 0) {
173 // dotted notes are represented with negative durations!!
174 noteDuration = (wholenote) / abs(divider);
175 noteDuration *= 1.5; // increases the duration in half for dotted notes
176 }
177
178 // we only play the note for 90% of the duration, leaving 10% as a pause
179 tone(buzzer, melody[thisNote], noteDuration*0.9);
180
181 // Wait for the specief duration before playing the next note.
182 delay(noteDuration);
183
184 // stop the waveform generation before the next note.
185 noTone(buzzer);
186 }
187
188 }
189 }
Схема 10
Код
1 //Объявление переменных
2 int buzzer = 6; //Зуммер на 6 пине
3 int button = 7; //Кнопка на 7
4 int redRoad = 8; //Красный светодиод дороги на 8
5 int yellowRoad = 9; //Желтый светодиод дороги на 9
6 int greenRoad = 10; //Зеленый светодиод дороги на 10
7 int redZebra = 11; //Красный светодиод перехода на 11
8 int greenZebra = 12; //Зеленый светодиод перехода на 12
9 boolean lastButton = LOW; //Флаг последнего состояния кнопки
10
11 void setup()
12 { //Установим вход/выход наших пинов
13 pinMode(buzzer, OUTPUT);
14 pinMode(button, INPUT);
15 pinMode(redRoad, OUTPUT);
16 pinMode(yellowRoad, OUTPUT);
17 pinMode(greenRoad, OUTPUT);
18 pinMode(redZebra, OUTPUT);
19 pinMode(greenZebra, OUTPUT);
20 }
21
22 void loop()
23 {
24 //В функции «стандартная ситуация» опишем поведение, если кнопка не нажата
25 standardSituation();
26 if (digitalRead(button) == HIGH && lastButton == LOW)
27 { //Кнопку нажимают
28 lastButton = HIGH; //Установим флаг кнопки на (ВКЛ)
29 greenBlink(greenRoad); //Зеленый светодиод дороги мигает
30 digitalWrite(greenRoad, LOW); //Выключаем зеленый светодиод дороги
31 digitalWrite(yellowRoad, HIGH); //Включаем желтый светодиод дороги
32 delay(1000); //Задержка в секунду
33 digitalWrite(yellowRoad, LOW); //Выключаем желтый светодиод дороги
34 delay(100); //Задержка 100мс
35 digitalWrite(redRoad, HIGH); //Включаем красный светодиод дороги
36 delay(500); //Задержка полсекунды
37 digitalWrite(redZebra, LOW); //Красный светодиод на зебре гаснет
38 digitalWrite(greenZebra, HIGH); //Зеленый загорается
39 tone(buzzer, 262, 3000); //Включается звуковой сигнал для слепых
40 delay(3000); //Идет время для перехода дороги
41 greenBlink(greenZebra); //Переход заканчивается (зеленый мигает)
42 digitalWrite(greenZebra, LOW); //Зеленый светодиод зебры гаснет
43 digitalWrite(redZebra, HIGH); //Красный светодиод зебры загорается
44 delay(200); //Бегут пешеходы, не успевшие завершить переход на зеленом =)
45 digitalWrite(yellowRoad, HIGH); //Загорается желтый светодиод дороги
46 delay(1000); //Задержка на секунду
47 standardSituation(); //Устанавливаем стандартную ситуацию
48 delay(5000); //Даем 5 секунд, чтобы пешеходы не сразу жали на кнопку
49 }
50 lastButton = digitalRead(button); //Считать состояние кнопки
51 }
52
53 void greenBlink(int pin)
54 { //Функция «помигать зеленым»
55 int var = 0; //Объявление переменной счетчика
56 while (var < 3)
57 { //Пока переменная меньше трех
58 digitalWrite(pin, LOW); //Выключить светодиод
59 delay(500); //Подержать полсекунды
60 digitalWrite(pin, HIGH); //Включить светодиод
61 delay(500); //Подержать полсекунды
62 var ++; //Счетчик увеличить на 1
63 }
64 }
65
66 void standardSituation()
67 { //Определим стандартную ситуацию
68 digitalWrite(yellowRoad, LOW); //Желтый дороги ВЫКЛ
69 digitalWrite(redRoad, LOW); //Красный дороги ВЫКЛ
70 digitalWrite(greenRoad, HIGH); //Зеленый дороги ВКЛ
71 digitalWrite(redZebra, HIGH); //Красный перехода ВКЛ
72 digitalWrite(greenZebra, LOW); //Зеленый перехода ВЫКЛ
73 }