1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 山重水复疑无路 柳暗花明又一村 。

山重水复疑无路 柳暗花明又一村 。

时间:2019-09-13 19:27:03

相关推荐

山重水复疑无路 柳暗花明又一村 。

Arduino

一、模块使用1.DFPlayer Mini MP3音乐播放模块2.舵机3.L298N1.无调速功能2.加上调速功能5.OLED0.966.SYN62887.SU-03T语音模块(串行通讯)二、函数,库....1.字符串操作函数(太牛逼了,强烈推荐,给爷好好学!!!!!!!!)2、串口接收字符串2.1接受16进制数3.软串口冷知识多个软串口怎么用?###很重要4.millis()函数4.15.按键消抖(状态机)三、ESP8266+BILNKER1、配置环境2、添加设备3、arduino程序编写以及上传4.常用模式4.json1.UDP接收字符并解析

一、模块使用

1.DFPlayer Mini MP3音乐播放模块

接线图,注意*在TX,RX与MP3模块的RX,TX之间连一个1k电阻。因为DFPlayer Mini模块工作电压应该是3.3V,而主控板传入电压为5V,因此需要1K左右电阻分压。*

内存卡文件配置,非常重要!!!!!!!

注意:文件夹命名需要是mp3,放置在SD卡根目录下,而mp3文件命名需要是4位数字,例如"0001.mp3",放置在mp3文件夹下。 如需中英文命名,可以添加在数字后,例如"0001hello.mp3"或者"0001后来.mp3"。

例如:

一定是要有延时要不然播放不完整!!!!!!!!

代码块:

代码:

/*!* MindPlus* uno**/#include <DFRobot_PlayerMini.h>#include <SoftwareSerial.h>// 创建对象DFRobot_PlayerMini mp3;SoftwareSerialsoftSerialmp3(2, 3);// 主程序开始void setup() {mp3.begin(&softSerialmp3);mp3.volume(100);mp3.start();}void loop() {mp3.playMp3Folder(1);delay(5000);}

2.舵机

有PWM功能引脚才能用!!!!!!

程序贴在这里了

#include <Servo.h>#define PIN_SERVO 10Servo myservo;void setup(){myservo.attach(PIN_SERVO);}void loop(){myservo.write(0);delay(1000);myservo.write(80);delay(1000);myservo.write(160);delay(1000);myservo.write(80);delay(1000);myservo.write(0);delay(1000);}

3.L298N

1.无调速功能

这个写的很好

但是没有调速功能。小白先实现这个吧。

//LingShun Labint input1 = 5; // 定义uno的pin 5 向 input1 输出 int input2 = 6; // 定义uno的pin 6 向 input2 输出int input3 = 9; // 定义uno的pin 9 向 input3 输出int input4 = 10; // 定义uno的pin 10 向 input4 输出void setup() {// Serial.begin (9600);//初始化各IO,模式为OUTPUT 输出模式pinMode(input1,OUTPUT);pinMode(input2,OUTPUT);pinMode(input3,OUTPUT);pinMode(input4,OUTPUT);}void loop() {//forward 向前转digitalWrite(input1,HIGH); //给高电平digitalWrite(input2,LOW); //给低电平digitalWrite(input3,HIGH); //给高电平digitalWrite(input4,LOW); //给低电平delay(1000); //延时1秒//stop 停止digitalWrite(input1,LOW);digitalWrite(input2,LOW); digitalWrite(input3,LOW);digitalWrite(input4,LOW); delay(500); //延时0.5秒//back 向后转digitalWrite(input1,LOW);digitalWrite(input2,HIGH); digitalWrite(input3,LOW);digitalWrite(input4,HIGH); delay(1000); }

2.加上调速功能

先看这个吧

