Arduino

Arduino

Uno / Nano / 101 ……
开源、便宜、无尽创想
ESP物联网

ESP物联网

掌控板
ESP8266 / ESP32
App Inventor

App Inventor

手机平板应用开发
……
卡片电脑

卡片电脑

树莓派
虚谷号
3D打印

3D打印

三维立体绘图
打印机操作及技巧
激光切割

激光切割

2D矢量绘图
切割机操作及技巧
大开眼界

大开眼界

围观神级作品
学习软硬兼施
源创分享

源创分享

自撰美文
经验分享

两块arduino用蓝牙通信

Uno / Nano /……袁卓杰 发表了文章 • 0 个评论 • 167 次浏览 • 2019-04-14 11:16 • 来自相关话题

一直纠结于无线串口的使用,不如用两个HC06模块。不过这就很头疼了,模块默认都是从机模式,搜索全是HC05的资料,06的资料少之又少,刚开始使用05的资料套,大多指令都不一样。最重要的是我没有usb转串口的模块,还好我有R3板子,就为了把板子弄成USB转ttl ...查看全部
一直纠结于无线串口的使用,不如用两个HC06模块。不过这就很头疼了,模块默认都是从机模式,搜索全是HC05的资料,06的资料少之又少,刚开始使用05的资料套,大多指令都不一样。最重要的是我没有usb转串口的模块,还好我有R3板子,就为了把板子弄成USB转ttl,折腾一下午。
程序如下(没有USB转ttl才用)
#include
SoftwareSerial sc(7, 8);
void setup(){
 // put your setup code here, to run once:
Serial.begin(9600);
sc.begin(9600);
}
void loop() {
 while (Serial.available())
 {
  char shuju = Serial.read();
sc.print(shuju);
char c = sc.read();
Serial.print(c);
 }
}
因为没有转换模块,所以用板子代替,还好arduino有软窜口的库,看程序将蓝牙模块TX,RX,接好,这里因为模块出场设置的波特率是9600,停止位为1,这里我们就不用再去过多的设置,好。。。开始发射AT指令
打开串口,依次输入
AT
模块返回ok
//下一步更改波特率
发送:AT+BAUD1
      模块返回:OK1200
发送:AT+BAUD2
模块返回:OK2400
……
1---------1200
2---------2400
3---------4800
4---------9600
5---------19200
6---------38400
7---------57600
8---------115200
///////两个模块波特率必须一直,更改方法相同
更改模块主从
AT+ROLE=M//设置为主
//模块返回//OK+ROLE:M//
AT+ROLE=S//设置为从
//模块返回//OK+ROLE:S
//设置对方密码
AT+PINXXXX///四位,密码必须跟主机一样
主机模块设置完成
断电后将量模块通电,就有。。。。。gg...完,模块完了
重启后如果两个蓝牙通电后指示灯亮着不闪那就是配对成功了
 
设置完成后,将模块接在两块arduino板上,双机通信
主机程序:

#include
SoftwareSerial sc(7, 8);//7接rx,8接tx
void setup()
{
  // put your setup code here, to run once:
Serial.begin(9600);
  sc.begin(9600);

}

void loop() {
  while (Serial.available())
    {
    char shuju = Serial.read();

  sc.print(shuju);




    }
}
/////////////////////////////////////////////////////////////////丑陋的分割线////////////////////////////////////////////////////////////////
从机程序:

#include
SoftwareSerial sc(6, 7);
void setup()
{
  // put your setup code here, to run once:
Serial.begin(9600);
  sc.begin(9600);

}

void loop() {
  while (sc.available())
    {
    char shuju = sc.read();

  Serial.print(shuju);



    }
}
设置完了?那就打开串口监视器发信息吧(两个串口都打开)
PS:只能主机发给从机,除非你得蓝牙很NB
现在主机给从机发信息
先输入
捕获.PNG

发送,可以看到从机串口接到了主机信息

捕问问获.PNG

 

关于Arduino IDE上传时的波特率

陈峻宇 发表了文章 • 0 个评论 • 176 次浏览 • 2019-04-06 17:40 • 来自相关话题

前言 上一次市赛时,我电脑里安装了一个Arduino 1.8.7, 还有一个米思奇里的1.8.5。 在学校里准备时, 我先测试了1.8.7. 上传一个Blink, 然后 ...查看全部
前言
上一次市赛时,我电脑里安装了一个Arduino 1.8.7,
还有一个米思奇里的1.8.5。
在学校里准备时,
我先测试了1.8.7.
上传一个Blink,
然后


