arduino 的代码 类似 JAVA C++ 所以非常简单!
但是有两组很重要的函数 我要说下!
digitalWrite (数字输出)digitalRead (数字输入)
analogWrite(模拟输出)analogRead(模拟输入)
两者的差别就是 后者是可调节的!(很简单的描述)主要是用于 PWM(脉冲宽度调制) 。而第一个 就是 输出或读取状态! HIGH 或者 LOW (高低电位)!
这样小车这一端 就完成了! 是不是很简单呢? 接下来就是 对控制端的开发了! 我是采用的安卓环境! 但是,安卓的蓝牙开发 代码量比较大!而且 各种类跨的文件比较多。我就给张图算了!
当然 如果就这样完事了 文章就太水了! 主要是后面这个遥控端没有给出代码!
=================================
我这里各一个更方便的代码!C#版本的蓝牙通信!其实就是串口通信!但是需要确定你的电脑上有蓝牙(bluetooth)这的东西!当然笔者是在公司加班完成这文章的,所以呢 这破电脑还真没 蓝牙!
废话不说! C#里面对应串口通信 有这样一个类 SerialPort ! 但是VS IDE的环境里面为我们提供了一个SerialPort控件! 遗憾的是我不喜欢用这控件 太麻烦~!
托4个button 进窗体! 分别将TEXT属性改为 前后左右!
代码如下:
=============以上的代码是随手在发表文章编辑框写的。。所以不规范~~望见谅!
但是有两组很重要的函数 我要说下!
digitalWrite (数字输出)digitalRead (数字输入)
analogWrite(模拟输出)analogRead(模拟输入)
两者的差别就是 后者是可调节的!(很简单的描述)主要是用于 PWM(脉冲宽度调制) 。而第一个 就是 输出或读取状态! HIGH 或者 LOW (高低电位)!
01 | void setup() //初始化 |
02 | { |
03 | Serial.begin(9600); //Serial 通信 用于捕捉 蓝牙发送过来的值! |
04 | } |
05 | void loop() //逻辑上 每秒钟执行1千6百万次 |
06 | { |
07 | while (Serial.available() > 0) { //判断是否有值传递进来! |
08 | int inChar = Serial.read(); |
09 | inChar=inChar-0x30; |
10 | if (inChar == 1) // 当值为1的时候 向前 |
11 | { |
12 | runfoward(250); |
13 | delay(300); |
14 | stop(); |
15 | } |
16 | else if (inChar == 2) //2 向后 |
17 | { |
18 | runback(250); |
19 | delay(300); |
20 | stop(); |
21 | } |
22 | else if (inChar == 3) //3 向右 |
23 | { |
24 | turnR(250); |
25 | delay(300); |
26 | stop(); |
27 | } |
28 | else if (inChar == 4) //4 向左 |
29 | { |
30 | turnL(250); |
31 | delay(300); |
32 | stop(); |
33 | } |
34 | else |
35 | { |
36 | stop(); |
37 | } |
38 | inChar=0; |
39 | } |
40 | } |
41 | //==========一下代码 驱动电机 。如果大家不了解的话,就不用看了! 这里使用了 脉冲宽度调制技术, 控制小车的速度!====== |
42 | void motor( char pin, char pwmpin, char state, int val) |
43 | { |
44 | pinMode(pin, OUTPUT); |
45 |
46 | if (state==1) |
47 | { |
48 | analogWrite(pwmpin,val); |
49 | digitalWrite(pin,1); |
50 | } |
51 | else if (state==2) |
52 | { |
53 | analogWrite(pwmpin,val); |
54 | digitalWrite(pin,0); |
55 | } |
56 | else if (state==0) |
57 | { |
58 | analogWrite(pwmpin,0); |
59 | digitalWrite(pin,0); |
60 | } |
61 | } |
62 | //===========一下代码对于最上面的 LOOP方法里面的值! |
63 | void runfoward( int i) |
64 | { |
65 | motor(4,5,1,i); |
66 | motor(7,6,1,i); |
67 | } |
68 | void runback( int j) |
69 | { |
70 | motor(4,5,2,j); |
71 | motor(7,6,2,j); |
72 | } |
73 | void turnL( int m) |
74 | { |
75 | motor(4,5,1,m); |
76 | motor(7,6,2,m); |
77 | } |
78 | void turnR( int n) |
79 | { |
80 | motor(4,5,2,n); |
81 | motor(7,6,1,n); |
82 | } |
83 | void stop() |
84 | { |
85 | motor(4,5,0,0); |
86 | motor(7,6,1,0); |
87 | } |
当然 如果就这样完事了 文章就太水了! 主要是后面这个遥控端没有给出代码!
=================================
我这里各一个更方便的代码!C#版本的蓝牙通信!其实就是串口通信!但是需要确定你的电脑上有蓝牙(bluetooth)这的东西!当然笔者是在公司加班完成这文章的,所以呢 这破电脑还真没 蓝牙!
废话不说! C#里面对应串口通信 有这样一个类 SerialPort ! 但是VS IDE的环境里面为我们提供了一个SerialPort控件! 遗憾的是我不喜欢用这控件 太麻烦~!
托4个button 进窗体! 分别将TEXT属性改为 前后左右!
代码如下:
01 | namespace 蓝牙小车控制器 |
02 | { |
03 | public partial class Form1 : Form |
04 |
05 | { |
06 | private SerialPort SP; |
07 | |
08 | public Form1() |
09 | { |
10 | InitializeComponent(); |
11 | |
12 | |
13 | } |
14 |
15 | private void runfoward_Click( object sender, EventArgs e) //向前button事件 |
16 | { |
17 | // this.serialPort1.Open(); |
18 | |
19 | ONOFF( "1" ); |
20 | |
21 | |
22 | } |
23 |
24 | private void runback_Click( object sender, EventArgs e) //向后button事件 |
25 | { |
26 | ONOFF( "2" ); |
27 | |
28 | } |
29 | private void ONOFF( string str) // 串口通信 最核心的方法。 |
30 | { |
31 | |
32 | SP = new SerialPort( "COM7" , 9600); // 这里的COM7 是你安装蓝牙 的输出串口号! 有些事COM3 有些事COM4、、这里的9600 是波特率!和单片机上的是对应的! |
33 | SP.Open(); //打开 |
34 | |
35 | SP.Write(str); //发送 |
36 | SP.Close(); // 关闭 |
37 | } |
38 |
39 | private void turnL_Click( object sender, EventArgs e) //向左button事件 |
40 | { |
41 | ONOFF( "4" ); |
42 | |
43 | } |
44 |
45 | private void turnR_Click( object sender, EventArgs e) 向右button事件 |
46 | { |
47 | ONOFF( "3" ); |
48 | |
49 | } |
50 | |
51 | } |
52 | } |