Arduino.Данные

Arduino.Данные

https://t.me/HotCheatSheet
Константы

HIGH — может несколько отличаться в зависимости от того, как настроен вывод - как вход (INPUT) или как выход (OUTPUT).

Если функцией pinMode вывод сконфигурирован как вход (INPUT), то при считывании с него данных (функция digitalRead) микроконтроллер ответит HIGH в том случае, когда на выводе присутствует напряжение 3В или больше.

Если функцией pinMode вывод сконфигурирован как выход (OUTPUT) и функцией digitalWrite на него подан высокий уровень HIGH, то на выводе установится напряжение 5В.


LOW — может несколько отличаться в зависимости от того, как настроен вывод - как вход (INPUT) или как выход (OUTPUT).

Если функцией pinMode вывод сконфигурирован как вход (INPUT), то при считывании с него данных функцией digitalRead микроконтроллер ответит LOW в том случае, когда напряжение на выводе не превышает 2В.

Если функцией pinMode вывод сконфигурирован как выход (OUTPUT) и функцией digitalWrite на него подан низкий уровень LOW, то на выводе установится напряжение 0В.


INPUT

Выводы Ардуино (ATmega), сконфигурированные функцией pinMode() как входы (INPUT), находятся в высокоимпедансном состоянии. Это эквивалентно подключению к выводу последовательного резистора в 100 МОм, поэтому к цепям, подключенным к таким выводам, не предъявляется практически никаких требований. Такой режим удобен для считывания сигналов с датчиков, но не приемлем для питания светодиодов.

OUTPUT

Микроконтроллер ATmega в Ардуино имеет внутренние подтягивающие резисторы (резисторы, подключенные к питанию внутри микросхемы), которыми можно управлять. Если вы предпочитаете использовать их вместо внешних резисторов, подключенных к земле, - используйте параметр INPUT_PULLUP в функции pinMode(). Это позволит инвертировать поведение подключенного к выводу внешнего датчика: HIGH будет означать его отключение, а LOW - включение.

INPUT_PULLUP

Выводы, сконфигурированные функцией pinMode() как выходы (OUTPUT), находятся в низкоимпедансном состоянии. Это означает, что они могут обеспечить внешние цепи относительно большим током. Микроконтроллер ATmega может отдавать (положительный ток) или принимать (отрицательный) ток до 40 мА (миллиампер) от внешних устройств/цепей. Такой режим удобен для питания светодиодов, но бесполезен при считывании сигналов с датчиков. Выводы, сконфигурированные как выход, также могут быть выведены из строя при коротком замыкании на землю либо на цепь питания 5В.


true — булево значение равное 1, и вообще все символы не равные нулю.

false — булево значение равное 0.


целочисленные константы — набираемые числа, интерпретируемые как числа в десятичной системе счисления, поэтому для задания числа в другой системе необходимо использовать специальные префиксы.

Модификаторы:

'u' или 'U', чтобы привести константу к беззнаковому типу данных.

'l' или 'L', чтобы привести константу к типу данных long.

'ul' или 'UL', чтобы привести константу к типу unsigned long.

Примеры:

10 (десятичная) - 123

2 (двоичная) - B1111011, префикс - "B", работает только с 8-битными значениями (0 - 255), корректные символы 0-1

8 (восьмеричная) - 0173, префикс - "0", корректные символы 0-7

16 (шестнадцатиричная) - 0x7B, префикс - "0x", корректные символы 0-9, A-F, a-f

33u - имеет тип данных unsigned.

100000L - имеет тип данных long.

32767ul - имеет тип данных unsigned long.


константы с плавающей точкой — работает подобно целочисленным константам. Также имеет имеет символ экспоненты 'e' или 'E'.

10.0 равняется 10

2.34E5 равняется 234000

67e-12 равняется .000000000067


Типы данных

void — используется только при объявлении функций. Оно указывает на то, что объявляемая функция не возвращает никакого значения той функции, из которой она была вызвана.

Пример:

// операции выполняются в функциях "setup" и "loop"
// но общей программе никакой информации не возвращается

