Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Отличия архитектур процессоров RISC и CISC.

Основные блоки стандартного микроконтроллера с указанием их функций.

Стандартные блоки каждого микроконтроллера это центральный процессор (CPU), оперативная память(RAM), а так же память программ и внешних устройств.

 

1.Центральный процессор(CPU) – в нем сигналы представлены в цифровом виде и над ним можно проводить арифметические и логические операции.

 

2.Оперативаня память(RAM) – служит для временного хранения промежуточных данных. Здесь также хранятся результаты вычислений, полученных во время выполнения программ.

 

3. Внешние устройства – это все компоненты микроконтроллера, кроме центрального процессора. К ним относятся внешний интерфейс, цифровые входы и выходы.

Отличия архитектур процессоров RISC и CISC.

CISC – компьютера обладает множеством специальных команд, которые занимают большой объём памяти и требует длительное время выполнения. К тому же, что бы реализовать более 256 различных команд, потребуются дополнительные байты.

RISC – потребляет меньше памяти и выполняется гораздо быстрее.

К тому же, располагает большим количеством регистров и команды состоят не более чем из 1-2 байт.

 

На 2 занятии требовалось с помощью светодиодов, резисторов, сделать светофор, железнодорожный светофор, и волну.

 

Железнодорожный светфор

int pin1 = 11;

int pin2 = 12;

int pin3 = 13;

 

void setup()

{

pinMode(pin1, OUTPUT);

pinMode(pin2, OUTPUT);

pinMode(pin3, OUTPUT);

}

 

void loop()

{

digitalWrite(pin3, LOW);

digitalWrite(pin1, HIGH);

delay(500);

 

digitalWrite(pin1, LOW);

digitalWrite(pin3, HIGH);

delay(500);

}

 

Светофор

int pin1 = 13;

int pin2 = 11;

int pin3 = 10;

 

void setup()

{

pinMode(pin1, OUTPUT);

pinMode(pin2, OUTPUT);

pinMode(pin3, OUTPUT);

}

 

void loop()

{

digitalWrite(pin1, HIGH);

digitalWrite(pin2, LOW);

digitalWrite(pin3, LOW);

delay(5000); //Горит красный

 

digitalWrite(pin1, LOW);

digitalWrite(pin2, LOW);

for (int pin = 1; pin < = 10; ++pin) {

digitalWrite(pin1, LOW);

delay(100);

digitalWrite(pin1, HIGH);

delay(100); //Мигает красный

}

 

digitalWrite(pin1, LOW);

digitalWrite(pin2, HIGH);

digitalWrite(pin3, LOW);

delay(2000); //Горит желтый

 

digitalWrite(pin1, LOW);

digitalWrite(pin2, LOW);

digitalWrite(pin3, HIGH);

delay(5000); //Горит зеленый

 

digitalWrite(pin3, LOW);

digitalWrite(pin2, LOW);

for (int pin = 1; pin < = 10; ++pin) {

digitalWrite(pin3, LOW);

delay(100);

digitalWrite(pin3, HIGH);

delay(100); //Мигает зеленый

}

 

digitalWrite(pin1, LOW);

digitalWrite(pin2, HIGH);

digitalWrite(pin3, LOW);

delay(2000); //Горит желтый

}

 

Волна

 

void setup()

{

}

void loop()

{

int y = 12; //начальная скорость

for(int y=12; y> 1; y--){ //

 

for(int x=0; x< =10; x++){ //волна

int pinx=x;

pinMode(pinx, OUTPUT);

digitalWrite(pinx, HIGH);

delay(10*y);

digitalWrite(pinx, LOW); //конец

 

 

}}}

 

На 3 занятии требовалось модифицировать светофор так, что бы при горении красного он пищал, а при мигании зелёного подавал сигналы о смене света. Так же с помощью азбуки Морзе требовалось вывести сообщение о студентах и группе где они учатся, и проиграть с помощью пищалки музыку.

 

Светофор со звуком

 

int pin1 = 12;

int pin2 = 11;

int pin3 = 10;

int pin4 = 13;

 

void setup()

