找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8387|回复: 5
打印 上一主题 下一主题
收起左侧

Arduino的入门与精深

[复制链接]
跳转到指定楼层
楼主
ID:76244 发表于 2015-4-7 01:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一Arduino的应用市场
二如何开始使用你的Arduino kit
三Arduino的入门与精深

一Arduino的应用市场
便宜——和其他平台相比。arduino板是相当便宜。最便宜的arduino课可以自己动手制作,即使组装好的成品,也不会超过200元。
跨平台——arduino软件在window,Macintosh OSX和Linux平台上均可以操作,大部分其他的单片机只能运行在window操作系统下。
简易的操作环境——初学者很容易就能学会arduino的编程环境,同时它还能为高级用户提供高级运用。对于老师们来讲,一般都很容易运用processing编程环境,如果学生使用processing编程环境的话,也很容易熟悉。
软件开源并可拓展——arduino软件是开源的,对于有经验的程序员是可以拓展的。arduino编程语言可以通过c++库进行拓展。如果有人想要去了解技术上的细节,可以通过arduino语言直接使用AVR  c语言(因为arduino语言是机基于AVR c语言的)。类似,如果你有需要的话,也可以再arduino中写入AVR c语言。
硬件开源并可拓展——arduino板是基于ateml 的atmelga8和atmelga128/328的单片机。arduino是基于creative Commons许可协议。所以有经验的设计师根据需求设计自己的模块,可以对其进行拓展和改造。甚至对于一些相对没有经验的用户,也可以通过制作实验板来理解arduino是如何工作的,省钱又省事。
arduino的起源
Massimo Banzi之前是意大利Ivrea一家高科技设计学校的老师。他的学生们经常抱怨找不到便宜好用的微控制器。 2005年冬天, Massimo Banzi跟David Cuartielles讨论了这个问题。 David Cuartielles是一个西班牙籍晶片工程师,当时在这所学校做访问学者。两人决定设计自己的电路板,并引入了Banzi的学生David Mellis为电路板设计编程语言。两天以后,David Mellis就写出了程式码。又过了三天,电路板就完工了。这块电路板被命名为Arduino。



各种arduino型号
Arduino Uno

Arduino Nano                                Arduino GSM Shield Front                 Arduino Ethernet Shield


二如何开始使用你的Arduino kit
arduino的配置:
arduino是基于AVR平台,对AVR库进行二次封装编译,把端口都打包好了。神马寄存器呀,地址指针呀,都不用写。大大降低软件开发难度,适合非专业爱好者使用。优点和缺点并存,因为是二次开发,所以代码执行不如AVR代码精练,代码执行效率和代码体积都弱于AVR直接编译。
基本性能配置:
ditital i/o 数字输入/输出端口0-13.
anglog i/o 模拟输入/输出端口0-5.
支持ICP下载,支持tx/rx.
输入电压:支持3.3v/5v输出。
处理器:支持atmel atmegal168/328处理器,因为支持者众多,已有公司开发出32位的mcu支持arduino。
arduino的开发环境介绍

Arduino能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过Arduino的编程语言来编写程序,编译成二进制文件,烧录进微控制器。对Arduino的编程是利用 Arduino编程语言 (基于 Wiring)和Arduino开发环境(基于 Processing)来实现的。基于Arduino的项目,可以只包含Arduino,也可以包含Arduino和其他一些在PC上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。
Arduino是一个基于开放原始码的软硬件平台,构建于开放原始码simple I/O介面版,并且具有使用类似Java、C语y言Processing/Wiring开发环境。
可以快速使用Arduino与Adobe Flash, Processing, Max/MSP, Pure Data, SuperCollider等软件结合,作出互动作品。 Arduino可以使用现有的电子元件例如开关或者传感器或者其他控制器件、LED、步进马达或其他输出装置。 Arduino也可以独立运行,并与软件进行交互,例如: Macromedia Flash, Processing, Max/MSP, Pure Data, VVVV或其他互动软件…。 Arduino的IDE界面基于开放源代码,可以免费下载使用,开发出更多令人惊艳的互动作品。

三Arduino的入门与精深
开始运行你的你的Arduino kit