void setup()
{
  // ...
}

void loop()
{
  // ...
}


boolean — булевый символ имеет одно из двух значений: true или false.

Пример:

int LEDpin = 5;       // светодиод подключен к выводу 5
int switchPin = 13;   // ключ подключен к выводу 13, другой вывод подключен к земле

boolean running = false;

void setup()
{
  pinMode(LEDpin, OUTPUT);
  pinMode(switchPin, INPUT);
  digitalWrite(switchPin, HIGH);      // включить подтягивающий резистор
}

void loop()
{
  if (digitalRead(switchPin) == LOW)
  {  // ключ нажат - вывод подтянут к высокому уровню сигнала
    delay(100);                        // задержка для устранения дребезга контактов ключа
    running = !running;                // инвертирование переменной running
    digitalWrite(LEDpin, running)      // индикация светодиодом
  }
}


char — тип данных, который занимает в памяти 1 байт и хранит символьное значение. Символы пишутся в одинарных кавычках, например: 'A' (совокупность символов - строки - пишутся в двойых кавычках: "ABC").

Пример:

char myChar = 'A';
char myChar = 65;      // оба значения эквивалентны


unsigned char — беззнаковый тип данных, занимающий в памяти 1 байт. Диапазон от 0 до 255.

Пример:

unsigned char myChar = 240;


byte — хранит 8-битное беззнаковое число, от 0 до 255.

Пример:

byte b = B10010;  // "B" - префикс двоичной системы счисления (B10010 = 18 в десятичной системе) 


int — основной тип данных для хранения чисел. Диапазон от -32768 до 32767.

Синтаксис:

int var = val;

Параметры:

var - имя вашей переменной типа int

val - значение, присваиваемое этой переменной

Пример:

int ledPin = 13;


unsigned int — схож с int-переменными тем, что они содержат двухбайтовые значения. Диапазон от 0 до 65535.

Синтаксис:

unsigned int var = val;

Параметры:

var - имя переменной типа unsigned int

val - значение, присваиваемое этой переменной

Пример:

unsigned int ledPin = 13;


word — хранит 16-битное беззнаковое число в диапазоне от 0 до 65535.

Пример:

word w = 10000; 


long — обладает расширенным размером для хранения чисел и имеют размерность 32 бита (4 байта). Диапазон от -2 147 483 648 до 2 147 483 647.

Синтаксис:

long var = val;

Параметры:

var - имя переменной типа long

val - значение, присваиваемое этой переменной

Пример:

long speedOfLight = 186000L;   // для справки о префиксе 'L' смотрите раздел о целочисленных константах


unsigned long — обладает расширенным размером для хранения чисел и имеют размерность 32 бита (4 байта). Диапазон от 0 до 4 294 967 295.

Синтаксис:

unsigned long var = val;

Параметры:

var - имя переменной типа unsigned long

val - значение, присваиваемое этой переменной

Пример:

unsigned long time;

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

void loop()
{
  Serial.print("Time: ");
  time = millis();
  //выводим время с момента запуска программы
  Serial.println(time);
  //ждем 1 секунду, чтобы не отсылать большой массив данных
  delay(1000);
}


short — 16-битный тип данных. Диапазон от -32768 до 32767.

Синтаксис:

short var = val;

Параметры:

var - имя переменной типа short

val - значение, присваиваемое этой переменной

Пример:

short ledPin = 13;


float — часто используется для представления аналоговых или непрерывных величин. Диапазон от -3.4028235E+38 до 3.4028235E+38.

Синтаксис:

float var = val;

Параметры:

var - имя переменной типа float

val - значение, присваиваемое этой переменной

Пример:

float myfloat;
float sensorCalbrate = 1.117;


double — дробное число двойной точности. В Uno и других платах на базе микроконтроллеров ATmega переменные типа double занимают 4 байта. Другими словами, в этих устройствах переменные типа double полностью аналогичны переменным float без какого-либо прироста точности.


string — массив символов, можно использовать тип данных String, который входит в ядро; либо объявить строку как массив символов char с нулевым символом в конце.

Пример:

