tag 标签: 源代码

相关帖子
相关博文
  • 热度 2
    2022-8-25 09:58
    1660 次阅读|
    0 个评论
    本项目采用IR传感器和Arduino开发板制作了一个数字转速计,以RPM为单位测量马达的转数。项目黑简单,只需将IR传感器和Arduino板子与16*2 LCD连接即可。 BOM表及电路图 本转速计可连续计数5秒。项目BOM表如下: Arduino UNO开发板 x1 16*2 LCD模块 x1 IR传感器模块(含发射和接收) x1 轻触开关(Reset开关) x1 面包板 x1 连接线 x1 BOM表中,IR传感器担当测速功能,该模块组合了一对发射器和接收器,可测量任何旋转物体。当我们按下开始健后,IR传感器的发射器发射的IR光线被反射后被IR接收器接收,其输出的脉冲信号被Arduino控制器检测。 IR传感器由一个IR LED和一个IR光电管组成,工作波长0.75-3μm。这里的IR光电管与用来测量IR辐射量的普通光电二极管不同,其作用是将IR光线反射回去,由IR接收器处理。IR接收器根据接收的IR光线的强度,根据特定算法得出被测物体的转速。项目使用的IR传感器特征如下: 1. 工作电压:3.0–5.0V 2. 探测距离:2–30cm(可通过电位器调节) 3. 电流消耗:23mA(3.3V);43mA(5.0V) 4. 动态输出电平:检测到物体时输出“低”电平逻辑 5. 板载障碍物LED指示器 本项目的接线稍稍复杂,具体电路图说明如下: LCD引脚 1, 3 ,5 ,16 ——— GND LCD引脚 2, 15————— VCC (+5V) LCD引脚 4 —————— – Arduino引脚 D7 LCD引脚 6 —————— – Arduino引脚 D6 LCD引脚 11 ——————- Arduino引脚 D5 LCD引脚 12 ——————- Arduino引脚 D4 LCD引脚 13 ——————- Arduino引脚 D3 LCD引脚 14 ——————- Arduino引脚 D2 IR传感器模块引脚 -GND —— GND IR传感器模块引脚 +VCC —— VCC IR传感器模块引脚 OUT — Arduino引脚D9 轻触开关端子 ————- Arduino引脚D12 轻触开关端子 ————-GND ​ 本转速计以RPM为单位测量风扇马达的转速,计算公式为:RPM= 转数 x 12 / 物体 这里的“物体”数值为每个风扇包含的叶片数目。 上传Arduino代码 本项目的代码较简单。如果上述电路连接妥当,将这些代码上传到装有Arduino IDE的电脑上,就可以开始测度了。 ​ #include LiquidCrystal lcd(7, 6, 5, 4, 3, 2); #define sensor 9 #define start 12 int delay1() { //unsigned int long k; int i,j; unsigned int count=0; for(i=0;i<1000;i++) { for(j=0;j<1000;j++) { if(digitalRead(sensor)) { count++; while(digitalRead(sensor)); } } } return count; } void setup() { pinMode(sensor, INPUT); pinMode(start, INPUT); pinMode(2, OUTPUT); lcd.begin(16, 2); lcd.print(” Tachometer”); delay(2000); digitalWrite(start, HIGH); } void loop() { unsigned int time=0,RPM=0; lcd.clear(); lcd.print(” Please Press “); lcd.setCursor(0,1); lcd.print(“Button to Start “); while(digitalRead(start)); lcd.clear(); lcd.print(“Reading RPM…..”); time=delay1(); lcd.clear(); lcd.print(“Please Wait…..”); RPM=(time*12)/3; delay(2000); lcd.clear(); lcd.print(“RPM=”); lcd.print(RPM); delay(5000); } 如果上传代码后LCD不显示计数数据,先检查Arduino和LCD模组的连接是否可靠,也可联系本文作者或硬之城技术人员。
  • 热度 27
    2014-10-23 16:01
    1630 次阅读|
    8 个评论
        总的思路来自于这一片帖子: blog.csdn.net/zeroboundary/article/details/24411767   对于身处在墙里面的程序员们来说,获取 Android 代码资源还是很不容易的,但是,作为程序员又必须需要这样一份开源的代码财富,行走江湖这样的东西是不能少的。当然,如果你碰巧在一家从事 Android 开发的公司工作的另说。好了,言归正传,这里提前声明一点, 那就是在我说的这些步骤中仍然是需要你进行翻墙的操作的 , 另外,大概需要你预备大概 150G 左右的磁盘空间,如果实在是没有那么多空间,我也是爱莫能助的,还请出门绕道。 不过这个操作不是十分的困难的,如果你已经感受到了一些失败的苗头,那么还请您出门右拐,实在不好意思把辛苦看完文章并且还进行有意尝试的人们坑了。但是我可以保证,下面介绍的所有步骤都是亲测可用的(翻墙那一步除外),您既然选择上船跟我走一遭,不能让您空手不是。   好了,光阴似箭,日月如梭,大好年华还在前头,咱们就不浪费宝贵时间了,早点同步完代码早点“下班”嘛。作者给出了网盘的地址: pan.baidu.com/disk/home#path=%252Fandroid   我的建议是,申请一个百度的帐号,安装一个百度网盘的程序,当然,这样就是说你需要在 windows 下进行下载的操作了,因为网盘的应用端并没有 linux 版本的,不过你使用 wine 的除外了。所以这里我假设你在 windows 下进行的百度网盘资源的下载。在百度网盘的客户端中进行下载的操作是比较可靠的,因为它支持断点续传,如果是使用浏览器进行直接的下载会造成下载的不完整,按照我下载的情况,差不多是整整两天的节奏,然后就要恭喜你,第一步就完成啦。   是的,你没有听错,下载完毕只是第一步,现在你需要确认一下一共下载了 41 个文件,其中两个文件是 README 文件,其余的都是压缩的文件,这个压缩也没有那么的可怕,之前我为这些压缩的文件预留的空间大概是 50G 左右,所以很担心 tar.bz2 文件解压后所占用的空间,但是后来经过了一些测试发现基本是 1 : 1.1 的比例,这样也就是说, 50G 的空间肯定是足够了的。好了,下面进行第二步,这里需要你对 git 以及 repo 有一些认识,没有就读读之前给出的博客上下方的英文同步方法说明吧。   差点忘记了,你需要进行解压的操作,这个在 README_NEW.txt 文件中有说明,对所有的一共 39 个文件进行操作,这个过程大概是一个下午的时间,或者是更短。   接下来,就是一个镜像同步的过程,你可能要问,难道不是直接解压完毕后就得到源代码吗?不是的,因为这里我们采用的是本地镜像的方法,也就是说,当初拷贝的是远端的镜像结构,而不是从这个镜像结构中得到的代码,这里的原因应该就是作者所说的减轻压力缩短下载的时间吧。   接下来,在另一个地方,是的,你没有听错,之前使用了 40G+42G ,剩下的其实没有那么大的空间需求了,你可以在官网或是其他的途径查到源码的大小是 20G 左右的,所以不用太过担心。这样你可能会说上面的减轻下载的压力是胡扯,不过直接的 git 仓库镜像下载确实是比一个一个源代码文件的同步要省时一点的,就比如你拷贝的时候是很多的小文件和一个同样大小的大文件,拷贝的时间是差别很大的,就解释这么多了。现在新建一个文件路径,你的代码将要在这个目录中进行同步出来,操作的步骤也在那一篇博客的下方给出来了,一个是 repo init -u xxxxx ,另一个就是 repo sync 。其中第一个中需要链接到一个网址进行 git 仓库的初始化,这里就需要你进行翻墙的操作了,这里具体的方法就不说了,相信你选择看到这里没有被上面我写的红色内容吓到应该是有办法了的。 sync 指令回车后就是漫长的代码签出了,这里是在本地的仓库的签出,所以是很容易并且很快捷的了,基本是 2M/s 的速度。   最后,最后的最后,你就在你设定好的目录下看到你所需要的 Android4.4 的源代码啦。恩恩,还是有一点小小的激动的呢。  
  • 热度 20
    2012-7-13 10:06
    1115 次阅读|
    0 个评论
      在上两篇博文里我们介绍了W5300E01-ARM 交叉编译器(Cross Compiler)用户手册的前半部分,包括第一章简介和第二章的源代码下载以及第三四五章,分别是LINUX内核安装,‘BINUTILS’安装和‘GCC’安装。 在这篇博文里我们将介绍第六章’glibc’安装。希望对大家有所帮助。 第一篇博文在这里: http://forum.eet-cn.com/BLOG_ARTICLE_13051.HTM 第二篇博文在这里: http://forum.eet-cn.com/BLOG_ARTICLE_13072.HTM     6.‘glibc’ 安装 6.1移动到工作目录并解压 ‘glibc’压缩包 cd /cross_tools/ tar jxvf glibc-2.3.3.tar.bz2 6.2在 ‘glibc’ 目录下解压‘linuxhreads’ tar –C glibc-2.3.3 –jxvf glibc-linuxthreads-2.3.3.tar.bz2 cd glibc-2.3.3 6.3修改‘Makeconfig’ 文件. (第514行) 修改前       gnulib := -lgcc –lgcc_eh       修改后       gnulib := -lgcc         6.4修改‘csu/Makefile’文件(第107行) 修改前       CFLAGS-initfini.s = -g0 –fPIC –fno-inline-functions       修改后       CFLAGS-initfini.s = -O1 –g0 –fPIC –fno-inline-functions         6.5修改‘linuxthreads/Makefile’ 文件(第104行) 修改前       CFLAGS-pt-initfini.s = -g0 –fPIC –fno-inline-functions       修改后       CFLAGS-pt-initfini.s = -O1 –g0 –fPIC –fno-inline-functions         6.6修改‘sysdeps/generic/framestate.c’文件. (第44行) 修改前       frame_state_for = fallback_frame_state_for;         修改后       #ifndef __USING_SJLJ_EXCEPTIONS__ frame_state_for = fallback_frame_state_for; #else frame_state_for = abort; #endif                 6.7修改‘sysdeps/arm/machine-gmon.h’文件. (第 35 ~ 38行) 修改前       static void mcount_internal (u_long frompc, u_long selfpc);   #define _MCOUNT_DECL(frompc, selfpc) \ static void mcount_internal (u_long frompc, u_long selfpc)             修改后       #define _MCOUNT_DECL(frompc, selfpc) \ void mcount_internal (u_long frompc, u_long selfpc)           6.8修改‘sysdeps/unix/sysv/linux/arm/ioperm.c’文件(第 98 ~ 104行) 修改前       static int init_iosys (void) { char systype ; int I, n; static int iobase_name = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT };                     修改后       #include static int init_iosys (void) { char systype ; int I, n; #if LINUX_VERSION_CODE 132119 static int iobase_name = { CTL_BUS, BUS_ISA, BUS_ISA_PORT_SHIFT }; #else static int iobase_name = { CTL_BUS, CTL_BUS_ISA, BUS_ISA_PORT_SHIFT }; #endif                               创建一个目录对 ‘glibc’进行编译 mkdir build cd build 6.9安装编译环境 CC=arm-linux-gcc ../configure –host=arm-linux –build=i686-pc-linux-gnu \ --prefix=/usr/local/arm/arm-linux –with-headers=/usr/src/linux/include \ --enable-add-ons=linuxthreads –enable-shared 6.10编译平台。 如果你在编译‘csu/version-info.h’文件时发生错误,打开 修正这个文件并且重新编译。 (第1~4行) make 修改前       “Compiled on a Linux 2.6.24-16-generic system on 2008-10-14 “ “Available extensions: “             修改后       “Compiled on a Linux 2.6.24-16-generic system on 2008-10-14“ “Available extensions:“         make 6.11安装编译的 ‘glibc’程序库. Make install 6.12检查安装的 ‘glibc’ 程序库 ls /usr/local/arm/arm-linux/lib     如果您有任何疑问,请直接留言或登录WIZnet官方网站:http://www.wiznettechnology.cn/ 或者来电:86-10-84539974(转166),QQ:2377211388, 邮箱:wiznetbj@wiznettechnology.com  联系人:Jerry ,谢谢! 公司微博是: http://weibo.com/wiznet2012 公司博客是:http://blog.csdn.net/WIZnet2012  
  • 热度 18
    2012-4-20 10:12
    1370 次阅读|
    0 个评论
    接上文 Arduino 和 WIZnet: http://forum.eet-cn.com/BLOG_ARTICLE_12057.HTM 具体代码如下: Code to test wiznet WIZ810MJ module See: Current features: * Read register/address values * Write register/address values * Configure networking to enable ping * Terrible hacked-together code License: LGPL (Although note spi_transfer comes from the Playground originally.) */ // Define SPI-related pins #define PIN_DATA_OUT 11 // MOSI (Master Out / Slave In) #define PIN_DATA_IN 12 // MISO (Master In / Slave Out) #define PIN_SPI_CLOCK 13 // SCK (Serial Clock) #define PIN_SLAVE_SELECT 10 // SS (Slave Select) #define PIN_RESET 9 // WIZnet module /RESET #define WIZNET_OPCODE_READ 0x0F #define WIZNET_OPCODE_WRITE 0xF0 #define DUMMY_DATA 0xFF void setup () { Serial.begin(9600); Serial.println("Setup enter..."); Serial.print("SPCR: "); Serial.println(SPCR, BIN); // Configure SPI // Configure I/O pins pinMode(PIN_DATA_OUT, OUTPUT); pinMode(PIN_DATA_IN, INPUT); pinMode(PIN_SPI_CLOCK, OUTPUT); pinMode(PIN_SLAVE_SELECT, OUTPUT); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave // Configure SPI Control Register (SPCR) (All values initially 0) // Bit Description // 7 SPI Interrupt Enable -- disable (SPIE -- 0) // 6 SPI Enable -- enable (SPE -- 1) // 5 Data Order -- MSB 1st (DORD -- 0) (Slave specific) // 4 Master/Slave Select -- master (MSTR -- 1) // 3 Clock Polarity -- (CPOL -- 0) (Slave specific) ("Mode") // 2 Clock Phase -- (CPHA -- 0) (Slave specific) // 1 SPI Clock Rate Select 1 -- } (SPR1 -- 0) // 0 SPI Clock Rate Select 0 -- } fOSC/4 (SPR0 -- 0) ("Fastest" but see SPI2X in SPSR) SPCR = (1 Serial.print("SPCR: "); Serial.println(SPCR, BIN); // Clear previous data and status (TODO: Determine if necessary/better way.) // (Based on Playground SPI example.) byte dummy; dummy = SPSR; dummy = SPDR; delay(10); // Serial.println((1 // Serial.print("IODIR response: "); // iodirVal = getRegister(deviceOpcodeRead, REG_IODIR); // Serial.println(iodirVal, BIN); // setRegister(deviceOpcodeWrite, REG_IODIR, newVal); Serial.println("Triggering reset..."); pinMode(PIN_RESET, OUTPUT); digitalWrite(PIN_RESET, HIGH); // no reset delay(10); // Pretty arbitrary length digitalWrite(PIN_RESET, LOW); // reset delay(10); digitalWrite(PIN_RESET, HIGH); // no reset delay(10); Serial.println("Reset triggered..."); // Attempt read Serial.println("Read attempt..."); // digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave /* byte data; data = spi_transfer(0x0F); // read Serial.print("Response: "); Serial.println(data, HEX); data = spi_transfer(0x00); // address part1 Serial.print("Response: "); Serial.println(data, HEX); data = spi_transfer(0x18); //address part2 //18 should return 0xD0 after reset. Serial.print("Response: "); Serial.println(data, HEX); data = spi_transfer(0xFF); // dummy Serial.print("Response: "); Serial.println(data, HEX); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave */ // RTR Retry Time-value Register Serial.print("Read 0x0017: "); Serial.println(readAddressValue(0x00, 0x17), HEX); Serial.print("Read 0x0018: "); Serial.println(readAddressValue(0x00, 0x18), HEX); Serial.println("Read attempt end..."); Serial.println("Write attempt start..."); Serial.print("Initial read 0x0001: "); Serial.println(readAddressValue(0x00, 0x01), HEX); writeAddressValue(0x00, 0x01, 0xC0); Serial.print("Post-write read 0x0001: "); Serial.println(readAddressValue(0x00, 0x01), HEX); Serial.println("Write attempt end..."); Serial.println("Configure device..."); // default gateway writeAddressValue(0x00, 0x01, 0xC0); writeAddressValue(0x00, 0x02, 0xA8); writeAddressValue(0x00, 0x03, 0x02); writeAddressValue(0x00, 0x04, 0x65); // subnet mask writeAddressValue(0x00, 0x05, 0xFF); writeAddressValue(0x00, 0x06, 0xFF); writeAddressValue(0x00, 0x07, 0xFF); writeAddressValue(0x00, 0x08, 0x00); // source hardware address (MAC?) writeAddressValue(0x00, 0x09, 0x00); writeAddressValue(0x00, 0x0A, 0xDE); writeAddressValue(0x00, 0x0B, 0xAD); writeAddressValue(0x00, 0x0C, 0xBE); writeAddressValue(0x00, 0x0D, 0xEF); writeAddressValue(0x00, 0x0E, 0x00); // source ip address writeAddressValue(0x00, 0x0F, 0xC0); writeAddressValue(0x00, 0x10, 0xA8); writeAddressValue(0x00, 0x11, 0x02); writeAddressValue(0x00, 0x12, 0x69); Serial.println("End configure device..."); Serial.println("Setup exit..."); } byte readAddressValue(byte addressHiByte, byte addressLowByte) { // TODO: use a word for the address instead byte data = 0x00; digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave // TODO: Check response values? e.g. 0x00, 0x01, 0x02 spi_transfer(WIZNET_OPCODE_READ); spi_transfer(addressHiByte); spi_transfer(addressLowByte); data = spi_transfer(DUMMY_DATA); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave return data; } void writeAddressValue(byte addressHiByte, byte addressLowByte, byte targetValue) { // TODO: use a word for the address instead digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave // TODO: Check response values? e.g. 0x00, 0x01, 0x02 spi_transfer(WIZNET_OPCODE_WRITE); spi_transfer(addressHiByte); spi_transfer(addressLowByte); spi_transfer(targetValue); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave } /* byte getRegister(byte targetDeviceOpcode, byte registerAddress) { digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave spi_transfer(targetDeviceOpcode); spi_transfer(registerAddress); // The register we want to read byte data; // Correct type? data = spi_transfer(0xFF); // Transfer dummy byte to get response digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave return data; } */ /* void setRegister(byte targetDeviceOpcode, byte registerAddress, byte value) { // TODO: Do Better? digitalWrite(PIN_SLAVE_SELECT, LOW); // Enable slave spi_transfer(targetDeviceOpcode); spi_transfer(registerAddress); // The register we want to write spi_transfer(value); digitalWrite(PIN_SLAVE_SELECT, HIGH); // Disable slave } */ // From Playground char spi_transfer(volatile char data) { SPDR = data; // Start the transmission while (!(SPSR (1 { }; return SPDR; // return the received byte } void loop() { }   欢迎大家留言评论~~
  • 热度 19
    2012-4-18 09:45
    2027 次阅读|
    0 个评论
    我们在利用Arduino开发网络服务器的时候,会用到以太网Shield。在其中加入以太网库后,你的设备将能够通过以太网Shield应答HTTP的请求。在打开浏览器并确认你的以太网Shield的IP地址后,你的Arduino将会用足够的HTML来应答浏览器,并让浏览器显示六个模拟针脚的输入值。 需要的硬件 Arduino 以太网 Shield 兼容Shield的 Arduino 板 Circuit 电路 以太网shield能让我们的Arduino通过SPI总线连接到一个WIZnet以太网控制器。以太网shield利用第10、11、12、13针脚来连接WIZnet的SPI。以太网shield的新产品在开发板上含有一个SD卡。数字针脚4是用来控制SD卡上面的slave select针脚。 以太网shield应当连接到一个具有以太网线的网络。你需要在程序中更改网络设置来和网络进行通信。 Arduino会被放置在以太网shield下面 示意图 源代码 /*   Web Server    A simple web server that shows the value of the analog input pins.  using an Arduino Wiznet Ethernet shield.     Circuit:  * Ethernet shield attached to pins 10, 11, 12, 13  * Analog inputs attached to pins A0 through A5 (optional)    created 18 Dec 2009  by David A. Mellis  modified 20 Mar 2012  by Tom Igoe    */ #include #include // Enter a MAC address and IP address for your controller below. // The IP address will be dependent on your local network: byte mac[] = {    0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192,168,1, 177); // Initialize the Ethernet server library // with the IP address and port you want to use  // (port 80 is default for HTTP): EthernetServer server(80); void  setup () {   Serial.begin(9600);    // start the Ethernet connection and the server:   Ethernet.begin(mac, ip);   server.begin();   Serial.print("server is at ");   Serial.println(Ethernet.localIP()); } void  loop () {    // listen for incoming clients   EthernetClient client = server.available();   if (client) {     Serial.println("new client");      // an http request ends with a blank line     boolean currentLineIsBlank = true;     while (client.connected()) {       if (client.available()) {         char c = client.read();         Serial.write(c);          // if you've gotten to the end of the line (received a newline          // character) and the line is blank, the http request has ended,          // so you can send a reply         if (c == ' \n '  currentLineIsBlank) {            // send a standard http response header           client.println("HTTP/1.1 200 OK");           client.println("Content-Type: text/html");           client.println("Connnection: close");           client.println();           client.println("");           client.println("");                     // add a meta refresh tag, so the browser pulls again every 5 seconds:           client.println(" ***** http-equiv="strong" / \"refresh \"  content= \" 5 \" ");            // output the value of each analog input pin           for (int analogChannel = 0; analogChannel  6; analogChannel++) {             int sensorReading = analogRead(analogChannel);             client.print("analog input ");             client.print(analogChannel);             client.print(" is ");             client.print(sensorReading);             client.println(" ");                  }           client.println("");           break;         }         if (c == ' \n ') {            // you're starting a new line           currentLineIsBlank = true;         }          else if (c != ' \r ') {            // you've gotten a character on the current line           currentLineIsBlank = false;         }       }     }      // give the web browser time to receive the data     delay(1);      // close the connection:     client.stop();     Serial.println("client disonnected");   } }   英文详细内容请参考:http://arduino.cc/en/Tutorial/WebServer 对于WIZnet的产品,如果您有什么疑问请直接留言也可以登录WIZnet的官网:http://www.wiznettechnology.cn  或者来信:Tel: 86-10-84539974(转166),QQ:2464237212,邮箱:wiznetbj@wiznettechnology.com,联系人:Lily Zhang,谢谢!        
相关资源