一个简单的程序让读取模拟端口ao的值并用串口发送
void setup() {
  Serial.begin(9600);//串口波特率9.6kb//d0-tx//d1-rx
}
void loop()
{
  int sensorValue = analogRead(A0);//读取a0值(0-1023)
  Serial.println(sensorValue);//串口发送数据
  delay(1);    //延时
}
注:arduino由初始化函数setup()
       与循环函数loop组成。


串口控制输出
void setup() {
  Serial.begin(9600);
      for (int thisPin = 2; thisPin < 7; thisPin++)
{
        pinMode(thisPin, OUTPUT);//将d2-d7设置为输出模式
      }
}
void loop()
{
if (Serial.available() > 0) {   //如果串口收到信息
    int inByte = Serial.read();
    switch (inByte) {
    case 'a':                        //接受a,将d2置高
     digitalWrite(2, HIGH);
      break;
    case 'b':   
      digitalWrite(3, HIGH);   //接受b,将d3置高
      break;

case 'c':        
  digitalWrite(4, HIGH);    //接受c,将d4置高
     break;
    case 'd':   
      digitalWrite(5, HIGH);    //接受d,将d5置高
      break;
    case 'e':   
   digitalWrite(6, HIGH);    //接受e,将d6置高
      break;
    default:
      // turn all the LEDs off:
      for (int thisPin = 2; thisPin < 7; thisPin++)
{
        digitalWrite(thisPin, LOW);  
     //其他情况就将d2-d7均置低
      }  
    }
   }
}

局域网控制LED灯
核心代码:void loop () {
  word pos =ether.packetLoop(ether.packetReceive());
    if(pos)
    {
     if(strstr((char *)Ethernet::buffer + pos, "GET /led_off.png") != 0)  
       send_png_image(led_off, sizeof(led_off));
     else if(strstr((char *)Ethernet::buffer + pos, "GET /led_on.png") != 0)
       send_png_image(led_on, sizeof(led_on));
     else
    {         
      if(strstr((char *)Ethernet::buffer + pos, "GET /?LED1") != 0)
      {          led1Status = !led1Status;
         digitalWrite(LED1PIN, led1Status);   
       }         
    if(strstr((char *)Ethernet::buffer + pos, "GET /?LED2") != 0) {                                                         网页中LED图标
         led2Status = !led2Status;
         digitalWrite(LED2PIN, led2Status);           
       }
       BufferFiller bfill = ether.tcpOffset();
       bfill.emit_p(PSTR("HTTP/1.0 200 OK\r\n"
         "Content-Type: text/html\r\nPragma: no-cache\r\n\r\n"
         "<html><head><title>WebLeds</title></head><body>"
     "Toggle leds: "));         
       if(led1Status) bfill.emit_p(PSTR("<a href=\"/?LED1\"><img src=\"led_on.png\"></a>"));
       else bfill.emit_p(PSTR("<a href=\"/?LED1\"><img src=\"led_off.png\"></a>"));
       if(led2Status) bfill.emit_p(PSTR("<a href=\"/?LED2\"><img src=\"led_on.png\"></a>"));
    else bfill.emit_p(PSTR("<a href=\"/?LED2\"><img src=\"led_off.png\"></a>"));      
       bfill.emit_p(PSTR("</body></html>"));
       ether.httpServerReply(bfill.position());
   }
   }
}

让你的arduino连入物联网





小节:
通过一周对arduino的学习,我们意识到虽然arduino的开源软硬件都很多,在消费类电子市场占有很大比例,但 对于资深工程师来说,arduino只是AVR的入门硬件,在精密电子仪器,中高端设备中有明显的不足。对学习嵌入式,物联网方面有一定的辅助作用。
  



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:62971 发表于 2015-8-26 15:29 | 只看该作者
赞    希望更多源码
回复

使用道具 举报

板凳
ID:69240 发表于 2015-11-24 15:28 来自手机 | 只看该作者
很棒,谢谢分享。。。
回复

使用道具 举报

地板
ID:117823 发表于 2016-5-1 17:23 | 只看该作者
哈哈,我又看见了呀。
回复

使用道具 举报

5#
ID:122782 发表于 2016-5-24 09:56 | 只看该作者
不错,学习了
回复

使用道具 举报

6#
ID:122752 发表于 2016-5-26 20:47 | 只看该作者
谢谢大大分享GOOD
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表