char Str1[15];
char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};
char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};
char Str4[ ] = "arduino";
char Str5[8] = "arduino";
char Str6[15] = "arduino";


Преобразование типов

char() — приводит значение к типу char.

Синтаксис:

char(x)

Параметры:

x: значение любого типа

Возвращаемые значения:

char


byte() — приводит значение к типу byte.

Синтаксис:

byte(x)

Параметры:

x: значение любого типа

Возвращаемые значения:

byte


int() — приводит значение к типу int.

Синтаксис:

int(x)

Параметры:

x: значение любого типа

Возвращаемые значения:

int


word() — приводит значение к типу word или создает значение типа word из двух байт.

Синтаксис:

word(x)

word(h, l)

Параметры:

x: значение любого типа

h: старший байт (левая часть) значения word

l: младший байт (правая часть) значения word

Возвращаемые значения:

word


long() — приводит значение к типу long.

Синтаксис:

long(x)

Параметры:

x: значение любого типа

Возвращаемые значения:

long


float() — приводит значение к типу float.

Синтаксис:

float(x)

Параметры:

x: значение любого типа

Возвращаемые значения:

float


Область видимости переменной и спецификаторы

Область видимости переменной

Глобальная переменная - эта та переменная, которая может быть доступна ("видна") из любой функции программы.

Локальные переменные доступны только внутри тех функций, в которых они объявлены.

Пример:

int gPWMval;  // эта переменная будет доступна из любой функции

void setup()
{
  // ...
}

void loop()
{
  int i;    // переменная "i" "видна" только внутри "loop"
  float f;  // переменная "f" "видна" только внутри "loop"
  // ...

  for (int j = 0; j <100; j++){
  // переменная j доступна только внутри скобок цикла for
  }

}


static — используется для создания переменных, которые будут видны только одной функции.

Пример:

/* RandomWalk
* Paul Badger 2007
* RandomWalk в случайном порядке перемещается вверх или вниз между двумя
* точками. Длина максимального перемещения за один цикл задается 
* параметром "stepsize".
* Статическая переменная увеличивается или уменьшается на случайную величину.
* Эта техника также известна как "розовый шум" или "пьяная походка".
*/

#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize;

int thisTime;
int total;

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

void loop()
{        //  функция randomWalk 
  stepsize = 5;
  thisTime = randomWalk(stepsize);
  Serial.println(thisTime);
   delay(10);
}

int randomWalk(int moveSize){
  static int  place;     // переменная для хранения величины случайного перемещения - объявлена как static, поэтому 
                         // сохраняет свое значение между вызовами функции. При этом другие функции не могут ее изменить

  place = place + (random(-moveSize, moveSize + 1));

  if (place < randomWalkLowRange){                    // проверка нижнего и верхнего пределов
    place = place + (randomWalkLowRange - place);     // восстановление числа в положительном направлении
  }
  else if(place > randomWalkHighRange){
    place = place - (place - randomWalkHighRange);     // восстановление числа в отрицательном направлении
  }

  return place;
}


volatile — спецификатор переменной. Как правило, употребляется перед указанием типа переменной, чтобы изменить порядок ее обработки компилятором и последующей программой.

Пример:

// переключение светодиода при изменении состояния вывода

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}


const — спецификатор, который изменяет поведение переменной и делает ее доступной только для чтения.

Пример:

const float pi = 3.14;
float x;

// ....

x = pi * 2;    // удобно использовать константы при математических вычислениях

pi = 7;        // ошибка - нельзя записывать значения (изменять) константы


Вспомогательная функция

sizeof() — возвращает количество байт, занимаемых типом переменной, либо количество байт, занимаемых массивом.

Синтаксис:

sizeof(variable)

Параметры:

variable: переменная любого типа или массив (например, int, float, byte)

Пример:

char myStr[] = "this is a test";
int i;

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

void loop() { 
  for (i = 0; i < sizeof(myStr) - 1; i++){
    Serial.print(i, DEC);
    Serial.print(" = ");
    Serial.write(myStr[i]);
    Serial.println();
  }
  delay(5000); // задержка программы
}

Report Page