{ pinMode(pin1, OUTPUT);

pinMode(pin2, OUTPUT);

pinMode(pin3, OUTPUT);

pinMode(pin4, OUTPUT);

}

 

void loop()

 

{

digitalWrite(pin1, HIGH);

digitalWrite(pin2, LOW);

digitalWrite(pin3, LOW);

delay(5000); //Горит красный

 

digitalWrite(pin3, LOW);

digitalWrite(pin2, LOW);

for (int pin = 1; pin < = 10; ++pin) {

digitalWrite(pin1, HIGH);

for (int i = 0; i < = 20; i++) {

digitalWrite(pin4, HIGH);

delay(5);

digitalWrite(pin4, LOW);

delay(5); }

digitalWrite(pin1, LOW);

delay(200); //Мигает красный

}

 

digitalWrite(pin1, LOW);

digitalWrite(pin2, HIGH);

digitalWrite(pin3, LOW);

delay(2000); //Горит желтый

 

digitalWrite(pin1, LOW);

digitalWrite(pin2, LOW);

digitalWrite(pin3, HIGH);

for (int i = 0; i < = 2500; i++) {

digitalWrite(pin4, HIGH);

delay(1);

digitalWrite(pin4, LOW);

delay(1); }

//Горит зеленый

 

digitalWrite(pin3, LOW);

digitalWrite(pin2, LOW);

for (int pin = 1; pin < = 10; ++pin) {

digitalWrite(pin3, HIGH);

for (int i = 0; i < = 20; i++) {

digitalWrite(pin4, HIGH);

delay(5);

digitalWrite(pin4, LOW);

delay(5); }

digitalWrite(pin3, LOW);

delay(200); //Мигает зеленый

}

 

digitalWrite(pin1, LOW);

digitalWrite(pin2, HIGH);

digitalWrite(pin3, LOW);

delay(2000); //Горит желтый

}

 

Азбука Морзе

 

int ledPin = 13; // Номер пина со светодиодом

int dotDelay = 200; // Время длительности «точки»

 

char theword[] = " Kiss my shinny metall ass";

 

// Точка

void dot()

{

digitalWrite(ledPin, HIGH);

delay(dotDelay);

digitalWrite(ledPin, LOW);

delay(dotDelay);

}

 

// Тире

void dash()

{

digitalWrite(ledPin, HIGH);

delay(3 * dotDelay);

digitalWrite(ledPin, LOW);

delay(dotDelay);

}

 

// Окончание буквы

void letterEnd()

{

delay(2 * dotDelay);

}

 

// Окончание слова

void wordEnd()

{

delay(6 * dotDelay);

}

 

// Слово

void morseWord(char theword[])

{

int len = strlen(theword);

for(int i = 0; i < len; ++i)

morseLetter(theword[i]);

wordEnd();

}

 

// Буква

void morseLetter(char c)

{

switch(c) {

case 'a':

dot(); dash();

break;

case 'b':

dash(); dot(); dot(); dot();

break;

case 'c':

dash(); dot(); dash(); dot();

break;

case 'd':

dash(); dot(); dot();

break;

case 'e':

dot();

break;

case 'f':

dot(); dot(); dash(); dot();

break;

case 'g':

dash(); dash(); dot();

break;

case 'h':

dot(); dot(); dot();

break;

case 'i':

dot(); dot();

break;

case 'j':

dot(); dash(); dash(); dash();

break;

case 'k':

dash(); dot(); dash();

break;

case 'l':

dot(); dash(); dot(); dot();

break;

case 'm':

dash(); dash();

break;

case 'n':

dash(); dot();

break;

case 'o':

dash(); dash(); dash();

break;

case 'p':

dot(); dash(); dash(); dot();

break;

case 'q':

dash(); dash(); dot(); dash();

break;

case 'r':

dot(); dash(); dot();

break;

case 's':

dot(); dot(); dot();

break;

case 't':

dash();

break;

case 'u':

dot(); dot(); dash();

break;

case 'v':

dot(); dot(); dot(); dash();

break;

case 'w':

dot(); dash(); dash();

break;

case 'x':

dash(); dot(); dot(); dash();

break;

case 'y':

dash(); dot(); dash(); dash();

break;

case 'z':

dash(); dash(); dot(); dot();

break;

case ' ':

wordEnd();

break;

}

 

letterEnd();

}

 

