Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Функции Arduino

analogRead()
analogWrite()
bit()
bitClear()
bitRead()
bitSet()
bitWrite()
ceil()
cos()
delay()
digitalRead()
digitalWrite()
floor()
loop()
map()
max()
millis()
min()
pinMode()
pow()
random()
setup()
sin()
shiftOut()
sqrt()
tan()
tone()
Serial
  available()
  begin()
  flush()
  print()
  println()
  read()
  write()

analogRead()


analogRead(pinA)

Функция analogRead() возвращает целочисленное значение в диапазоне от 0 до 1023, пропорциональное напряжению, поданному на аналоговый вход, номер которого мы передаем функции в качестве параметра pinA. В большинстве плат это порты 0-5. В платах Mini и Nano: 0-7, в плате Mega: 0-15.

analogWrite()


void analogWrite(pin, value) 

Устанавливает аналоговое значение PWM (ШИМ, Широтно-импульсная модуляция) для вывода. Используется для плавного изменения цвета у светодиода или скорости вращения мотора. Пины с поддержкой PWM обозначены на плате символом тильда (~). Для Arduino Uno выводы имеют номера 3, 5, 6, 9, 10 и 11.

Перед вызовом данной функции нет необходимости вызывать функцию pinMode().

Функция не возвращает значения и имеет два параметра.

  • pin - номер вывода для отправки сигнала
  • value - значение яркости от 0 (полностью выключен) до 255 (полная яркость) (значение скважности ШИМ)

bit()

Функция возвращает значение бита в указанной позиции.

Общий пример для функций с битами.


byte flags = 0;

void setFlag(int flagNumber)
{
    bitSet(flags, flagNumber);
}

void clearFlag(int flagNumber)
{
    bitClear(flags, flagNumber);
}

int getFlag(int flagNumber)
{
    return bitRead(flags, flagNumber);
}

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    flags = 0; // clear all flags
    showFlags();
    setFlag(2); // set some flags;
    setFlag(5);
    showFlags();
    clearFlag(2);
    showFlags();
    delay(10000); // wait a very long time
}

// reports flags that are set
void showFlags()
{
    for(int flag = 0; flag < 8; flag++){
        if (getFlag(flag) == true)
            Serial.print("* bit set for flag ");
        else
            Serial.print("bit clear for flag ");
		
        Serial.println(flag);
    }
	Serial.println();
}

// Результат
bit clear for flag 0
bit clear for flag 1
bit clear for flag 2
bit clear for flag 3
bit clear for flag 4
bit clear for flag 5
bit clear for flag 6
bit clear for flag 7
bit clear for flag 0
bit clear for flag 1
* bit set for flag 2
bit clear for flag 3
bit clear for flag 4
* bit set for flag 5
bit clear for flag 6
bit clear for flag 7
bit clear for flag 0
bit clear for flag 1
bit clear for flag 2
bit clear for flag 3
bit clear for flag 4
* bit set for flag 5
bit clear for flag 6
bit clear for flag 7

bitClear()

Функция устанавливает 0 в указанной позиции у числа.

bitRead()


bitRead(x, n) 

Функция считывает биты с указанного числа. Возвращает значение бита (0 или 1)

  • x - число, которое нас интересует
  • n - какой бит нужно считать

bitSet()

Функция устанавливает бит в указанном числе в указанной позиции.

bitWrite()

Функция записывает бит в указанной позиции.

ceil()

Функция находит ближайшее целое число к числу x, но не меньше чем само число x.


Serial.println( ceil(1) ); // 1.00
Serial.println( ceil(1.1) ); // 2.00
Serial.println( ceil(0) ); // 0.00
Serial.println( ceil(.1) ); // 1.00
Serial.println( ceil(-1) ); // -1.00
Serial.println( ceil(-1.1) ); // -1.00

cos()

Функция находит косинус угла в радианах. Значение находится в интервале от -1 до 1.

delay()


void delay(ms) 

Функция делает паузу в программе на указанное количество времени в миллисекундах , которое указывается в единственном параметре. Не возвращает значения.

  • ms - число миллисекунд для установки паузы (unsigned long). 1000 миллисекунд = 1 сек

digitalRead()


digitalRead(pin)

Функция digitalRead() считывает показания с цифрового вывода. Возвращается HIGH (высокое, 1) или LOW (низкое, 0):

  • pin — номер цифрового порта, на который мы отправляем сигнал

