top of page

Видео уроки

Обучение работе с микроконтроллером Ардуино. Автор Jeremy Blum. Перевод Amperka.ru
Урок 1. Первые шаги
Урок 2.1. Кнопки, PWM / ШИМ, функции
Урок 2.2. Кнопки, PWM / ШИМ, функции
Урок 3. Основы схемотехники
Урок 4.1. Аналоговые входы 
Урок 4.2. Аналоговые входы
Урок 5. Моторы и транзисторы
Урок 5.2. Моторы и транзисторы
Примеры скетчей

Включение/выключение светодиода на 13 пине

int outputPin = 13;                //здесь храним номер контакта
int val;                           //здесь будет храниться принятый символ

void setup()
{
  Serial.begin(9600);              //установка порта на скорость 9600 бит/сек
  pinMode(outputPin, OUTPUT);      //устанавливаем 13 контакт в режим вывода
}

void loop()
{
  if (Serial.available()) {         //если есть принятый символ,
    val = Serial.read();            //  то читаем его и сохраняем в val
    if (val == 'H') {               //  если принят симовол 'H',...
      digitalWrite(outputPin, HIGH);//  то включаем светодиод
    }
    if (val == 'L') {               //  если принят симовол 'L',
      digitalWrite(outputPin, LOW); //    то выключаем светодиод
    }
  }
}

Включение трёх светодиодов с клавиатуры ПК

void setup() {
 
  Serial.begin(9600);                                               // подключаем серийную передачу данных на скорости 9600 бод:
   
      for (int thisPin = 9; thisPin <= 13; thisPin++) {    //при помощи цикла For и переменной thisPin перебираем порты от 9 до 13
        pinMode(thisPin, OUTPUT);                            // и задаем им режим работы - выход
      }
}
 
void loop() {
  
  if (Serial.available() > 0) {                            //если в порту появляется информация то считываем ее в переменную inByte
    int inByte = Serial.read();
 
    switch (inByte) {                                         // оператор выбора действия в зависимости от значения переменной inByte

                                     
    case 'a':                                                      // если inByte равно 'а', то выполняем все строчки до команды break
      digitalWrite(9, HIGH);
      delay (200);
      break;
    case 'b':                                                      // если inByte равно 'b', то выполняем все строчки до команды break
      digitalWrite(10, HIGH);   
      delay (200);
      break;
    case 'c':                                                       // если inByte равно 'c', то выполняем все строчки до команды break
      digitalWrite(11, HIGH);
      delay (200);
      break;

   default:                                                           // если inByte не равно ни одному из кейсов, то делаем то, что указано ниже
       
       
      for (int thisPin = 9; thisPin < 12; thisPin++)   // при помощи цикла перебираем все пины от 9 до 12 и..

       { 
        digitalWrite(thisPin, LOW);                        //  отправляем на них низкий сигнал
      }
      
    }
  }
}
 

Синтаксис:

switch (var) {

 case label:

    // код для выполнения

    break;

 case label:

    // код для выполнения

    break;

 default:

    // код для выполнения

}

Алгоритмы

Массивы

UART

Символы

#include <math.h>
#define TERMIST_B 4300 
#define VIN 5.02
#include <Wire.h>                  // подключаем библиотеку Wire
#include <LiquidCrystal_I2C.h>     // подключаем библиотеку LiquidCrystal_I2C
float temperature1;
float temperature2;

byte bukva_P[8]   = {B11111,B10001,B10001,B10001,B10001,B10001,B10001,B00000,}; // Буква "П"

LiquidCrystal_I2C lcd(0x3F,16,2);  //создаем объект типа lcd с адресом 0x3F, 16 символов, 2 строки
 
void setup()
{
    Serial1.begin(19200);
    Serial.begin(19200);         // связь с компом
    lcd.init();                  // инициализация дисплея
    lcd.backlight();             // включение подсветки дисплея
 
    // Настраиваем приём сообщений с других устройств
    // Между командами даём время на их обработку
    Serial1.print("AT+CMGF=1\r");
    delay(300);
    Serial1.print("AT+IFC=1, 1\r");
    delay(300);
    Serial1.print("AT+CPBS=\"SM\"\r");
    delay(300);
    Serial1.print("AT+CNMI=1,2,2,1,0\r");
    delay(500);
}
 
