锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

arduino nano学习过程中的相关程序

时间:2023-09-05 08:37:00 加速度传感器3023a2h

Arduino Nano相关程序

1.超声波测距

车辆加测距(测距引用的库,缺点测距为整数)

#include  // 加载SPI库 #include  // 加载Wire库 #include  // 加载Adafruit_GFX库3 #include  // 加载Adafruit_SSD1306库 #include "String.h" // 定义 OLED屏幕分辨率 #include //超声波测距 Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire); DFRobot_URM10 urm10; int ceju_0=0; int ceju_1=0; void setup() { 
            pinMode(2,OUTPUT);   pinMode(4,OUTPUT);   pinMode(6,OUTPUT);   pinMode(7,OUTPUT);   ///初始化IO,模式为INPUT 输入模式   ///默认电机停止转动,全部设置为低电平   digitalWrite(2,0);   digitalWrite(4,LOW);   digitalWrite(6,LOW);   digitalWrite(7,LOW);
  // put your setup code here, to run once:
  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.display(); // 使更改的显示生效
}

void loop() { 
        
  // put your main code here, to run repeatedly:
  ceju_0=(urm10.getDistanceCM(10, 11)); //超声波测距
  display.clearDisplay(); // 清空屏幕
  xianshi();              //调用显示程序
  ceju();
  display.display(); // 使更改的显示生效

  
}
void xianshi(){ 
        
  display.setCursor(0,0); // 设置开始显示文字的坐标
  display.println("ceju");
  display.setCursor(50,0); // 设置开始显示文字的坐标
      if(ceju_1==1){ 
        display.println("wuxiao");}
      if(ceju_1==0){ 
        display.println(ceju_0);}
  }
void ceju(){ 
        
    if(ceju_0<=1100){ 
        ceju_1=0;      //当超声波测距小于等于1100时,则ceju_2=0,并执行以下程序
    if(ceju_0<=10) { 
        houtui();Serial.println("后退");}
    if(ceju_0>=15) { 
        qianjin();Serial.println("前进");}
    analogWrite(3,map(ceju_0-10,15,1100,100,255));//左轮速运行,map函数映射
    analogWrite(5,map(ceju_0-10,15,1100,100,255));//右轮速运行
    if(10<ceju_0 and ceju_0<15) { 
        zhidong();Serial.println("制动");}
    }
    if(ceju_0>1100){ 
        ceju_1=1;}
  }
void qianjin(){ 
        
     digitalWrite(2,0); //给低电平
     digitalWrite(4,1); //给高电平
     digitalWrite(6,1); 
     digitalWrite(7,0);
     Serial.println("前进"); // 串口输出
     }
void houtui(){ 
        
     digitalWrite(2,1); //给高电平
     digitalWrite(4,0); //给低电平
     digitalWrite(6,0); 
     digitalWrite(7,1);
     Serial.println("后退"); 
    } 
void zhidong(){ 
        
     digitalWrite(2,1); //给高电平
     digitalWrite(4,1); 
     digitalWrite(6,1); 
     digitalWrite(7,1);
     Serial.println("制动");
   } 

2.蓝牙控制

使用蓝牙控制小车

