无线wifi小车(1)--arduino+w5100+L298+w5100+无线路由器
本帖最后由 yongyuan824 于 2013-12-15 22:24 编辑本人是初学者,代码写的若有问题请多多指教,经过2个月的努力,本人第一个作品。pc控制端用的jqueryui+html写的在附件里。(后续会继续完善,实现远程时时视频传送,避障等功能)。控制端pc,手机移动设备等。。废话不说直接上代码---------------------------中间遇到点小问题,没查出原因,希望知道的多多赐教。问题如下:pwm调速口开始用的是10和11,10口get给w5100发送数据时网页一直处于发送状态且arduino主机无响应但w5100的指示灯闪烁也能ping通。11口的问题是设置0-255值对电机转速控制无效。代码如下,只是pwm口更换之后就正常了。开始以为代码问题反复修改代码花了几天时间才发现这两个口有这种状况,希望高人给出解释现在还一头雾水...
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
byte ip[] = { 192, 168, 1, 177 }; // ip in lan
byte gateway[] = { 192, 168, 1, 1 }; // internet access via router
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask
EthernetServer server(80); //server port
String readString;
/////////////////////////////////////////////////
int pinI1=2;//定义I1接口
int pinI2=3;//定义I2接口
int speedApin=6;//定义EA(PWM调速)接口
int pinI3=4;//定义I3接口
int pinI4=5;//定义I4接口
int speedBpin=9;//定义EB(PWM调速)接口
void setup()
{
//start Ethernet
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
//enable serial data print
Serial.begin(9600);
Serial.println("servertest1"); // so I can keep track of what is loaded
pinMode(pinI1,OUTPUT);
pinMode(pinI2,OUTPUT);
pinMode(speedApin,OUTPUT);
pinMode(pinI3,OUTPUT);
pinMode(pinI4,OUTPUT);
pinMode(speedBpin,OUTPUT);
}
void motorA(int sp,boolean tf){
analogWrite(speedApin,sp);//输入模拟值进行设定速度
if(tf){
digitalWrite(pinI1,LOW);//使直流电机(左)顺时针转
digitalWrite(pinI2,HIGH);
}
else
{
//analogWrite(speedApin,sp);//输入模拟值进行设定速度
digitalWrite(pinI1,HIGH);//使直流电机(左)逆时针转
digitalWrite(pinI2,LOW);
}
if(sp<10){
digitalWrite(pinI1,HIGH);//使直流电机(左)刹车
digitalWrite(pinI2,HIGH);
}
}
void motorB(int sp,boolean tf){
analogWrite(speedBpin,sp);//输入模拟值进行设定速度
if(tf){
digitalWrite(pinI4,LOW);//使直流电机(右)逆时针转
digitalWrite(pinI3,HIGH);
}
else
{
//analogWrite(speedBpin,sp);//输入模拟值进行设定速度
digitalWrite(pinI4,HIGH);//使直流电机(右)顺时针转
digitalWrite(pinI3,LOW);
}
if(sp<=10){
digitalWrite(pinI4,HIGH);//使直流电机(右)刹车
digitalWrite(pinI3,HIGH);
}
}
void loop()
{
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
readString += c;
Serial.print(c);
}
//if HTTP request has ended
if (c == '\n') {
///////////////
Serial.println(readString);
client.println("OK");
delay(1);
//stopping client
client.stop();
/////////////////////
//readString= readString.substring(5,readString.length()-11);
readString.replace("GET /","");
readString.replace("HTTP/1.1","");
readString.trim();//qu diao liang duan kong ge
Serial.println(readString);
boolean isforward=true;//shi fou qian jin
if(readString.indexOf('-')>-1){
isforward=false;
//int sp=speedb.toInt();
}
if(readString.indexOf("motora") >-1)//checks for on
{
int sp = abs(readString.substring(7).toInt());//abs qu jue dui zhiwu lun zheng fu
Serial.println(sp);
motorA(sp,isforward);
}
if(readString.indexOf("motorb") >-1)//checks for on
{
int sp = abs(readString.substring(7).toInt());
Serial.println(sp);
motorB(sp,isforward);
}
//clearing string for next read
readString="";
}
}
}
}
} 对了,高人有没有更好的办法来处理get传过来的数据啊?如有个现成的方法直接接收到如 ?id=100 这种web开放常用的传参数的方法。以上我用的replace 做的替换和substring做的截取。 yongyuan824 发表于 2013-10-24 23:54 static/image/common/back.gif
对了,高人有没有更好的办法来处理get传过来的数据啊?如有个现成的方法直接接收到如 ?id=100 这种web开放常 ...
http消息可以通过参数传递?id=100&name=jack数据,通过解析http uri的param就可以得到 yongyuan824 发表于 2013-10-24 23:54 static/image/common/back.gif
对了,高人有没有更好的办法来处理get传过来的数据啊?如有个现成的方法直接接收到如 ?id=100 这种web开放常 ...
?后面param解析的思路是
1、先定位到?,截取后面所有字串做为params,可以使用string的find
2、将params按 &分割成多个字串,每个都是一个param,c++没有现成的函数,需要自己稍微处理下,写个循环。类似:
std::string::size_type found = str.find_first_of("&");
while (found!=std::string::npos)
{
//伪代码
param=str.substring(0,found);
found=str.find_first_of("&",found+1);
}
3、对2分割出来的每个param,定位到=字符(可以使用string的find),前面是key,后面是value(使用string substring) bubuxiu 发表于 2013-10-25 12:07 static/image/common/back.gif
?后面param解析的思路是
1、先定位到?,截取后面所有字串做为params,可以使用string的find
2、将param ...
哦,大概明白思路了,我懂js脚本代码感觉代码的思路都是相通的吧,查查find的用法,晚上回去试试... yongyuan824 发表于 2013-10-25 13:29 static/image/common/back.gif
哦,大概明白思路了,我懂js脚本代码感觉代码的思路都是相通的吧,查查find的用法,晚上回去试试...
加油,有进展分享学习,哈哈 bubuxiu 发表于 2013-10-26 14:19 static/image/common/back.gif
加油,有进展分享学习,哈哈
嗯嗯,会的,最近晚上一有时间就研究代码,业余爱好,平时工作其实就是敲代码但语言不同,得学。。thanks 楼主。你做的这个 arduino版是通过什么与路由器通信的 你是怎么样连接的可以说说吗?楼主
页:
[1]