void setup()

{

pinMode(ledPin, OUTPUT);

}

 

void loop()

{

morseWord(theword);

}

 

Музыка

 

/* This example uses a piezo speaker to play melodies. It sends

* a square wave of the appropriate frequency to the piezo, generating

* the corresponding tone.

*

* The calculation of the tones is made following the mathematical

* operation:

*

* timeHigh = period / 2 = 1 / (2 * toneFrequency)

*

* where the different tones are described as in the table:

*

* note frequency period timeHigh

* c 261 Hz 3830 1915

* d 294 Hz 3400 1700

* e 329 Hz 3038 1519

* f 349 Hz 2864 1432

* g 392 Hz 2550 1275

* a 440 Hz 2272 1136

* b 493 Hz 2028 1014

* C 523 Hz 1912 956

*

*

*/

 

int speakerPin = 8;

 

int length = 295; // the number of notes

char notes[] = " EE E CE G g C g e a b ia gEGA FG E CDb C g e a b ia gEGA FG E CDb GNFR E uaC aCD GNFR E 1 11 GNFR E uaC aCD L D C CC C CD EC ag CC C CDE CC C CD EC ag EE E CE G g C g e a b ia gEGA FG E CDb C g e a b ia gEGA FG E CDb EC g u aF Fa bAAAGFEC ag EC g u aF Fa bF FFEDCe ec "; // a space represents a rest

float beats[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, //Page 1

2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 2, 4, //Page 2

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, //Page4

1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, //Page 5

1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1.3, 1.3, 1.3, 1.3, 1.3, 1.3, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1.3, 1.3, 1.3, 1, 1, 1, 1, 1, 1, 2 }; //Page 6

 

int tempo = 95;

 

void playTone(int ton1, int duration) {

for (long i = 0; i < duration * 1000L; i += ton1) {

tone(speakerPin, ton1);

delayMicroseconds(ton1);

}

noTone(speakerPin);

}

 