#include  // 加载SPI库
#include  // 加载Wire库
#include  // 加载Adafruit_GFX库3
#include  // 加载Adafruit_SSD1306库
#include "String.h"
// 定义 OLED屏幕的分辨率
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
String comdata = "";//接收到的字符串
int a=100;          //使能1初始脉冲
int a_1=145;        //使能2初始脉冲
int c=0;
int x=0;
void setup() { 
        
  Serial.begin(9600); // 设置串口波特率
  Serial.println("OLED FeatherWing test"); // 串口输出
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 设置OLED的I2C地址
  display.setTextSize(1); // 设置字体大小
  display.setTextColor(SSD1306_WHITE); // 设置字体颜色
  //初始化各IO,模式为OUTPUT 输出模式
  pinMode(2,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  //初始化各IO,模式为INPUT 输入模式


  //默认电机停止转动,全部设为低电平
  digitalWrite(2,0);
  digitalWrite(4,LOW);
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
  }
void loop() { 
        
  // put your main code here, to run repeatedly:
  display.clearDisplay(); // 清空屏幕
  chuankou();
  xianshi();
  analogWrite(3,a);//左轮速运行
  analogWrite(5,a_1);//右轮速运行
  display.display(); // 使更改的显示生效
}
void xianshi(){ 
        
  display.setCursor(20,0); // 设置开始显示文字的坐标
  display.println("xiaoche");
  display.setCursor(0,10); // 设置开始显示文字的坐标
  display.println("moshi:");
  display.setCursor(50,10); 
      if(x==0)    { 
        display.println("zhidong");}     //当x不同值时,OLED打印不同状态
      if(x==1)    { 
        display.println("qianjin");}
      if(x==2)    { 
        display.println("houtui");}
      if(x==3)    { 
        display.println("zuozhuan");}
      if(x==4)    { 
        display.println("youzhuan");}
  display.setCursor(0,20); 
  display.println("zuo:");
  display.setCursor(30,20); 
  display.println(String(a));
  display.setCursor(64,20);
  display.println("you:");
  display.setCursor(94,20);
  display.println(String(a_1));
  display.setCursor(0,30);
  display.println("kaiguan:");
  display.setCursor(50,30); 
      if(c==1)     { 
        display.println("ON");}
      if(c==0)     { 
        display.println("OFF");}
  }
void chuankou(){ 
        
      while (Serial.available() > 0)     // 串口收到字符数大于零
    { 
        
        comdata += char(Serial.read()); //每次读一个char字符,并相加
        delay(2);
    }
    if (comdata.length() > 0)           //当字符串长度大于零时
    { 
        
        Serial.println(comdata);        //打印接收到的字符串
        if(comdata=="ON"){ 
        c=1;}
        if(comdata=="OFF"){ 
        c=0;}
        if(c==1){ 
            
        if(comdata=="a"){ 
        a=a+5;if(a>255){ 
        a=255;}} //接收到a时,则a+5,当a>255时a=255
        if(comdata=="b"){ 
        a=a-5;if(a<0){ 
        a=0;}}
        if(comdata=="c"){ 
        a_1=a_1+5;if(a_1>255){ 
        a_1=255;}}
        if(comdata=="d"){ 
        a_1=a_1-5;if(a_1<0){ 
        a_1=0;}}
        if(comdata=="e"){ 
        zhidong();}    //接收到e时,则执行zhidong();
        if(comdata=="f"){ 
        qianjin();}
        if(comdata=="g"){ 
        houtui();}
        if(comdata=="h"){ 
        zuozhuan();}
        if(comdata=="r"){ 
        youzhuan();}
        }
        comdata = "";   //清空字符串
          }   
    }
void qianjin(){ 
        
     digitalWrite(2,0); //给低电平
     digitalWrite(4,1); //给高电平
     digitalWrite(6,1); 
     digitalWrite(7,0);
     Serial.println("前进"); // 串口输出
     x=1;}
void houtui(){ 
        
     digitalWrite(2,1); //给高电平
     digitalWrite(4,0); //给低电平
     digitalWrite(6,0); 
     digitalWrite(7,1);
     Serial.println("后退"); 
     x=2;} 
void zuozhuan(){ 
        
     digitalWrite(2,0); 
     digitalWrite(4,1); //给低电平
     digitalWrite(6,0); //给高电平
     digitalWrite(7,0);
     Serial.println("左转"); 
     x=3;}     
void youzhuan(){ 
        
     digitalWrite(2,0); //给高电平
     digitalWrite(4,0); //给低电平
     digitalWrite(6,1); 
     digitalWrite(7,0);
     Serial.println("右转"); 
     x=4;}         
void zhidong(){ 
        
     digitalWrite(2,1); //给高电平
     digitalWrite(4,1); 
     digitalWrite(6,1); 
     digitalWrite(7,1);
     Serial.println("制动");
     x=0;} 

3.寻迹

小车使用六路传感器寻迹

int y_1,y_2,y_3,y_4,y_5,y_6;
int i;
int x;
int a=100;          //使能1初始脉冲
int a_1=125;        //使能2初始脉冲
void setup() { 
        
  // put your setup code here, to run once:
  Serial.begin(9600); // 设置串口波特率
  pinMode(2,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  //初始化各IO,模式为INPUT 输入模式
  
  //默认电机停止转动,全部设为低电平
  digitalWrite(2,0);
  digitalWrite(4,LOW);
  digitalWrite(6,LOW);
  digitalWrite(7,LOW);
}

void loop() { 
        
  // put your main code here, to run repeatedly:
  xunji();
  analogWrite(3,a);//左轮速运行
  analogWrite(5,a_1);//右轮速运行
}
void xunji(){ 
        
    y_1=digitalRead(12);//传感器接收到红外信号输出高电平,传感器没有接收到红外信号输出低电平
    y_2=digitalRead(13);
    if(analogRead(A0)>900)
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章