digitalWrite()


void digitalWrite(pin, value)

Функция digitalWrite() не возвращает значения и принимает два параметра:

  • pin — номер цифрового порта, на который мы отправляем сигнал
  • value — значение, которое мы отправляем на порт. Для цифровых портов значением может быть HIGH (высокое, 1) или LOW (низкое, 0)

floor()

Функция находит ближайшее целое число к числу x, но не больше чем само число x.


Serial.println( floor(1) ); // 1.00
Serial.println( floor(1.9) ); // 1.00
Serial.println( floor(0) ); // 0.00
Serial.println( floor(.1) ); // 0.00
Serial.println( floor(-1) ); // -1.00
Serial.println( floor(-1.1) ); // -2.00

loop()


void loop()

После выполнения setup() запускается функция loop(), которая выполняется в бесконечном цикле.

Функция loop() должна присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — просто не пишите ничего между фигурными скобками.

map()


map(value, fromLow, fromHigh, toLow, toHigh)

Преобразует число из одного диапазона в другой диапазон. Т.е. значение из fromLow попадёт в toLow, значение fromHigh попадёт в toHigh, а значения между ними пропорционально попадут в новые значения другого диапазона.

Нижнее значение диапазона может быть больше или меньше верхнего значения. Функция map() в таких случаях может работать в обратном порядке. Например.


y = map(x, 1, 50, 50, 1);

Также допускаются отрицательные числа.


y = map(x, 1, 50, 50, -100); 

Функция использует целые числа и не генерирует дробные числа. Дробные числа усекаются до целых.

  • value - число для конвертации
  • fromLow - нижнее значение текущего диапазона
  • fromHigh - верхнее значение текущего диапазона
  • toLow - нижнее значение нового диапазона
  • toHigh - верхнее значение нового диапазона

Возвращается новое значение после преобразования.


/* Map an analog value to 8 bits (0 to 255) */
void setup() {}

void loop()
{
  int val = analogRead(0);
  val = map(val, 0, 1023, 0, 255);
  analogWrite(9, val);
}

max()

Функция возвращает большее из двух чисел.


int myValue = analogRead(A0); // получим какое-то значение с аналогового порта 
int maxValue = min(myValue, 200); // сравним с некоторым значением и узнаем, какое из них больше

millis()


millis()

Функция без параметров возвращает число миллисекунд (unsigned long), прошедших с запуска Arduino.

Пример


unsigned long time;

void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.print("Time: ");
  time = millis();
  //prints time since program started
  Serial.println(time);
  // wait a second so as not to send massive amounts of data
  delay(1000);
}

min()

Функция возвращает меньшее из двух чисел.


int myValue = analogRead(A0); // получим какое-то значение с аналогового порта 
int minValue = min(myValue, 200); // сравним с некоторым значением и узнаем, какое из них меньше

pinMode()


void pinMode(pin, mode)

Функция pinMode() устанавливает режим для портов.

  • pin - вывод, с которым мы собираемся работать
  • mode - как должен работать указанный вывод: работать на выход (OUTPUT) или вход (INPUT) или INPUT_PULLUP

pow()

Функция для возведения числа в степень.


void setup() {
  Serial.begin(9600);
  int z = pow(2, 3);
  Serial.println(z); // 8
}

void loop() {}

random()


random(max)
random(min, max) 

Функция генерирует псевдослучайные числа.

  • min - нижняя граница случайных значений
  • max - верхняя граница случайных значений

Функция возвращает случайное число между min и max-1 (long)

Пример


char* catNames[] = {
  "Барсик",
  "Васька",
  "Мурзик",
  "Рыжик"
};

void setup() {
  Serial.begin(9600);
}

void loop() {
  int delayPeriod = random(2000, 5000);
  delay(delayPeriod);
  int index = random(4);
  Serial.println(catNames[index]);
}

setup()


void setup()

Функция setup() выполняется один раз при запуске микроконтроллера. Обычно она используется для конфигурации портов микроконтроллера и других настроек.

Функция setup() должна присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — просто не пишите ничего между фигурными скобками.

sin()

Функция находит синус угла в радианах. Значение находится в интервале от -1 до 1.

shiftOut()