String currStr = "";
// Переменная принимает значение True, если текущая строка является сообщением
boolean isStringMessage = false;
 
void loop()
{

   float voltage1 = analogRead(A0) * VIN / 1024.0; // считываем датчик 1 и вычисляем напряжение на нем
   float voltage2 = analogRead(A1) * VIN / 1024.0; // считываем датчик 2 и вычисляем напряжение на нем
   float r1 = voltage1 / (VIN - voltage1); // вычисляем сопротивление термистора1
   float r2 = voltage2 / (VIN - voltage2); // вычисляем сопротивление термистора2
   float temperature1 = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273; // вычисляем температуру 1
   float temperature2 = 1./( 1./(TERMIST_B)*log(r2)+1./(25. + 273.) ) - 273; // вычисляем температуру 2


     lcd.createChar(1, bukva_P);      // Создаем символ под номером 1, буква П
  
 //Serial.print("аналог  ");
 //Serial.println(voltage);
  lcd.setCursor(0, 0);         
  lcd.print("TEM\1 1");    
  lcd.setCursor(0, 1);         
  lcd.print(temperature1);    
  
  lcd.setCursor(9, 0);         //устанавливаем курсор в нулевую позицию первой строки (не забываем, что строки тоже считаются от нуля, т.е.                                                //верхняя строчка это нулевая, а нижняя это первая
  lcd.print("\1");    // выводим на экран встроенный в Ардуину секундомер
  lcd.setCursor(9, 1);         //устанавливаем курсор в нулевую позицию первой строки (не забываем, что строки тоже считаются от нуля, т.е.                                                //верхняя строчка это нулевая, а нижняя это первая
  lcd.print(temperature2);    // выводим на экран встроенный в Ардуину секундомер

  
    if (!Serial1.available())
        return;
 
    char currSymb = Serial1.read();    
    if ('\r' == currSymb) {
        if (isStringMessage) {
            //если текущая строка - SMS-сообщение,
            //отреагируем на него соответствующим образом
            if (!currStr.compareTo("temp1")) {

                 Serial1.print("AT+CMGF=1\r");
                 delay(100); // даём время на усваивание команды
                 // Устанавливаем адресата: телефонный номер в международном формате
                 Serial1.println("AT + CMGS = \"+79223393568\"");
                 delay(100);
                 // Пишем текст сообщения
                 Serial1.println(temperature1);
                 delay(100);
                 // Отправляем Ctrl+Z, обозначая, что сообщение готово
                 Serial1.println((char)26);

            } else if (!currStr.compareTo("temp2")) {


                 Serial1.print("AT+CMGF=1\r");
                 delay(100); // даём время на усваивание команды
                      // Устанавливаем адресата: телефонный номер в международном формате
                 Serial1.println("AT + CMGS = \"+79223393568\"");
                 delay(100);
                 // Пишем текст сообщения
                 Serial1.println(temperature2);
                 delay(100);
                 // Отправляем Ctrl+Z, обозначая, что сообщение готово
                 Serial1.println((char)26);

              
            } else if (!currStr.compareTo("temp")) {

                 Serial1.print("AT+CMGF=1\r");
                 delay(100); // даём время на усваивание команды
                      // Устанавливаем адресата: телефонный номер в международном формате
                 Serial1.println("AT + CMGS = \"+79223393568\"");
                 delay(100);
                 // Пишем текст сообщения
                 Serial1.print("temp vhod ");
                 Serial1.println(temperature1);
                 Serial1.print("temp vihod ");
                 Serial1.println(temperature2);
                 delay(100);
                 // Отправляем Ctrl+Z, обозначая, что сообщение готово
                 Serial1.println((char)26);
              
               
            }
            isStringMessage = false;
        } else {
            if (currStr.startsWith("+CMT")) {
                //если текущая строка начинается с "+CMT",
                //то следующая строка является сообщением
                isStringMessage = true;
            }
        }
        currStr = "";
    } else if ('\n' != currSymb) {
        currStr += String(currSymb);
    }
}

bottom of page