Освой Arduino играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
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(pinA)
Функция analogRead() возвращает целочисленное значение в диапазоне от 0 до 1023, пропорциональное напряжению, поданному на аналоговый вход, номер которого мы передаем функции в качестве параметра pinA. В большинстве плат это порты 0-5. В платах Mini и Nano: 0-7, в плате Mega: 0-15.
void analogWrite(pin, value)
Устанавливает аналоговое значение PWM (ШИМ, Широтно-импульсная модуляция) для вывода. Используется для плавного изменения цвета у светодиода или скорости вращения мотора. Пины с поддержкой PWM обозначены на плате символом тильда (~). Для Arduino Uno выводы имеют номера 3, 5, 6, 9, 10 и 11.
Перед вызовом данной функции нет необходимости вызывать функцию pinMode().
Функция не возвращает значения и имеет два параметра.
Функция возвращает значение бита в указанной позиции.
Общий пример для функций с битами.
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
Функция устанавливает 0 в указанной позиции у числа.
bitRead(x, n)
Функция считывает биты с указанного числа. Возвращает значение бита (0 или 1)
Функция устанавливает бит в указанном числе в указанной позиции.
Функция записывает бит в указанной позиции.
Функция находит ближайшее целое число к числу 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
Функция находит косинус угла в радианах. Значение находится в интервале от -1 до 1.
void delay(ms)
Функция делает паузу в программе на указанное количество времени в миллисекундах , которое указывается в единственном параметре. Не возвращает значения.
digitalRead(pin)
Функция digitalRead() считывает показания с цифрового вывода. Возвращается HIGH (высокое, 1) или LOW (низкое, 0):
void digitalWrite(pin, value)
Функция digitalWrite() не возвращает значения и принимает два параметра:
Функция находит ближайшее целое число к числу 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
void loop()
После выполнения setup() запускается функция loop(), которая выполняется в бесконечном цикле.
Функция loop() должна присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — просто не пишите ничего между фигурными скобками.
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);
Функция использует целые числа и не генерирует дробные числа. Дробные числа усекаются до целых.
Возвращается новое значение после преобразования.
/* 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);
}
Функция возвращает большее из двух чисел.
int myValue = analogRead(A0); // получим какое-то значение с аналогового порта
int maxValue = min(myValue, 200); // сравним с некоторым значением и узнаем, какое из них больше
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);
}
Функция возвращает меньшее из двух чисел.
int myValue = analogRead(A0); // получим какое-то значение с аналогового порта
int minValue = min(myValue, 200); // сравним с некоторым значением и узнаем, какое из них меньше
void pinMode(pin, mode)
Функция pinMode() устанавливает режим для портов.
Функция для возведения числа в степень.
void setup() {
Serial.begin(9600);
int z = pow(2, 3);
Serial.println(z); // 8
}
void loop() {}
random(max)
random(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]);
}
void setup()
Функция setup() выполняется один раз при запуске микроконтроллера. Обычно она используется для конфигурации портов микроконтроллера и других настроек.
Функция setup() должна присутствовать в любой программе (скетче), даже если вам не нужно ничего выполнять в них — просто не пишите ничего между фигурными скобками.
Функция находит синус угла в радианах. Значение находится в интервале от -1 до 1.
В качестве третьего аргумента передаётся параметр bitOrder (порядок битов), который определяет в какой последовательности подаваемые биты будут интерпретироваться регистром — в прямом или обратном. LSBFIRST (Least Significant Bit First) — означает, что вывод в регистр начнётся с последнего бита. Например, при передаче байта 00010111 на выходах регистра окажутся значения (с 1 по 8 пины) — 00010111. MSBFIRST (Most Significant Bit First) — означает, что вывод в регистр начнётся с первого бита. При передаче байта 00010111 на выходах регистра окажутся значения в обратном порядке (с 1 по 8 пины) — 11101000.
Функция извлекает корень из числа.
void setup() {
Serial.begin(9600);
int z = sqrt(16);
Serial.println(z); // 4
}
void loop() {}
Функция находит тангенс угла в радианах.
tone(pin, frequency)
tone(pin, frequency, duration)
Генерирует звук заданной частоты на указанном пине. Можно указать продолжительность звука. Если продолжительность не указана, то остановить воспроизведение можно с помощью функции noTone(). Вывод можно соединить с пьезопищалкой или другим устройством, способным выводить звук.
Можно выводить только одну ноту во время исполнения.
Функция не возвращает значения.
Класс, позволяющий общаться с компьютером.
Serial.available()
//Arduino Mega only:
Serial1.available()
Serial2.available()
Serial3.available()
Получает число байт (символов), доступных для чтения из последовательного порта. Данные уже пришли и хранятся в специальном буфере (64 байта).
void Serial.begin(speed)
Устанавливает связь с портом для считывания данных на заданной скорости с Arduino на ваш компьютер. В IDE есть выпадающий список, в котором можно увидеть возможные варианты скоростей.
Serial.flush(); // Очищаем буфер
Очищает входной буфер последовательного порта. Находящиеся в буфере данные теряются, и дальнейшие вызовы Serial.read() или Serial.available() будут иметь смысл для данных, полученных после вызова Serial.flush().
Serial.print(val)
Serial.print(val, format)
Печатает данные, поступаемые с серийного порта в виде ASCII-текста без символа перевода строки. Схожа с функцией Serial.println().
Serial.println(val)
Serial.println(val, format)
Печатает данные, поступаемые с серийного порта в виде ASCII-текста. Данные заканчиваются символом перевода строки (ASCII 13, '\r') и новой строки (ASCII 10, '\n'). Схожа с функцией Serial.print().
Serial.println(10, BIN); // 1010
Serial.println(10, HEX); // A
Serial.println(10, OCT); // 12
Serial.read()
//Arduino Mega only:
Serial1.read()
Serial2.read()
Serial3.read()
Считывает входящие данные из последовательного порта.
Возвращает первый байт входящих данных, если они есть или -1, если данные не доступны.
Serial.write(val);
Serial.write(str);
Serial.write(buf, len);
Записывает данные в последовательный порт. Данные посылаются как байт или последовательность байт; для отправки символьной информации следует использовать функцию print().
pulseIn() - Возвращает продолжительность в микросекундах следующего импульса с напряжением HIGH на заданном контакте
noTone() - Прерывает любые серии импульсов, запущенные вызовом tone
micros() - Действует подобно millis, но возвращает число микросекунд, прошедших с момента последнего сброса платы. Значение обнуляется примерно через 70 минут
delayMicroseconds() - минимальная задержка составляет 3 мкс, максимальная — около 16 мс
attachInterrupt() - Устанавливает функцию myFunction, как обработчик положительного фронта прерывания 1 (контакт D3 в UNO)
detachInterrupt() - Запрещает обработку сигналов от прерывания 1