
- •Основные блоки стандартного микроконтроллера с указанием их функций.
- •Отличия архитектур процессоров risc и cisc.
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup() {
- •Void loop() {
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop() {
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
- •Void setup()
- •Void loop()
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();
}