Intel+Ardruino 101

为了传说中的那啥, 啊, 嗯..

#include <CurieBLE.h>

const int ledPin = 13; // set ledPin to on-board LED  LED的pin脚就是14
const int buttonPin = 4; // set buttonPin to digital pin 4   按键pin脚是4

BLEPeripheral blePeripheral; // create peripheral instance    这里就好像一个起一个对象一样, 连new都不用, 就特么起了一个外设, 牛逼, java党表示不服...
BLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214"); // create service with a 128-bit UUID (32 characters exclusive of dashes).   生成一个128位的UUID, 目的是生成一个service. 具体的方法, 参考ble的协议要求文档,core什么的...
// Long UUID denote custom user created UUID

// create switch characteristic and allow remote device to read and write

//下面就是创建一个对象的方法类似, 创建一个led的特征字, 可读可写
BLECharCharacteristic ledCharacteristic("19B10011-E8F2-537E-4F6C-D104768A1214", BLERead | BLEWrite);  
// create button characteristic and allow remote device to get notifications

//下面创建一个按钮用的特征字, 可读可通知.
BLECharCharacteristic buttonCharacteristic("19B10012-E8F2-537E-4F6C-D104768A1214", BLERead | BLENotify); // allows remote device to get notifications
// Note use of Typed Characteristics. These previous 2  characeristics are of the type char

//setup是特么阿追诺的特色(shai)
void setup() {

//设置串口9600
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT); // use the LED on pin 13 as an output 设置对应的pin脚为输出
  pinMode(buttonPin, INPUT); // use button pin 4 as an input   button的pin脚是输入.

// set the local name peripheral advertises   设置本地广播名, 问题是似乎设置了, 没用...
  blePeripheral.setLocalName("SmartJar");
  // set the UUID for the service this peripheral advertises:

//设置外设的广播用UUID
  blePeripheral.setAdvertisedServiceUuid(ledService.uuid());

// add service and characteristics

//添加服务与特征字.
  blePeripheral.addAttribute(ledService);
  blePeripheral.addAttribute(ledCharacteristic);
  blePeripheral.addAttribute(buttonCharacteristic);

// set initial values for led and button characteristic

//设置初始值
  ledCharacteristic.setValue(0);
  buttonCharacteristic.setValue(0);

// advertise the service

//广播
  blePeripheral.begin();

//串口打印.
  Serial.println("Bluetooth device active, waiting for connections...");
}

//这里就是一个大while (1)
void loop() {
  // poll peripheral

//外设轮询
  blePeripheral.poll();

// read the current button pin state

//读取目前的按键pin状态
  char buttonValue = digitalRead(buttonPin);

// has the value changed since the last read

//看来要适应这种对象的写法. 判断button的值有没有改变.
  boolean buttonChanged = (buttonCharacteristic.value() != buttonValue);

if (buttonChanged) {

//如果按键改变值, 就更新特征字, 两个特征字同时改.
    // button state changed, update characteristics
    ledCharacteristic.setValue(buttonValue);
    buttonCharacteristic.setValue(buttonValue);
  }

if (ledCharacteristic.written() || buttonChanged) {

//写入任何, 或者按键改变, 都会在串口打印当前的LED灯的状态, 并实际性的改变LED的状态.
    // update LED, either central has written to characteristic or button state has changed
    // if you are using a phone or a BLE  central device that is aware of this characteristic, writing a value of 0x40 for example
    // Will be interpreted as written
    if (ledCharacteristic.value()) {
      Serial.println("LED on");
      digitalWrite(ledPin, HIGH);
    } else {
      // If central writes a 0 value then it is interpreted as no value and turns off the LED
      Serial.println("LED off");
      digitalWrite(ledPin, LOW);
    }
  }
}

时间: 2024-12-12 15:53:36

Intel+Ardruino 101的相关文章

Intel+Ardruino 101 翻转时点灯

