C/C++ Arduino

2018/07/31 C/C++

C/C++程序语言设计 Arduino。

MAC

Arduino介绍

Arduino是一家制作开源计算机硬件和软件的公司,同时兼有项目和用户社区,负责设计和制造单板微控制器和微控制器包,用于构建数字设备和交互式对象,以便在物理和数字世界中感知和控制对象。该项目的产品是按照GNU宽通用公共许可证(LGPL)或GNU通用公共许可证(GPL)许可的开源硬件和软件分发的,arduino允许任何人制造Arduino板和软件分发。Arduino板可以以预装的形式商业销售,也可以作为自己动手(DIY)包购买。

Arduino电路板设计使用各种微处理器和控制器。这些电路板配有一组数字和模拟输入/输出(I/O)引脚,可以连接各种扩展板或面包板(屏蔽板)和其他电路。这些电路板具有串行通信接口,包括某些型号上的通用串行总线(USB),也用于从个人电脑加载程序。微控制器通常使用C/C++编程语言。除了使用传统的编译工具链之外,Arduino项目还提供了一个基于Processing语言项目的集成开发环境。

特点

  • 基于知识共享开放源代码的电路图设计。
  • 免费下载,也可依需求自己修改,但需遵照姓名标示。
  • Arduino可使用ICSP线上烧入器,将Bootloader烧入新的IC芯片。
  • 可依据Arduino官方网站,调整电路板及组件,以匹配自己实际设计的需求。
  • 各如红外线、超音波、热敏电阻、光敏电阻、伺服马达…等的连接。
  • 支持多样的交互程序,如Adobe Flash, Max/MSP, VVVV, Pure Data, C, Processing…等。
  • 使用低价格的微处理控制器(Atmel AVR)(ATMEGA 8,168,328等)。
  • USB接口,不需外接电源。另外有提供直流(DC)电源输入。

基础

Arduino使用C/C++编写程序,虽然C++兼容C语言,但这是两种语言,C语言是一种面向过程的编程语言,C++是一种面向对象的编程语言。早期的Arduino核心库使用C语言编写,后来引进了面向对象的思想,目前最新的Arduino核心库采用C与C++混合编写而成。

通常我们说的Arduino语言,是指Arduino核心库文件提供的各种应用程序编程接口(Application Programming Interface,简称API)的集合。这些API是对更底层的单片机支持库进行二次封装所形成的。例如,使用AVR单片机的Arduino的核心库是对AVR-Libc(基于GCC的AVR支持库)的二次封装。

Arduino程序基本结构由setup() 和loop() 两个函数组成:

void setup()
{
  // 在这里加入你的setup代码,它只会运行一次:
}
 
void loop() 
{
  // 在这里加入你的loop代码,它会不断重复运行:
}

Arduino控制器通电或复位后,即会开始执行setup() 函数中的程序,该部分只会执行一次。通常我们会在setup() 函数中完成Arduino的初始化设置,如配置I/O口状态,初始化串口等操作。在setup() 函数中的程序执行完后,Arduino会接着执行loop() 函数中的程序。而loop()函数是一个死循环,其中的程序会不断的重复运行。通常我们会在loop() 函数中完成程序的主要功能,如驱动各种模块,采集数据等。

