嵌入式项目

一、智能避障小车相关。

项目步骤:

说明:
用到的一些东西:
串口助手,tcp连接,java相关,夜神模拟器。
1、设置小车网络:
1、STA模式
2、客户端代码实现
2、实现小车前后左右。
3、实现小车避障。

<1>、关于串口相关的API

1、Serial.begin(115200(波特率)); //初始化串口
2、Serial.printin(打印什么); //打印并换行
3、Serial.avavliable();//判断数据是否有:>0(表示有数据)

*/

/*

<2>、关于网络STA模式

#include //要加上头文件

char* ssid = “20”; //“wifi热点名称”
char* passwd = “dzx521hsn”; //wifi密码

void initWifiSta()
{
WiFi.mode(WIFI_STA); //设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) { //判断是否连接上
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP());
}

//上面是一些关于设置网络连接的函数 注意要在setup里面做调用,调用一次就好。

/*

<3>、c/s模式

//但是你想用c/s模式,你就要使用下面的代码

int port = 8888; //设置端口号
WiFiServer server(port); //设置服务端端口号

void setup() { //只执行过一次
Serial.begin(115200); //启动串口
initWifiSta(); //连接上网络
Serial.begin(); //启动服务器。
}

void loop() { //不断执行
char cmd; //字符

WiFiClient client = server.available(); //初始化服务器
while (client.connected()) {            //等待客户端连接
    while (client.available() > 0) {    //判断数据传输
        cmd = client.read();   
      }
 }

}

*/

/*

<4>、超声波测距代码及其原理

超声波测距原理:vcc:正极,trig:触发,echo:回应,gnd:地线。
trig发射一个波,遇到障碍物:echo,用于接收。
给他一个十微妙高电平

#define Echo D2 //引脚相关初始化。
#define Trig D8

long getTime()
{
digitalWrite(Trig, HIGH); //给触发一个高电平,开始发波
delayMicroseconds(10); //维持十秒
digitalWrite(Trig, LOW); //给触发一个低电平,停止发波
return pulseIn(Echo, HIGH); //pulsein 是某个电平的维持时间。
}

void chaoshengbo()
{
pinMode(Echo, INPUT); //输入引脚
pinMode(Trig, OUTPUT); //为输出引脚

}

void setup() { //单单将他们设置成这样,不足,因为并不能发波,所以可以用上述函数。
chaoshenbo();

}

void loop() {
long dis;
dis = getTime() / 58; //gettime的返回值是某个的维持时间。

Serial.print(dis); //打印距离

Serial.println(“cm”);
delay(500);

}
*/

/*

<5>、小车转向

#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D4
#define Zhuan2 D5

void intsit()
{
pinMode(Dong1, OUTPUT); //设置为输出引脚
pinMode(Dong2, OUTPUT);
pinMode(Zhuan1, OUTPUT);
pinMode(Zhuan2, OUTPUT);

}
void you()
{
digitalWrite(Zhuan1, HIGH);
digitalWrite(Zhuan2, LOW);

}
void zuo()
{
digitalWrite(Zhuan1, LOW);
digitalWrite(Zhuan2, HIGH);

}
void qian()
{
digitalWrite(Dong1, HIGH); //让dong1,是高电平
digitalWrite(Dong2, LOW); //让dong1,是低电平

}
void hou()
{

digitalWrite(Dong1, LOW);
digitalWrite(Dong2, HIGH);
}

void setup() {

intsit();

Serial.begin(115200);
initWifiSta();
server.begin();
}

void loop() {
char cmd;
WiFiClient client = server.available(); //服务初始化

while (client.connected()) { //等待客户端连接
while (client.available() > 0) {
cmd = client.read();
switch (cmd) {
case ‘h’: qian();
break;
case ‘q’: hou();
break;
case ‘z’: zuo();
break;
case ‘y’: you();
break;
case ‘s’: ting();
break;
case ‘d’: zheng();
break;
}
}
}
}

这并不能让小车停止:但是如何让小车方向回正,小车停止呢?

‘s’

void ting() //停止,在前后之后
{

digitalWrite(Dong1, LOW);
digitalWrite(Dong2, LOW);   //直接给他低电平就可以。

}

‘z’
void zheng() //回正,在左右之后
{

digitalWrite(Zhuan1, LOW);
digitalWrite(Zhuan2, LOW);   //直接给他低电平就可以。

}
*/