void playNote(char note, int duration) {

// c c# d d# e f f# g g# a a# b

char names[] = { ' ', '! ', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C', 'D', 'E', 'F', 'G', 'A', 'B', 'i', 'N', 'R', 'u', '1', 'L', 'k'}; // [i = b flat] [N = G flat] [R = D#] [u = g#] [1 = C oct. 5] [L = E flat]

int tones[] = { 0, 1046, 138, 146, 155, 164, 174, 184, 195, 207, 220, 233, 246, 261, 293, 329, 349, 391, 440, 493, 523, 587, 659, 698, 783, 880, 987, 466, 740, 622, 415, 1046, 622u, 227};

 

// play the tone corresponding to the note name

for (int i = 0; i < 34; i++) {

if (names[i] == note) {

playTone(tones[i], duration);

}

}

}

 

void setup() {

pinMode(speakerPin, OUTPUT);

}

 

void loop() {

for (int i = 0; i < length; i++) {

if (notes[i] == ' ') {

delay(beats[i] * tempo); // rest

} else {

playNote(notes[i], beats[i] * tempo);

}

 

// pause between notes

delay(tempo / 2);

}

}

 

На 4 занятии требовалось заставить светодиод плавно затухать, сделать радугу и улучшить её так, что бы она включалась и выключалась по нажатию на кнопку.

 

Затухание светодиода

 

int brightness = 0; // изначальная яркость светодиода

int fadeAmount = 45; // скорость затухания/нарастания// яркости

void setup()

{

// инициализируем пин 9, как работающий на выход

pinMode(9, OUTPUT);

pinMode(10, OUTPUT);

}

 

void loop()

{

// изменяем яркость светодиода

analogWrite(9, brightness);

analogWrite(10, brightness);

// на каждом шаге увеличиваем яркость

// на скорость затухания

brightness = brightness + fadeAmount;

// в конце затухания меняем его на

// нарастание яркости и наоборот

 

if (brightness == 0 || brightness == 255)

 

fadeAmount = -fadeAmount;

delay(30);

for (int x = 1; x < = 10; x++)

 

delay(30);

 

// ждём 30 миллисекунд

delay(30);

}

 

Радуга

 

int brightness = 255; // текущее значение яркости

int fadeAmount = 5; // скорость затухания

 

// пины, на которых расположен светодиод

int leds[3] = {9, 10, 11};

// индексы пинов, с которыми мы работаем

// в текущий момент

int curPin[2] = {0, 1};

 

void setup()

{

for(int i = 0; i < 3; i++)

pinMode(leds[i], OUTPUT);

}

 

void loop()

{

// подаём на два разных пина значение равное

// brightness и 255-brightness

analogWrite(leds[curPin[0]], brightness);

analogWrite(leds[curPin[1]], 255 - brightness);

 

// уменьшаем значение brightness

// на скорость затухания

brightness = brightness - fadeAmount;

 

// когда значение brightness становится равным

// нулю, меняем номера пинов, с которыми мы

// работаем

if (brightness == 0) {

curPin[0] = (curPin[0] + 1) % 3;

curPin[1] = (curPin[1] + 1) % 3;

brightness = 255;

}

 

delay(30);

}

 

Радуга на кнопку

 

// состояние светодиода

// пины, на которых расположен светодиод

int leds[3] = {9, 10, 11};

boolean ledState = LOW;

 

// предыдущее состояние кнопки

boolean lastButtonState = HIGH;

// в текущий момент

int curPin[2] = {0, 1};

void setup()

{

for(int p = 0; p< 3; p++)

pinMode(leds[p], OUTPUT);

pinMode(buttonPin, INPUT);

}

 

void loop()

{

boolean reading = digitalRead(buttonPin);

 

if (reading! = lastButtonState) {

delay(100);

reading = digitalRead(buttonPin);

if(reading! = lastButtonState){

 

lastButtonState = reading;

if (reading) {

ledState =! ledState;

for(int i = 0; i< 3; i++)

digitalWrite(leds[i], ledState);

}

}

}

if (ledState == HIGH) {

//for(int i = 0; i< 3; i++)

//digitalWrite(leds[i], ledState);

analogWrite(leds[curPin[0]], brightness);

analogWrite(leds[curPin[1]], 255 - brightness);

brightness = brightness - fadeAmount;

if (brightness == 0) {

curPin[0] = (curPin[0] + 1) % 3;

curPin[1] = (curPin[1] + 1) % 3;

brightness = 255;

}

 

delay(30);

} else {

}

}

На 6 занятии требовалось с помощью потенциометра научиться управлять яркостью светодиода.

 

Яркость

 

int potPin = A2; // Аналоговый пин с потенциометром

int ledPin = 6; // Цифровой пин со светодиодом

int val = 0; // Значение потенциометра

int vall;

 

void setup()

{

pinMode(ledPin, OUTPUT);

Serial.begin(9600);

vall = analogRead(potPin);

vall /= 4;

}

 

void loop()

{

val = analogRead(potPin);

val /= 4;

analogWrite(ledPin, val);

if ((Serial.available() > 0) & & (vall! = val)) {

Serial.println(val);

int b = Serial.read();

vall = val;

}

}

 

На 7 занятии требовалось заставить светодиод гореть, при помощи датчика термистора, и при любом освещении при помощи фоторезистора.

 

Датчик температуры

 

int termPin = A5; // Аналоговый пин с термистором

int A[3] = {7, 5, 6};

int t;

 

void setup()

{

for (int i = 0; i < = 3; i++) {

pinMode(A[i], OUTPUT);

digitalWrite(A[i], LOW);

}

}

 

void loop()

{

t = 400;

for (int i = 0; i< = 3; i++) {

if (analogRead(termPin) < t) {

digitalWrite(A[i], HIGH);

}

t -= 20;

}

 

delay (100);

t = 400;

for (int i = 0; i< = 3; i++) {

if (analogRead(termPin) > t) {

digitalWrite(A[i], LOW);

}

t -= 20;

}

}

 

Датчик света

 

 

int lightPin = A5; // Аналоговый пин с фоторезистором

int A[3] = {6, 7, 8};

int l;

 

void setup()

{

for (int i = 0; i < = 3; i++) {

pinMode(A[i], OUTPUT);

digitalWrite(A[i], LOW);

}

}

 

void loop()

{

l = 26;

for (int i = 0; i < =3; i++) {

if (analogRead(lightPin) > l) {

digitalWrite(A[i], HIGH);

} else {

digitalWrite(A[i], LOW);

}

l -= 2;

}

}

 

На 8 занятии требовалось вывести цифры от 1 до 15 в 16-ричной системе счисления, при помощи индикатора.

 

Цифры

 

/*

5-й пин - точка

6-й пин - нижний правый светодиод (c)

7-й пин - нижний светодиод (d)

8-й пин - нижний левый светодиод (e)

9-й пин - верхний правый светодиод (b)

10-й пин - верхний светодиод (a)

11-й пин - верхний левый светодиод (f)

12-й пин - средний свтеодиод (g)

*/

int s = 0;

int pins[8] = {5, 6, 7, 8, 9, 10, 11, 12};

int buttonPin = 2; // пин с кнопкой

boolean lastButtonState = LOW;

boolean state = LOW;

 

boolean digits[16][7] = {

{1, 1, 1, 1, 1, 1, 0}, //0

{1, 0, 0, 1, 0, 0, 0}, //1

{0, 1, 1, 1, 1, 0, 1}, //2

{1, 1, 0, 1, 1, 0, 1}, //3

{1, 0, 0, 1, 0, 1, 1}, //4

{1, 1, 0, 0, 1, 1, 1}, //5

{1, 1, 1, 0, 1, 1, 1}, //6

{1, 0, 0, 1, 1, 0, 0}, //7

{1, 1, 1, 1, 1, 1, 1}, //8

{1, 1, 0, 1, 1, 1, 1}, //9

{1, 0, 1, 1, 1, 1, 1}, //a

{1, 1, 1, 0, 0, 1, 1}, //b

{0, 1, 1, 0, 1, 1, 0}, //c

{1, 1, 1, 1, 0, 0, 1}, //d

{0, 1, 1, 0, 1, 1, 1}, //e

{0, 0, 1, 0, 1, 1, 1}, //f

 

};

 

/*

Процедура, отображающая на индикаторе

определённую цифру

*/

void showDigit(int num)

{

// Пробегаемся по элементам массива digits

// и смотрим, если на i-м месте этого элемента

// стоит 1, включаем соответствующий пин,

// если 0 - выключаем

for (int i = 0; i < 7; i++)

digitalWrite(pins[i+1], digits[num][i]);

}

 

void setup()

{

pinMode(buttonPin, INPUT);

// Для каждого светодиода в индикаторе

// инициализируем пин, соответствующий ему,

// как работающий на вывод

for (int i = 0; i < 8; i++)

pinMode(pins[i], OUTPUT);

}

 

void loop() {

while (s < = 15) {

// считываем показание кнопки

boolean reading = digitalRead(buttonPin);

 

// если состояние кнопки изменилось,

// ждём 100 мс и проверяем ещё раз

if (reading! = lastButtonState) {

// ждём

delay(5);

 

// снова считываем показание кнопки

reading = digitalRead(buttonPin);

 

// если текущее состояние снова не

// равно предыдущему, значит это не шум

if(reading! = lastButtonState){

// запоминаем новое состояние кнопки

// для последующего прогона loop

lastButtonState = reading;

}

}

 

// Пробегаем все цифры от 0 до 9 и выводим их

// После каждой ждём одну секунду

 

if (reading) {

state =! state;

}

showDigit(s);

if (state == HIGH) {

s++;

}

if (s == 15) {

s = 0;

}

delay(200);

}

}

 

На 9 занятии требовалось вывести данные о подгруппе используя ЖК дисплей.

 

Дисплей

 

 

#include < LiquidCrystal.h>

int val = 0;

int backlight = 3;

int pPin = A2;

int i = 0;

LiquidCrystal lcd(4, 6, 10, 11, 12, 13);

 

void setup()

{

pinMode(backlight, OUTPUT);

digitalWrite(backlight, HIGH);

 

lcd.begin(16, 2);

}

void loop()

{

val=analogRead(pPin);

lcd.print(" \x42\xbb" " a\xe3");

lcd.setCursor(val, 1);

lcd.print(" \x12" " a\vg3" " a " " 3pr6" " ");

delay(100);

lcd.setCursor(val, 0);

lcd.print(" ");

lcd.setCursor(val, 1);

lcd.print(" ");

}

 

На 10 занятии требовалось, научиться управлять сервоприводом при помощи потенциометра и при помощи кнопки.

 

Потенциометр

 

 

// Подключаем библиотеку Servo.h

// для работы с серводвигателями

#include < Servo.h>

 

// Создаём объект класса Servo

// из библиотеки Servo.h

Servo myservo;

 

int potPin = A2; // Аналоговый пин с потенциометром

 

// Вспомогательная переменная с

// текущим углом

int val = 0;

 

void setup()

{

// Обозначаем, что серводвигатель

// подсоединён к 9-му пину

myservo.attach(9);

}

 

 

void loop()

{

val = analogRead(potPin);

 

// Т.к. значение аналогового сигнала варьируется

// от 0 до 1023, а ШИМ-сигнала - от 0 до 255,

// поделим полученное значение на 4

 

myservo.write(val/5.6);

delay(10);

 

}

 

Кнопка

 

 

// Подключаем библиотеку Servo.h

// для работы с серводвигателями

#include < Servo.h>

 

// Создаём объект класса Servo

// из библиотеки Servo.h

Servo myservo;

 

// Вспомогательная переменная с

// текущим углом

int pos = 0;

int buttonPin = 2; // пин с кнопкой

boolean lastButtonState = HIGH;

void setup()

{

// Обозначаем, что серводвигатель

// подсоединён к 9-му пину

myservo.attach(9);

}

void loop()

{

// считываем показание кнопки

 

boolean reading = digitalRead(buttonPin);

 

// если состояние кнопки изменилось,

// ждём 100 мс и проверяем ещё раз

if (reading! = lastButtonState) {

 

// Пробегаем все значения от 0 до 180 градусов

// по одному градусу на каждом шаге

 

 

pos += 10;

// Даём команду серво повернуться на

// заданный угол

myservo.write(pos);

// Ждём 15 мс, пока серво повернётся на 1°.

// Время поворота зависит от модели сервы,

// 15 мс — просто подобранная величина

delay(50);

// снова считываем показание кнопки

reading=digitalRead(buttonPin);

 

// если текущее состояние снова не

// равно предыдущему, значит это не шум

if(reading! = lastButtonState){

// запоминаем новое состояние кнопки

// для последующего прогона loop

lastButtonState = reading;

}

 

}

if (reading) {

lastButtonState =! lastButtonState;

 

 

delay(50);

}

 

if (pos == 180) {

pos =0;

}

delay(50);

}

 

 

На 11 занятии требовалось научиться управлять двигателем, при помощи кнопки.

 

Двигатель

 

 

int motorPin = 12; // Пин с транзистором

 

void setup()

{

// Инициализируем пин, к которому подключён

// транзистор, как работающий на вывод

pinMode(motorPin, OUTPUT);

}

 

void loop()

{

// Закрываем «кран» на 2 секунды

digitalWrite(motorPin, LOW);

delay(2000);

// Открываем «кран» на 2 секунды

digitalWrite(motorPin, HIGH);

delay(2000);

 

Двигатель на кнопку

 

 

int motorPin = 12; // Пин с транзистором

int buttonPin = 2; // пин с кнопкой

boolean lastButtonState = HIGH;

void setup()

{

// Инициализируем пин, к которому подключён

// транзистор, как работающий на вывод

pinMode(motorPin, OUTPUT);

}

 

void loop()

{

// считываем показание кнопки

boolean reading = digitalRead(buttonPin);

// если состояние кнопки изменилось,

// ждём 100 мс и проверяем ещё раз

if (reading! =lastButtonState) {

// Считываем значение потенциометра

// и делим его на 4, т.к. значение analogRead

// варьируется от 0 до 1023, а значение

// снова считываем показание кнопки

reading=digitalRead(buttonPin);

delay(0.5);

// если текущее состояние снова не

// равно предыдущему, значит это не шум

if(reading & &! lastButtonState){

delay(0.5);

lastButtonState = reading;

}

}

if (reading) {

lastButtonState =! lastButtonState;

int val = analogRead(buttonPin);

analogWrite(motorPin, val);

 

}}

 

И на 12 занятии требовалось сьбрать и запрограммировать робота, что бы он ездил по черной линии.

 

Код

 

int leftLinePin = 10;

int rightLinePin = 11;

 

int leftDirPin = 4;

int leftSpeedPin = 5;

 

int rightDirPin = 7;

int rightSpeedPin = 6;

 

int runSpeed = 50;

 

void setupMotorShield()

{

pinMode(leftDirPin, OUTPUT);

pinMode(leftSpeedPin, OUTPUT);

pinMode(rightDirPin, OUTPUT);

pinMode(rightSpeedPin, OUTPUT);

}

void go()

{

analogWrite(leftSpeedPin, runSpeed);

analogWrite(rightSpeedPin, runSpeed);

}

 

void stop()

{

analogWrite(leftSpeedPin, 0);

analogWrite(rightSpeedPin, 0);

}

 

void goForward()

{

digitalWrite(leftDirPin, HIGH);

digitalWrite(rightDirPin, HIGH);

go();

}

 

void turnLeft()

{

digitalWrite(leftDirPin, LOW);

digitalWrite(rightDirPin, HIGH);

go();

}

void turnRight()

{

digitalWrite(leftDirPin, HIGH);

digitalWrite(rightDirPin, LOW);

go();

}

void setup()

{

setupMotorShield();

}

 

void loop()

{

// Считываем данные с сенсоров

boolean whiteLeft = digitalRead(leftLinePin);

boolean whiteRight = digitalRead(rightLinePin);

 

if (whiteLeft & & whiteRight) {

// Под обоими датчиками белый цвет. Видимо

// линия прямо под нами. Полный вперёд!

goForward();

} else if (! whiteLeft & &! whiteRight) {

// Что-то не то: под обоими датчиками чёрный

// цвет. Видимо мы выехали за пределы трассы.

// Лучше остановиться

stop();

} else if (whiteRight) {

// Под левым датчиком — чёрный, под правым —

// белый. Чтобы выровняться, нужно начать

// поворот налево

turnLeft();

} else {

// Последний оставшийся вариант. Под левым

// датчиком — белый, под правым — чёрный.

// Чтобы выровняться, нужно начать поворот

// направо

turnRight();

}

}

Для работы всего выше перечисленного были использованы следующие детали, указанные в таблице ниже.

 

Наименование радиодетали Характеристика Количество(шт)
  Резистор Тоненькая трубка, показывающая сопротивление тока. 1)Трубки(красный, красный, коричневый, тёмно-жёлтый)=0.21, кол-во 60. 2)Трубки(жёлтый, чёрный, коричневый, тёмно-жёлтый)=97, кол-во 20 3)Трубки(оранжевый, чёрный, коричневый, золотой)=0.95 Кол-во 40    
  Светодиод Красный Желтый Зеленый  
  Пьезоэлемент Пищалка  
  Кнопка    
  Потенциометр Переменный резистор  
  Термистор Сопротивление меняется от температуры  
  Фоторезистор Сопротивление меняется в зависимости от освещенности  
  Семисегментный индикатор Отображает цифры и символы  
  ЖК-дисплей Отображает цифры, буквы и символы  
  Платформа Крепёжная платформа для деталей  
  Плата      
  Двигатель Движущий элемент  
  Колёса    
  Балансир    

 

<== предыдущая лекция | следующая лекция ==>
И капиталистическими государствами | Общая характеристика предприятия.




© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.