>上传项目失败


????
我当时根本不知道为啥。
直接换1.8.5参加比赛。
今天——终于知道了
 
首先我发现IDE有更新的版本,所以就下载了1.8.8 和1.8.9
捕获.PNG

都试了试,都不行。
在首选项里,我为了查明真相,
把这俩勾上了
捕获1.PNG

再次上传
 resp=0xb6,
再次上传
 resp=0x01
错误代码还不一样。。。。
不过我注意到1.8.9后1.8.5有一个上传参数不一样
1.8.5:
Overriding Baud Rate          : 57600
1.8.9:
Overriding Baud Rate          : 112500
然后安装了以前的1.8.3
Overriding Baud Rate          : 57600
上传成功
所以注意上传波特率是十分重要的

关于如何使用按钮控制oled的显示内容

noia 回复了问题 • 4 人关注 • 2 个回复 • 344 次浏览 • 2019-03-19 13:44 • 来自相关话题

如何将Arduino端口的数据传输到web客户端上,并在安卓手机上用APP Inventer接收——帅危

回复

路人周 发起了问题 • 2 人关注 • 0 个回复 • 124 次浏览 • 2019-03-13 13:42 • 来自相关话题

Tiny85又挖一个坑

Tiny85admin 发表了文章 • 1 个评论 • 112 次浏览 • 2018-12-24 22:37 • 来自相关话题

更小!更便宜!更灵活!  Tiny85环境配置
更小!更便宜!更灵活!
 Tiny85环境配置

LED灯按一下亮,再按一下灭的代码怎么打?

First朱 回复了问题 • 2 人关注 • 2 个回复 • 330 次浏览 • 2018-10-24 13:18 • 来自相关话题

do·······while循环的应用

XUNUO678 发表了文章 • 1 个评论 • 173 次浏览 • 2018-07-19 21:29 • 来自相关话题

do···while和while的不同不仅在于多了一个“do”,而且执行的顺序不同,do···while是先执行“do”里面的语句块也就是循环体。然后再判断其值是真是假(也就是说执行while这部分的表达式),如果其值为真,那么便继续执行下去,直到其值为假为止 ...查看全部
do···while和while的不同不仅在于多了一个“do”,而且执行的顺序不同,do···while是先执行“do”里面的语句块也就是循环体。然后再判断其值是真是假(也就是说执行while这部分的表达式),如果其值为真,那么便继续执行下去,直到其值为假为止,才跳出循环。因此,do···while循环至少执行一次。
do···while的结构是:
do{
语句块
}while(表达式);
例如:
int a=1,sun=0;
voip setup(){
Serial.begin(9600);
}
voip loop(){
do{
sun=sun+i;
i++;
}while(i<=100);
Serial.println(sun);
delay(5000);
}

while循环的应用

XUNUO678 发表了文章 • 2 个评论 • 200 次浏览 • 2018-07-16 16:46 • 来自相关话题

while循环的基本结构:while(表达式/循环条件){循环体/语句块}   while循环的意思是:首先先执行表达式也就是这个循环的循环条件,如果其值为真,那么就执行下面的语句块也就是它的循环体,一直执行到其值为假,才能跳出循环。否则,这个循环 ...查看全部
while循环的基本结构while(表达式/循环条件){循环体/语句块}
  while循环的意思是:首先先执行表达式也就是这个循环的循环条件,如果其值为,那么就执行下面的语句块也就是它的循环体,一直执行到其值为,才能跳出循环。否则,这个循环只能一直执行下去,不能中止。
  我们可以举个例子,计算a的值,并在串口监视器显示出来:
int a=1,sun=0;//赋初值。
void setup(){
Serial.begin(9600);//设置速度。
}
void loop(){
while(i<=120){//如果i<=120,那么sun就加上i,i再自加;如果i>120,那么就跳出循环。
sun=sun+i;
i++;
}
Serial.println(sun);
delay(500);
}

Arduino控制ISD1820录放模块

admin 发表了文章 • 1 个评论 • 400 次浏览 • 2018-07-10 23:40 • 来自相关话题