/*  ===============================================  Example sketch for CurieIMU library for Intel(R) Curie(TM) devices.  Copyright (c) 2015 Intel Corporation.  All rights reserved. Based on I2C device class (I2Cdev) demonstration Arduino sketch for

Using 1-Wire device with Intel Galileo

Using 1-Wire device with Intel Galileo 3 Replies Many people have had trouble with getting 1-Wire devices to work with the Galileo and Galileo Gen2 boards. The main reason is that the Galileo and Galileo Gen2 uses IO expanders for many of  its GPIOs.

学习 Linux,101: Linux 命令行

概述 本教程将简要介绍 bash shell 的一些主要特性,涵盖以下主题: 使用命令行与 shell 和命令交互 使用有效的命令和命令序列 定义.修改.引用和导出环境变量 访问命令历史和编辑工具 调用路径内和路径外的命令 使用手册页了解命令 回页首 bash shell bashshell 是可用于 Linux 的几个 shell 之一,也被称为 Bourne-again shell,是根据一个早期的 shell (/bin/sh) 的创建者 Stephen Bourne 来命名的.Bash

Intel 移位指令的陷阱(转)

今天发现了一个Intel逻辑左移指令shl的一个bug. 逻辑左移的概念是对给定的目的操作数左移COUNT次,每次移位时最高位移入标志位CF中,最低位补零. 其中OPRD1为目的操作数, 可以是通用寄存器或存储器操作数. 首先说明一下我的环境:Intel(R) Pentium(R) 4 CPU,操作系统是Fedora 12,gcc的版本是4.4.2. 下面请看测试程序: #include <stdio.h> int main() { #define MOVE_CONSTANT_BITS 32

安装android studio报错Failed to install Intel HAXM.

在安装android studio的过程中,安装到android的模拟器加速器(intel HAXM)这一步时,报错: HAXM是用来管理硬件加速的,估计是用了这个东西模拟器就能Eclipse的龟速吧. 解决: 原因:没有找到reg.exe; 给reg.exe配置环境变量. reg.exe一般是在C:\Windows\System32\目录下. 可以将路径C:\Windows\System32\reg.exe配置在PATH下, 也可以直接将%SystemRoot%\system32;%Syste

【Mocha.js 101】同步、异步与 Promise

前情提要 在上一篇文章<[Mocha.js 101]Mocha 入门指南>中,我们提到了如何用 Mocha.js 进行前端自动化测试,并做了几个简单的例子来体验 Mocha.js 给我们带来的便利. 在本篇文章中,我们将了解到 Mocha.js 的同步/异步测试,以及如何测试 Promise. 同步代码测试 在上一篇文章中,其实我们已经学会了如何测试同步代码.今天,我们 BDD 风格编写一个测试: var should = require( 'should' ); var Calculator

centos7下安装intel Media Server Studio记录

1. 硬件环境 CPU:要求为intel酷睿4代(或以上) 2. 操作系统 centos7(x64) 3. 准备SDK安装包 SDK安装包需要从intel官网获取(https://software.intel.com/en-us/intel-media-server-studio/),可是申请试用版.我使用的是essentials版. 4. 安装 4.1 创建一个video Group,并添加用户 例如: usermod -a -G video root usermod -a -G video 

Intel HEX文件解析

近期有一个需求就是为Arduino开发板做一个基于蓝牙的无线烧录程序.眼下的Arduino程序都是通过USB线连接到电脑的主机上,实际的传输过程是基于USB协议的,这个过程还是比較麻烦的.由于每次的编译完以后都须要通过一个USB线来完毕传输烧录的工作,这个还是非常麻烦的. 原理解读 在Arduino中.利用USB来完毕传输烧录大概是这么一个过程. 每一个Arduino源程序.即sketch文件,经过一系列的编译处理以后.终于会形成一个Intel HEX格式的文件.这个HEX文件事实上就一个被封装

kaggle首秀之intel癌症预测(续篇)

之前写了这篇文章.现在把他搬到知乎live上了.书非借不能读也,因此搞了点小费用,如果你觉得贵,加我微信我给你发红包返回给你. 最近的空余时间拿去搞kaggle了, 好久没更新文章了.今天写写kaggle首秀的一段baseline吧. 这个题目是intel的癌症预测.我之前本来是想打谷歌的视频多标签分类的,但是那个数据量大,需要用谷歌云,然后呢,需要用双币信用卡注册,结果我的双币信用卡没有开通国外账户,考虑到安全性(去年我一个同事的信用卡直接在澳大利亚被盗刷),就换成了这个比赛了. 这个比赛很简