Робототехника

Материал из Информационная безопасностя
Версия от 10:27, 10 января 2023; Безуглов Сергей (обсуждение | вклад) (→‎Схема 10)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

Схема 1

Схема-1.PNG

Код

 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

Схема-2.PNG

Код

 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

Схема-3.JPG

Код

 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

Схема-4.JPG

Код 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

Схема-7.png

Код

 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

Схема-8.png

Код 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

Схема-10.png

Код

 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 }