В качестве третьего аргумента передаётся параметр bitOrder (порядок битов), который определяет в какой последовательности подаваемые биты будут интерпретироваться регистром — в прямом или обратном. LSBFIRST (Least Significant Bit First) — означает, что вывод в регистр начнётся с последнего бита. Например, при передаче байта 00010111 на выходах регистра окажутся значения (с 1 по 8 пины) — 00010111. MSBFIRST (Most Significant Bit First) — означает, что вывод в регистр начнётся с первого бита. При передаче байта 00010111 на выходах регистра окажутся значения в обратном порядке (с 1 по 8 пины) — 11101000.

sqrt()

Функция извлекает корень из числа.


void setup() {
  Serial.begin(9600);
  int z = sqrt(16);
  Serial.println(z); // 4
}

void loop() {}

tan()

Функция находит тангенс угла в радианах.

tone()


tone(pin, frequency) 
tone(pin, frequency, duration)

Генерирует звук заданной частоты на указанном пине. Можно указать продолжительность звука. Если продолжительность не указана, то остановить воспроизведение можно с помощью функции noTone(). Вывод можно соединить с пьезопищалкой или другим устройством, способным выводить звук.

Можно выводить только одну ноту во время исполнения.

  • pin - вывод платы для воспроизведения звука
  • frequency - частота звука в герцах (unsigned int)
  • duration - продолжительность в миллисекундах (необязательно) - unsigned long

Функция не возвращает значения.

Serial

Класс, позволяющий общаться с компьютером.

available()


Serial.available() 

//Arduino Mega only: 
Serial1.available() 
Serial2.available() 
Serial3.available()

Получает число байт (символов), доступных для чтения из последовательного порта. Данные уже пришли и хранятся в специальном буфере (64 байта).

begin()


void Serial.begin(speed)

Устанавливает связь с портом для считывания данных на заданной скорости с Arduino на ваш компьютер. В IDE есть выпадающий список, в котором можно увидеть возможные варианты скоростей.

  • speed - скорость бит в секунду (long)

flush()


Serial.flush(); // Очищаем буфер

Очищает входной буфер последовательного порта. Находящиеся в буфере данные теряются, и дальнейшие вызовы Serial.read() или Serial.available() будут иметь смысл для данных, полученных после вызова Serial.flush().

print()


Serial.print(val) 
Serial.print(val, format) 

Печатает данные, поступаемые с серийного порта в виде ASCII-текста без символа перевода строки. Схожа с функцией Serial.println().

  • val - значение для печати
  • format - формат выводимых данных. Можно использовать константы DEC (десятичная система), HEX (шестнадцатеричная), OCT (восьмеричная), BIN (бинарная)

println()


Serial.println(val) 
Serial.println(val, format) 

Печатает данные, поступаемые с серийного порта в виде ASCII-текста. Данные заканчиваются символом перевода строки (ASCII 13, '\r') и новой строки (ASCII 10, '\n'). Схожа с функцией Serial.print().

  • val - значение для печати
  • format - формат выводимых данных. Можно использовать константы DEC (десятичная система), HEX (шестнадцатеричная), OCT (восьмеричная), BIN (бинарная)

Serial.println(10, BIN);  // 1010
Serial.println(10, HEX);  // A
Serial.println(10, OCT);  // 12

read()


Serial.read()

//Arduino Mega only: 
Serial1.read() 
Serial2.read() 
Serial3.read() 

Считывает входящие данные из последовательного порта.

Возвращает первый байт входящих данных, если они есть или -1, если данные не доступны.

write()


Serial.write(val);
Serial.write(str);
Serial.write(buf, len);

Записывает данные в последовательный порт. Данные посылаются как байт или последовательность байт; для отправки символьной информации следует использовать функцию print().

  • val: переменная для передачи, как единственный байт
  • str: строка для передачи, как последовательность байт
  • buf: массив для передачи, как последовательность байт
  • len: длина массива

Разное

pulseIn() - Возвращает продолжительность в микросекундах следующего импульса с напряжением HIGH на заданном контакте

noTone() - Прерывает любые серии импульсов, запущенные вызовом tone

micros() - Действует подобно millis, но возвращает число микросекунд, прошедших с момента последнего сброса платы. Значение обнуляется примерно через 70 минут

delayMicroseconds() - минимальная задержка составляет 3 мкс, максимальная — около 16 мс

attachInterrupt() - Устанавливает функцию myFunction, как обработчик положительного фронта прерывания 1 (контакт D3 в UNO)

detachInterrupt() - Запрещает обработку сигналов от прерывания 1

Реклама