void setup() {Serial.begin(115200);//初始化各IO,模式为OUTPUT 输出模式pinMode(2,OUTPUT);pinMode(3,OUTPUT);pinMode(4,OUTPUT);pinMode(5,OUTPUT);//默认电机停止转动,全部设为低电平digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);analogWrite(9,255);//左轮速运行analogWrite(10,250);//右轮速运行}void loop() {if (Serial.available() > 0) {Serial.println(char(Serial.read()))if(char(Serial.read())=='a'){a1();}if(char(Serial.read())=='b'){a2();}if(char(Serial.read())=='c'){a3();}if(char(Serial.read())=='d'){a4();}if(char(Serial.read())=='e'){a5();}if(char(Serial.read())=='f'){a6();}if(char(Serial.read())=='g'){a7();}if(char(Serial.read())=='i'){a8();}delay(2);}//forward 前进}viod a1()//左上{}viod a2(){}viod a3(){}viod a4(){}viod a5(){}viod a6(){}viod a7(){}viod a8(){}

5.OLED0.96

#include <SPI.h> // 加载SPI库#include <Wire.h> // 加载Wire库#include <Adafruit_GFX.h> // 加载Adafruit_GFX库#include <Adafruit_SSD1306.h> // 加载Adafruit_SSD1306库// 定义 OLED屏幕的分辨率Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);void setup() {Serial.begin(9600); // 设置串口波特率Serial.println("OLED FeatherWing test"); // 串口输出display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 设置OLED的I2C地址display.clearDisplay(); // 清空屏幕display.setTextSize(1); // 设置字体大小display.setTextColor(SSD1306_WHITE); // 设置字体颜色display.setCursor(0,0); // 设置开始显示文字的坐标display.println("Hello World!"); // 输出的字符display.println(" by ");display.display(); // 使更改的显示生效}void loop() {}

6.SYN6288

/p/66314323/

arduino要转字符类型,GB2312

1.先转码

/T-Hex/

char Chinese_1[50] = {0xB2,0xBB,0xD4,0xDA,0xB4,0xF2,0xBF,0xA8,0xCA,0xB1,0xBC,0xE4,0xB7,0xB6,0xCE,0xA7,0x00};//不在打卡时间范围void setup() {// put your setup code here, to run once:Serial.begin(9600);delay(1000);//SYN_FrameInfo(0,Chinese_GB2312);}void loop() {// put your main code here, to run repeatedly:Serial.println(Chinese_1);delay(4000);}

7.SU-03T语音模块(串行通讯)

const byte b1[]={0XAA,0X55,0X01,0X01,0X55,0XAA};const byte b2[]={0XAA,0X55,0X02,0X02,0X55,0XAA};const byte b3[]={0XAA,0X55,0X03,0X03,0X55,0XAA};const byte b4[]={0XAA,0X55,0X04,0X04,0X55,0XAA};const byte b5[]={0XAA,0X55,0X05,0X05,0X55,0XAA};void setup() {// put your setup code here, to run once:Serial.begin(9600);Serial.write(b1,(sizeof(b1) / sizeof(b1[0])))}void loop() {// put your main code here, to run repeatedly:}

二、函数,库…

1.字符串操作函数(太牛逼了,强烈推荐,给爷好好学!!!!!!!!)

先贴出来原链接:/1996jiwei/p/6666818.html

String.h库函数 贴出来两个比较常用的吧!

1.寻找字符串第几个

str.charAT(n)

描述

获取字符串的第n个字符

参数

n :是一个索引,作为下标

2.截取字符串

描述

用来截取字符串中间的某一位置。另外是决定那里结束

用法:

string1.substring(from); //返回 from 之后的string1.substring(from,to); //返回 from 和 to 之间的

参数:

string1:原本的字符串from:要截取的字符串从第几个字开始。to:要截取后面的第几个字

3.实战

#include "String.h"String a_1,a_2,S;void setup(){Serial.begin(9600);//打开串口,设置波特率9600a_1 = "hello";}void loop(){S = a_1.charAt(3); //取对象里面的方法charAta_2=a_1.substring(0,3);Serial.print(a_2);Serial.println();//输出换行符delay(200);}

2、串口接收字符串

String comdata = "";void setup(){Serial.begin(9600);}void loop(){while (Serial.available() > 0) {comdata += char(Serial.read());delay(2);}if (comdata.length() > 0){Serial.println(comdata);comdata = "";}}

2.1接受16进制数

只需要直接int就可以

void setup(){Serial.begin(9600);}void loop(){if (Serial.available() > 0) {Serial.println(int(Serial.read()));delay(2);}}

3.软串口冷知识

除HardwareSerial外,Arduino还提供了SoftwareSerial类库,它可以将你的其他数字引脚通过程序模拟成串口通信引脚。

通常我们将Arduino UNO上自带的串口称为硬件串口,而使用SoftwareSerial类库模拟成的串口,称为软件模拟串口(简称软串口)。

在Arduino UNO上,提供了0(RX)、1(TX)一组硬件串口,可与外围串口设备通信,如果要连接更多的串口设备,可以使用软串口。

软串口是由程序模拟实现的,使用方法类似硬件串口,但有一定局限性:在Arduino UNO MEGA上部分引脚不能被作为软串口接收引脚,且软串口接收引脚波特率建议不要超过57600。

#include <SoftwareSerial.h>//实例化软串口SoftwareSerial mySerial(2, 3); // RX, TXvoid setup(){Serial.begin(115200);while (!Serial) {}Serial.println("Goodnight moon!");mySerial.begin(9600);mySerial.println("Hello, world?");}void loop(){if (mySerial.available())Serial.write(mySerial.read());if (Serial.available())mySerial.write(Serial.read());}

多个软串口怎么用?###很重要

当需要连接多个串口设备时,可以建立多个软串口,但限于软串口的实现原理,Arduino UNO只能同时监听一个软串口,当存在多个软串口设备时,你需要使用listen() 函数指定需要监听的设备。如程序中存在portOne、portTwo两个软串口对象时,你欲监听portOne,便需要使用portOne.listen() 语句,要切换监听port2,便使用portTwo.listen() 语句。

示例程序如下:

/*Arduino UNO软串口通信通过listen()切换监听软串口*/#include <SoftwareSerial.h>SoftwareSerial portOne(10, 11);SoftwareSerial portTwo(8, 9);void setup() {Serial.begin(9600);while (!Serial) {}portOne.begin(9600);portTwo.begin(9600);}void loop() {//监听1号软串口portOne.listen();Serial.println("Data from port one:");while (portOne.available() > 0) {char inByte = portOne.read();Serial.write(inByte);}Serial.println();//监听2号软串口portTwo.listen();Serial.println("Data from port two:");while (portTwo.available() > 0) {char inByte = portTwo.read();Serial.write(inByte);}Serial.println();}

4.millis()函数

unsigned long previousMillis;intledState;void setup() {// put your setup code here, to run once:pinMode(LED_BUILTIN, OUTPUT);}void ledBlink( int ledPin, uint32_t period ){unsigned long currentMillis = millis(); /* 记录当前时间 */if ( currentMillis - previousMillis >= period ) /* 检查 "period" ms是否通过 */{ledState = digitalRead( ledPin );previousMillis = currentMillis; /* 保存上次闪烁LED时 */if ( ledState == LOW ) /* 如果LED关闭,则打开,反之亦然 */{ledState = HIGH;} else {ledState = LOW;}digitalWrite( ledPin, ledState ); /* LED为ledState状态 */}}void loop() {// put your main code here, to run repeatedly:ledBlink(LED_BUILTIN,500);}/* 利用millis()函数做成闪灯效果的函数 */

4.1

unsigned long previousMillis;intledState;int a=1;void setup() {// put your setup code here, to run once:Serial.begin(9600);pinMode(LED_BUILTIN, OUTPUT);}void ledBlink(uint32_t period ){unsigned long currentMillis = millis(); /* 记录当前时间 */if ( currentMillis - previousMillis >= period ) /* 检查 "period" ms是否通过 */{a=a*-1;if (a==1){Serial.println("1");}if (a==-1){Serial.println("-1");}previousMillis = currentMillis; /* 保存上次闪烁LED时 */}}void loop() {// put your main code here, to run repeatedly:ledBlink(500);}

5.按键消抖(状态机)

/hp150119/article/details/114358170

#include <Bounce2.h>int BUTTON_PIN = 32;//按钮连接的针脚Bounce2::Button button = Bounce2::Button();//实例化一个抖动对象int ledState = LOW;void setup() {button.attach( BUTTON_PIN, INPUT_PULLUP);button.interval(5);//间隔是5msSerial.begin(9600);//用于串口输出}void loop() {button.update();//更新if ( button.pressed() ) {Serial.println("按下了");}}

三、ESP8266+BILNKER

1、配置环境

第一:下载arduino:

下载地址:/en/software

第二步:下载并安装blinker Arduino库

https://diandeng.tech/dev

Windows:将下载好的blinker库解压到我的电脑>文档>Arduino>libraries 文件夹中

第三步:下载blinker

Android下载:点击下载或 在android应用商店搜索“blinker”下载安装IOS下载:点击下载或 在app store中搜索“blinker”下载

第四步:打开后自己注册后登录

2、添加设备

每一个设备在blinker上都有一个唯一的密钥,blinker设备会使用该密钥认证设备身份,从而使用blinker云平台上的相关服务。

进入blinker App,点击“添加设备”,进行设备添加。

选择独立设备,再选择WiFi接入,即可获取一个唯一的密钥。暂存这个密钥,此后程序中会使用到它。

本示例可以将设备端采集的温湿度数据,通过心跳包同步数据的方式,显示到APP上。

通过界面编辑功能,添加两个数据组件,将数据键值分别设为humi和temp,两个组件分别对应温湿度数据。 如图:

这个组件名要记得,是和arduino交互的!

OK,添加完成

3、arduino程序编写以及上传

先更改自己的信息

char auth[] = "Your Device Secret Key";char ssid[] = "Your WiFi network SSID or name";char pswd[] = "Your WiFi network WPA password or WEP key";

复制到arduino ide编辑器

#define BLINKER_WIFI#include <Blinker.h>char auth[] = "Your Device Secret Key";char ssid[] = "Your WiFi network SSID or name";char pswd[] = "Your WiFi network WPA password or WEP key";BlinkerNumber HUMI("humi");BlinkerNumber TEMP("temp");float humi_read = 0, temp_read = 0;void heartbeat(){HUMI.print(humi_read);TEMP.print(temp_read);}void setup(){Serial.begin(115200);BLINKER_DEBUG.stream(Serial);BLINKER_DEBUG.debugAll();Blinker.begin(auth, ssid, pswd);Blinker.attachHeartbeat(heartbeat);}void loop(){Blinker.run();humi_read = 54.3;temp_read = 16.5;Blinker.delay(2000);}

OK,完成

4.常用模式

#define BLINKER_WIFI#define TEXTE_1 "TextKey"#include <Blinker.h>char auth[] = "c16512f65b14";char ssid[] = "ESP8266";char pswd[] = "12345678";BlinkerText Text1("TEXTE");BlinkerText Text2("TEXTE1");BlinkerText Text3("TEXTE2");BlinkerText Text4("TEXTE3");BlinkerText Text5("TEXTE4");String comdata = "";//声明字符串变量String aa,bb,cc,dd;String ee;int gg=0;void heartbeat(){Text1.print(aa);Text2.print(bb);Text3.print(cc);Text4.print(dd);Text5.print(ee);}void setup(){Serial.begin(9600);BLINKER_DEBUG.stream(Serial);BLINKER_DEBUG.debugAll();Blinker.begin(auth, ssid, pswd);Blinker.attachHeartbeat(heartbeat);}void loop(){Blinker.run();while (Serial.available() > 0) {comdata+= char(Serial.read());delay(2);}if (comdata.length() > 0){gg=comdata.toInt();Serial.println(gg);if(gg==1){aa="已满";}if(gg==2){aa="未满";} if(gg==3){bb="已满";}if(gg==4){bb="未满";} if(gg==5){cc="已满";}if(gg==6){cc="未满";} if(gg==7){dd="已满";}if(gg==8){dd="未满";} comdata = "";}Blinker.delay(500);}

4.json

/*** 编写Json字符串* @author 单片机菜鸟* @date /06/02*/#include <ArduinoJson.h>void setup() {Serial.begin(115200);while (!Serial) continue;// Json对象对象树的内存工具 静态buffer // 200 是大小 如果这个Json对象更加复杂,那么就需要根据需要去增加这个值.StaticJsonDocument<256> doc;JsonObject root = doc.to<JsonObject>();root["id"] = "123";root["version"] = "1.0";JsonObject weather = root.createNestedObject("params");JsonObject weather1 = weather.createNestedObject("A_4");weather1["value"] = 1;root["method"] = "thing.event.property.post";serializeJsonPretty(root, Serial);}void loop() {// not used in this example}

//MN Maker//Laser Temp Gun//10.6.19#include <Wire.h>#include <Adafruit_MLX90614.h>#include <Adafruit_SSD1306.h>#define SCREEN_WIDTH 128 // OLED display width, in pixels#define SCREEN_HEIGHT 64 // OLED display height, in pixelsconst int Laser_Pin=5; //Laser Pinint buttonState = 0; const int buttonPin = 2;// the number of the pushbutton pin// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);Adafruit_MLX90614 mlx = Adafruit_MLX90614();void setup() {Serial.begin(9600);Serial.println("Adafruit MLX90614 test"); pinMode(Laser_Pin,OUTPUT);pinMode(buttonPin, INPUT);if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {// Address 0x3D for 128x64Serial.println(F("SSD1306 allocation failed"));for(;;);}display.clearDisplay();display.setRotation(2);display.setTextSize(1);display.setTextColor(WHITE);display.setCursor(0, 35);display.println("Initializing Temp");display.display();delay(250);display.clearDisplay();mlx.begin(); }void loop() {buttonState = digitalRead(buttonPin);Serial.println(buttonState);Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempC()); Serial.print("*C\tObject = "); Serial.print(mlx.readObjectTempC()); Serial.println("*C");Serial.print("Ambient = "); Serial.print(mlx.readAmbientTempF()); Serial.print("*F\tObject = "); Serial.print(mlx.readObjectTempF()); Serial.println("*F");// check if the pushbutton is pressed. If it is, the buttonState is HIGH:if (buttonState == HIGH) {// turn LED on:digitalWrite(Laser_Pin, HIGH);display.clearDisplay();display.setTextSize(2); //Size 2 means each pixel is 12 width and 16 highdisplay.setCursor(25, 10);display.print(mlx.readObjectTempC());display.setCursor(95, 10);display.print("C");display.setTextSize(2);display.setCursor(25, 36);display.print(mlx.readObjectTempF());display.setCursor(95, 36);display.print("F");display.display();} else {// turn LED off:digitalWrite(Laser_Pin, LOW);display.clearDisplay();display.setTextSize(2); //Size 2 means each pixel is 12 width and 16 highdisplay.setCursor(35, 10);display.print("-----");display.setCursor(105, 10);display.print("");display.setTextSize(2);display.setCursor(35, 36);display.print("-----");display.setCursor(105, 36);display.print("");display.display();}Serial.println();delay(500);}

1.UDP接收字符并解析

void UDP(){//**********解析Udp数据包int packetSize = Udp.parsePacket();if (packetSize){// 收到Udp数据包//Serial.printf("Received %d bytes from %s, port %d\n", packetSize, Udp.remoteIP().toString().c_str(), Udp.remotePort());// 读取Udp数据包int len = Udp.read(incomingPacket, 255);if (len > 0){incomingPacket[len] = 0;}//向串口调试器打印信息Serial.printf("UDP packet contents: %s\n", incomingPacket);String q_1=incomingPacket;if(incomingPacket[0]=='A'){Serial.println("1");shuiwei_max=q_1.substring(1).toInt(); //返回 from 之后的}if(incomingPacket[0]=='B'){Serial.println("2");}if(incomingPacket[0]=='C'){Serial.println("3");}if(incomingPacket[0]=='D'){Serial.println("4");}if(incomingPacket[0]=='E'){Serial.println("5");}if(incomingPacket[0]=='F'){Serial.println("6");}//灯关if(incomingPacket[0]=='G'){Serial.println("7");}//灯//往udp 远端发送应答信息}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。