ISD1820录放模块可以直接喊话或者录放10秒语音,支持板载按键控制或者Arduino控制。 /* ISD1820 Arduino Voice Recorder to r ...查看全部
2015-05-07T13_18_24.683Z-IMG_2439b_.jpg

ISD1820录放模块可以直接喊话或者录放10秒语音,支持板载按键控制或者Arduino控制。
ISD820.jpg
/*
ISD1820 Arduino Voice Recorder
to record and playback sound using Arduino and ISD1820 Sound Recorder

Watch the video https://youtu.be/IfK8z_o5vbk
get this code from http://robojax.com/learn/arduino/

/*
ISD1820 Arduino Voice Recorder
Code Written by Ahmad Nejrabi for Robojax.com
on Jan 04, 2018 at 08:57, at Ajax, Ontario, Canada
Permission granted to share this code given that this
note is kept with the code.
Disclaimer: this code is "AS IS" and for educational purpose only.
*/
#define REC 2 // pin 2 is used for recording
#define PLAY_E 3 // pin 3 is used for playback-edge trigger
// when PLAY_E goes HIGH device will playbak STARTS and continues
// ISD1820 Arduino Voice Recorder for Robojax.com

#define PLAY_L 4 // pin 4 is used for playback
// when PLAY_L is HIGH it will playback. As soon as it goes LOW playback STOPS
// So you have to keep it HIGH to keep playing


#define FT 5 // pin 5 is used for feed through
// if the SPI (speaker) pin is used to send Audio to other device,
// set FT to high and any audio from microphone will pass through the SPI connector
// and will NOT record

#define playTime 5000 // playback time 5 seconds
#define recordTime 3000 // recording time 3 seconds
#define playLTime 900 // press and release playback time 0.9 seconds

void setup()
{
// ISD1820 Arduino Voice Recorder for Robojax.com
pinMode(REC, OUTPUT); // set the REC pin as output
pinMode(PLAY_L, OUTPUT); // set the PLAY_L pin as output
pinMode(PLAY_E, OUTPUT); // set the PLAY_e pin as output
pinMode(FT, OUTPUT); // set the FT pin as output
Serial.begin(9600);// set up Serial monitor
}

void loop() {
// ISD1820 Arduino Voice Recorder for Robojax.com
while (Serial.available() > 0) {
char inChar = (char)Serial.read();
if (inChar == 'p' || inChar == 'P') {
digitalWrite(PLAY_E, HIGH);
delay(50);
digitalWrite(PLAY_E, LOW);
Serial.println("Playbak Started");
delay(playTime);

Serial.println("Playbak Ended");
break;
}// if
else if (inChar == 'r' || inChar == 'R') {
digitalWrite(REC, HIGH);
Serial.println("Recording started");
delay(recordTime);
digitalWrite(REC, LOW);
Serial.println("Recording Stopped ");
}
else if (inChar == 'l' || inChar == 'L') {
digitalWrite(PLAY_L, HIGH);
Serial.println("Playbak L Started");
delay(playLTime);
digitalWrite(PLAY_L, LOW);
Serial.println("Playbak L Ended");
}
// ISD1820 Arduino Voice Recorder for Robojax.com
Serial.println("**** Serial Monitor Exited");
}// wihile
Serial.println("**** Enter r to record, p to play");

delay(500);
}

for循环

XUNUO678 发表了文章 • 1 个评论 • 168 次浏览 • 2018-07-09 15:26 • 来自相关话题

for循环的结构是:for(表达式1;表达式2;表达式3){ 语句块 } arduino先求出表达式1(表达式1其实是初始化语句),再求出表达式2,如果表达式2为真,那么就执行下面大括号的语句,否则,跳出循环。每一次执行完下 ...查看全部
for循环的结构是:for(表达式1;表达式2;表达式3){
语句块
}
arduino先求出表达式1(表达式1其实是初始化语句),再求出表达式2,如果表达式2为真,那么就执行下面大括号的语句,否则,跳出循环。每一次执行完下面的语句块,arduino就会去执行表达式3。一直直到循环结束(就是表达式2为假的时候)。
比如:
int a,sun=0;                     //赋初值
void setup{
for(a=1;a<=200;a++){ //表达式1:求出a=1;2判断a是否<=200,如果其值为真,那就执行下面的语句                      (sun=sun+a)否则,跳出循环。然后再跳到3(也就是a自加:a++),一直到表达式2为假(跳出循环)。
sun=sun+a;
}
}
void loop{
}
嘻嘻,我只是一个初学者,还请多多请教!