电路板介绍

  1. 复位按钮:你可以重置你的Arduino板,例如从一开始就启动你的程序。可以通过两种方式重置UNO板。首先,通过使用板上的复位按钮。其次,你可以将外部复位按钮连接到标有RESET的Arduino引脚。

  2. 串口状态灯:在你的板上,你会发现两个标签TX(发送)和RX(接收)。它们出现在Arduino UNO板的两个地方。首先,在数字引脚0和1处,指示引脚负责串行通信。其次,TX和RX LED。发送串行数据时,TX LED以不同的速度闪烁。闪烁速度取决于板所使用的波特率。RX在接收过程中闪烁。

  3. 数字口:Arduino UNO板有14个数字I/O引脚(其中6个提供PWM脉宽调制输出),这些引脚可配置为数字输入引脚,用于读取逻辑值(0或1) ;或作为数字输出引脚来驱动不同的模块,如LED,继电器等。标有“〜”的引脚可用于产生PWM。

  4. ICSP引脚:大多数情况下,ICSP(12)是一个AVR,一个由MOSI,MISO,SCK,RESET,VCC和GND组成的Arduino的微型编程头。它通常被称为SPI(串行外设接口),可以被认为是输出的“扩展”。实际上,你是将输出设备从属到SPI总线的主机。

  5. 模拟口:Arduino UNO板有六个模拟输入引脚,A0到A5。这些引脚可以从模拟传感器(如湿度传感器或温度传感器)读取信号,并将其转换为可由微处理器读取的数字值。

  6. 电源接口
    • 3.3V - 提供3.3输出电压
    • 5V - 提供5输出电压
    • GND - Arduino上有几个GND引脚,其中任何一个都可用于将电路接地。
    • VVin - 此引脚也可用于从外部电源(如交流主电源)为Arduino板供电。
  7. 微控制器:每个Arduino板都有自己的微控制器。你可以假设它作为板的大脑。Arduino上的主IC(集成电路)与板对板略有不同。微控制器通常是ATMEL公司的。在从Arduino IDE加载新程序之前,你必须知道你的板上有什么IC。此信息位于IC顶部。有关IC结构和功能的更多详细信息,请参阅数据表。

  8. 晶体振荡器:晶振帮助Arduino处理时间问题。Arduino如何计算时间?答案是,通过使用晶体振荡器。在Arduino晶体顶部打印的数字是16.000H9H。它告诉我们,频率是16,000,000赫兹或16MHz。

  9. 电源LED指示灯:当你将Arduino插入电源时,此LED指示灯应亮起,表明你的电路板已正确通电。如果这个指示灯不亮,那么连接就出现了问题。

Fade

/*
  Fade
  This example shows how to fade an LED on pin 9
  using the analogWrite() function.

  The analogWrite() function uses PWM, so if  you
  want to change the pin you're using, be  sure to
  use another PWM capable pin. On most  Arduino,
  the PWM pins are identified with   a "~" sign,
  like ~3, ~5, ~6, ~9, ~10 and ~11.
*/

int brightness = 0;

void setup(){
    pinMode(9, OUTPUT);
}

void loop(){
    for (brightness = 0; brightness <= 255; brightness += 5) {
        analogWrite(10, brightness);
        delay(30); // Wait for 30 millisecond(s)
    }
    for (brightness = 255; brightness >= 0; brightness -= 5) {
        analogWrite(10, brightness);
        delay(30); // Wait for 30 millisecond(s)
    }
}

Debounce

/*
 Debounce

 Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
 press), the output pin is toggled from LOW to HIGH or HIGH to LOW.  There's
 a minimum delay between toggles to debounce the circuit (i.e. to ignore
 noise).

 The circuit:
 * LED attached from pin 13 to ground
 * pushbutton attached from pin 2 to +5V
 * 10K resistor attached from pin 2 to ground

 * Note: On most Arduino boards, there is already an LED on the board
 connected to pin 13, so you don't need any extra components for this example.


 created 21 November 2006
 by David A. Mellis
 modified 30 Aug 2011
 by Limor Fried
 modified 28 Dec 2012
 by Mike Walters
 modified 30 Aug 2016
 by Arturo Guadalupi


 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/Debounce
 */

// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2;    // the number of the pushbutton pin
const int ledPin = 13;      // the number of the LED pin

// Variables will change:
int ledState = HIGH;         // the current state of the output pin
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin

// the following variables are unsigned long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
    pinMode(buttonPin, INPUT);
    pinMode(ledPin, OUTPUT);

    // set initial LED state
    digitalWrite(ledPin, ledState);
}

void loop() {
    // read the state of the switch into a local variable:
    int reading = digitalRead(buttonPin);

    // check to see if you just pressed the button
    // (i.e. the input went from LOW to HIGH),  and you've waited
    // long enough since the last press to ignore any noise:
    // If the switch changed, due to noise or pressing:
    if (reading != lastButtonState) {
        // reset the debouncing timer
        lastDebounceTime = millis();
    }

    if ((millis() - lastDebounceTime) > debounceDelay) {
        // whatever the reading is at, it's been there for longer
        // than the debounce delay, so take it as the actual current state:
        // if the button state has changed:
        if (reading != buttonState) {
            buttonState = reading;
            // only toggle the LED if the new button state is HIGH
            if (buttonState == HIGH) {
                ledState = !ledState;
            }
        }
    }

    // set the LED:
    digitalWrite(ledPin, ledState);
    // save the reading.  Next time through the loop,
    // it'll be the lastButtonState:
    lastButtonState = reading;
}

Search

    Table of Contents