首页 百科知识 多模块智能程序的编写

多模块智能程序的编写

时间:2022-10-04 百科知识 版权反馈
【摘要】:在前面的内容中,本书介绍了各个模块,在这里要把这几个模块结合起来做一个整体测试,此时可以通过无线蓝牙键盘模块输入数字区键1~9来进行功能测试,标配的控制器中无线键盘鼠标是一体的,由具有USB接口的接收器接收。在嵌入式控制板中测试传感器的界面如图7.4.5所示。

在前面的内容中,本书介绍了各个模块,在这里要把这几个模块结合起来做一个整体测试,此时可以通过无线蓝牙键盘模块输入数字区键1~9来进行功能测试,标配的控制器中无线键盘鼠标是一体的(见图7.4.4),由具有USB接口的接收器接收。

嵌入式控制板中测试传感器的界面如图7.4.5所示。

图7.4.3机器人整体电路设计

图7.4.4 无线键盘鼠标

图7.4.5 在嵌入式控制板中测试传感器的界面

底层控制板的程序如下:

#include 〈Wire.h〉

#include 〈Software Serial.h〉

Software Serial my Serial(2, 3); // RX, TX

const int ping Tig = 15;//PC1

cons tint ping Eco = 14;//PC0

cons int flag = 0;

#define SLAVE_ADDRESS 0x04

int number = 0;

int state = 0;

Char addr[4];

long duration, inches, cm;

int INA = 4; //电机 A 正反转控制端

int PWMA = 5; //电机 A 调速端

int INB = 7; //电机 B 正反转控制端

int PWMB = 6; //电机 B 调速端

void motospd(int sp1,int sp2) //电机速度控制函数,括号内分别为左右电机速度值,{ //范围-255~+255,正值为正转,负值为反转。

if(sp1〉0)

digital Write(INA, HIGH);

else

digital Write(INA, LOW);

if(sp2〉0)

digital Write(INB, HIGH);

else

digital Write(INB, LOW);

analog Write(PWMA,abs (sp1));

analog Write(PWMB,abs (sp2));

}

}

void setup() {

pin Mode(INA,OUTPUT);

pin Mode(INB,OUTPUT);//配置电机驱动 IO 口为输出

pin Mode(ping Tig, OUTPUT);

pin Mode(ping PEco, INPUT);

Serial.begin(9600); //start serial for output

my Serial.begin(9600);

// initialize i2c as slave

Wire.begin(SLAVE_ADDRESS);

// define callbacks for i2c communication

Wire.on Receive(receive Data);

Wire.on Request(send Data);

Serial.println("Ready!");

}

void loop(){

delay(100);

}

long microseconds To Inches(long microseconds)

{

return microseconds / 74 / 2;

}

long microseconds To Centimeters(long microseconds)

{

return microseconds / 29 / 2;

}

// callback for received data

void receive Data(int byte Count){

while(Wire.available()) {

number = Wire.read();

Serial.print("data received: ");

Serial.println(number);

if (number == 1){

long duration, inches, cm;

digital Write(ping Tig, LOW);

delay Microseconds(2);

digital Write(ping Tig, HIGH);

delay Microseconds(5);

digital Write(ping Tig, LOW);

duration = pulse In(ping Eco, HIGH);

inches = microseconds To Inches(duration);

cm = microseconds To Centimeters(duration);

Wire.write(cm);

}

else if(number==2)

{

Wire.write(sensor Pin);

}

esle if(number ==3)

{

motospd(100,100); //直行

Wire.write(0x01);

}

}

}

// callback for sending data

void send Data(){

Wire.write(flag);//为零时,上位机不处理,为1时上位机处理

}

嵌入式控制板的程序如下:

import smbus

import time

# for RPI version 1, use "bus = smbus.SMBus(0)"

bus = smbus.SMBus(1)

# This is the address we setup in the Arduino Program

address = 0x04

def write Number(value):

bus.write_byte(address, value)

# bus.write_byte_data(address, 0, value)

return -1

def read Number():

number = bus.read_byte(address)

# number = bus.read_byte_data(address, 1)

return number

while True:

var = input("Enter 1 - 9: ")

if not var:

continue

write Number(var)

print "RPI: Hi Arduino, I sent you ", var

# sleep one second

time.sleep(1)

number = read Number()

print "Arduino: Hey RPI, I received a digit ", number

print

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