<6>、项目整合:

#include

#define Echo D2 //引脚相关初始化。
#define Trig D8
#define Dong1 D6
#define Dong2 D7
#define Zhuan1 D4
#define Zhuan2 D5

char* ssid = “20”; //“wifi热点名称”
char* passwd = “dzx521hsn”; //wifi密码

void initWifiSta()
{
WiFi.mode(WIFI_STA); //设置STA模式
WiFi.begin(ssid, passwd); //连接网络
while (WiFi.status() != WL_CONNECTED) { //判断是否连接上
Serial.print(".");
delay(500);
}
Serial.println(WiFi.localIP());
}

long getTime()
{
digitalWrite(Trig, HIGH); //触发,给你一个高电平
delayMicroseconds(10); //维持十秒
digitalWrite(Trig, LOW); /触发,给你一个低电平
return pulseIn(Echo, HIGH); //计算回应的时间
}

void intsit()
{
pinMode(Dong1, OUTPUT); //设置为输出引脚
pinMode(Dong2, OUTPUT);
pinMode(Zhuan1, OUTPUT);
pinMode(Zhuan2, OUTPUT);

}
void you()
{
digitalWrite(Zhuan1, HIGH);
digitalWrite(Zhuan2, LOW);

}
void zuo()
{
digitalWrite(Zhuan1, LOW);
digitalWrite(Zhuan2, HIGH);

}
void qian()
{
digitalWrite(Dong1, HIGH); //让dong1,是高电平
digitalWrite(Dong2, LOW); //让dong1,是低电平

}
void hou()
{

digitalWrite(Dong1, LOW);
digitalWrite(Dong2, HIGH);
}

void setup()
{
intsit(); //初始化引脚:

chaoshengbo(); //超声波初始化

//串口初始化

initWifiSta//wifi初始化

server.begin();//初始化客户端

}

void loop()
{
char cmd;
int mark=0;
long dis;
dis = getTime() / 58;

WiFiClient client = server.available(); //初始化服务器
while (client.connected()) {            //等待客户端连接
    while (client.available() > 0) {    //判断数据传输
        cmd = client.read();  
      //Serial.printin(cmd);
        if(dis<10){
            hou();
            delay(200);
            ting();
            mark=1;
        } else{
        mark=0;
        }
        if(mark==0){
              switch (cmd) {
                  case 'h': qian();
                        break;
                  case 'q': hou();
                        break;
                  case 'z': zuo();
                        break;
                  case 'y': you();
                        break;
                  case 's': ting();
                        break;
                  case 'd': zheng();
                        break;
          }

       }
      
    }

}

}

二、智能垃圾桶:

项目分步:

1、设置垃圾桶的舵机功能的实现:1、连接
2、转向
2、设置超声波的测距功能:检测到障碍物时,则舵机转向
障碍物离开时,舵机返回。

项目整合:

/*
#include

#define Duo D5 //定义舵机做一些事情。
#define Echo D2 //超声波相关
#define Trig D8

Servo myDuo;

long getTime()
{
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
return pulseIn(Echo, HIGH);
}

void setup() {
pinMode(Echo, INPUT); //输入引脚
pinMode(Trig, OUTPUT); //为输出引脚
myDuo.attach(Duo); //连接舵机
Serial.begin(115200);

}

void loop() {
long dis;
dis = getTime() / 58;
if (dis < 10) {

myDuo.write(60);   //转向功能
delay(500);

}
else {
myDuo.write(180);
delay(500);

}
Serial.print(dis);
Serial.println(“cm”);
delay(500);

}

说明:

嵌入式项目_第1张图片

个人学习后间接,浅谈,错误请指正,记录生活,记录学习,望明天更好。

嵌入式项目_第2张图片

你可能感兴趣的:(嵌入式项目)