Arduino последовательный обмен

February 4, 2012 by admin Комментировать »

Serial.begin (rate)

Открывает  последовательный  порт  и  задаѐт  скорость  для  последовательной передачи данных. Типичная скорость обмена для компьютерной коммуникации —

9600, хотя поддерживаются и другие скорости.

void setup ()

{

Serial.begin (9600);               // открывает последовательный порт

// задаѐт скорость обмена 9600

}

Примечание: При использовании последовательного обмена, выводы 0 (RX) и 1 (TX) не могут использоваться одновременно как цифровые.

Serial.println (data)

Передаѐт данные в последовательный порт, сопровождая автоматическим возвратом каретки и переходом на новую строку. Команда такая же, что и Serial.print(), но легче для последующего чтения на данных в терминале.

Serial.println (analogValue);          // отправляет значение

// ‘analogValue’

Примечание:    За    дальнейшей    информацией    о    различных    изменениях

Serial.println() и Serial.print() обратитесь на сайт Arduino.

Следующий простой пример читает аналоговый вывод 0 и отсылает эти данные на компьютер каждую секунду.

void setup ()

{

Serial.begin (9600);                                  // задаѐм скорость 9600 bps

}

void loop ()

{

Serial.println (analogRead(0);                  // шлѐм аналоговое значение

delay (1000);                                             // пауза 1 секунда

}

приложение

цифровой выход

Это базовая программа «hello world», используемая для включения и выключения чего-нибудь. В этом примере светодиод подключѐн к выводу 13 и мигает каждую секунду. Резистор в данном случае может быть опущен, поскольку на 13-м порту Arduino уже есть встроенный резистор.

int ledPin = 13;                                 // LED на цифровом выводе 13

void setup ()                                     // запускается один раз

{

pinMode (ledPin, OUTPUT);          // устанавливаем вывод 13 на выход

}

void loop ()                                       // запускается вновь и вновь

{

digitalWrite (ledPin, HIGH);             // включаем LED delay (1000);                                                          // пауза 1 секунда digitalWrite (ledPin, LOW);                                 // выключаем LED delay (1000);                                              // пауза 1 секунда

}

цифровой ввод

Это простейшая форма ввода с двумя возможными состояниями: включено или выключено. В примере считывается простой переключатель или кнопка, подключѐнная к выводу 2. Когда выключатель замкнут, входной вывод читается как HIGH и включает светодиод.

int ledPin = 13;                              // выходной вывод для LED

int inPin = 2;                                  // входной вывод (для выключателя)

void setup ()

{

pinMode (ledPin, OUTPUT);         // объявляем LED как выход

pinMode (inPin, INPUT);               // объявляем выключатель как вход

}

void loop ()

{

if (digitalRead (inPin) == HIGH)             // проверяем, вход HIGH?

{

digitalWrite (ledPin, HIGH);           // включаем LED

delay (1000);                                 // пауза 1 секунда digitalWrite (ledPin, LOW);            // выключаем LED delay (1000);                                 // пауза 1 секунда

}

}

сильноточный выход

Иногда возникает необходимость в управлении более, чем 40 мА от Arduino. В этом случае может использоваться транзистор MOSFET для коммутации сильноточной нагрузки. В следующем примере MOSFET быстро включается и выключается 5 раз в секунду.

Примечание: Схема показывает мотор и диод защиты, но другие, не индуктивные, нагрузки могут включаться без диода.

int outPin = 5;     // выходной вывод для MOSFET

void setup ()

{

pinMode (outPin, OUTPUT);                    // задаѐм вывод 5 как выход

}

void loop ()

{

for (int i=0; i<5; i++)       // цикл 5 раз

{

digitalWrite (outPin, HIGH);                      // включаем MOSFET delay (250);                                                                    // пауза в ¼ секунды digitalWrite (outPin, LOW);                                           // выключаем MOSFET delay (250);                                                          // пауза в ¼ секунды

}

delay (1000);                                             // пауза 1 секунда

}

pwm выход

Широтно-импульсная модуляция (PWM) — это способ имитировать аналоговый выход с помощью импульсного сигнала. Это можно использовать для гашения и увеличения яркости светодиода или позже для управления сервомотором. Следующий пример медленно увеличивает яркость и гасит LED, используя цикл for.

int ledPin = 9;                                // PWM вывод для LED

void setup () {}                               // setup не нужен

void loop ()

{

for (int i=0; i<=255; i++)                   // растущее значение для i

{

analogWrite (ledPin, i); // устанавливаем уровень яркости для i delay (100);   // пауза 100 миллисекунд

}

for (int i=255; i>=0; i–)                     // уменьшающееся значение для i

{

analogWrite (ledPin, i); // устанавливаем уровень яркости для i delay (100);   // пауза 100 миллисекунд

}

}

вход с потенциометра

Любительские сервомашинки — это разновидность полу-автономного мотор- редуктора, который может поворачиваться на 1800. Всѐ, что нужно — это отправлять импульсы каждые 20 мС. В данном примере используется функция servoPulse для поворота мотора от 100 до 1700 и обратно.

int servoPin = 2; // привод соединѐн с цифровым выводом 2 int myAngle;       // угол привода грубо 0 – 180

int pulseWidth;   // переменная функции servoPulse()

void setup ()

{

pinMode (servoPin, OUTPUT);     // устанавливаем вывод 2 на выход

}

int servoPulse (int servoPin, int myAngle)

{

pulseWidth (myAngle * 10 + 600); // определяем паузу

digitalWrite (servoPin, HIGH);       // устанавливаем привод в HIGH

delayMicroseconds (pulseWidth); // микросекундная пауза

digitalWrite (servoPin, LOW);        // устанавливаем привод в LOW

}

void loop ()

{       // привод стартует с 10 и поворачивается до 170 градусов

for (myAngle = 10; myAngle <= 170; myAngle++)

{

servoPulse (servoPin, myAngle);           // отправляем вывод и угол

delay (20);                                              // обновляем цикл

}

// привод стартует со 170 и поворачивается до 10 градусов

for (myAngle = 170; myAngle >= 10; myAngle–)

{

servoPulse (servoPin, myAngle);           // отправляем вывод и угол

delay (20);                                              // обновляем цикл

}

}

Источник: Гололобов В. – С чего начинаются роботы. О проекте Arduino для школьников (и не только) – 2011

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты