//求帮忙看一下哪里出错了,部分无关函数以省去,关键函数中的绝对正确函数会有标记“1”
//问题:1,小车有时在left0_pos(左0转弯位置)时会读取2次卡号,proc路线定位起不到效果
//问题:2,小车经过up_pos(货架位置)无法进入loop函数(请帮忙看看setup函数)
//不同位置对应的RFID卡号
#define RFID_NUMS 4
const char RFID_TABLE[RFID_NUMS][7]=
{"34FE63","34FE5E","34FEA4","A57895"};
//位置
#define up_pos 0 //货架位置
#define left0_pos 1 //左0转弯位置
#define turn_pos 3 //转向位置
#define down3_pos 2 //终点3位置
//小车路线定位
int proc=0;//用来判定(货架)和(左0转弯位置)
//转向判定
int turnP=0;//用来判定(转向位置方向),(货架位置方向)
//货架已经升起标志
bool upFlag=false;
void start(){
//采集传感器数据
sense();//1
//处于右转位置
if(pos==left0_pos) {
if(proc==0){
Stop();//1
turnCross('l');//1
followLineTime();//1
proc=1;
Blink();//1
}
}
//处于货架位置并且还未升起货架
else if(pos==up_pos && upFlag==false ) {
if(proc==1){
Stop();//1
rise();//1
upFlag=true;
proc=2;
Blink();//1
}
}
//循迹
followLine();//1
//延迟
delay(DELAY_IN_LOOP);//1
}
void trans(){
//采集传感器数据
sense();//1
//处于转向1位置
if(pos==turn_pos && turnP==0) {
Stop();//1
turnCross('r');//1
followLineTime();//1
Blink();//1
}
//处于货架位置并且以升起货架
else if(pos==down3_pos && upFlag==true ) {
Stop();//1
fall();//1
turnCross('r');//1
followLineTime();//1
Stop();//1
upFlag=false;
turnP=1;
Blink();//1
}
//返回点2
else if(pos==down3_pos && upFlag==false) {
Stop();//1
turnCross('r');//1
followLineTime();//1
upFlag=true;
Blink();//1
}
//处于转向2位置
else if(pos==turn_pos&&turnP==1) {
Stop();//1
turnCross('l');//1
followLineTime();//1
Blink();//1
}
//处于货架位置并且还未升起货架
else if(pos==up_pos && upFlag==false) {
if(turnP==1){
Stop();//1
turnCross('l');//1
followLineTime();//1
Stop();//1
turnP=2;
Blink();//1
}
}
else if(pos==up_pos && upFlag==false ) {
if(turnP==2){
turnCross('l');//1
followLineTime();//1
Stop();//1
rise();//1
turnP=0;
Blink();//1
}
}
//循迹
followLine();//1
//延迟
delay(DELAY_IN_LOOP);//1
}
void setup() {
while(!(proc==2)){
start();
}
}
void loop() {
trans();
}
//问题:1,小车有时在left0_pos(左0转弯位置)时会读取2次卡号,proc路线定位起不到效果
//问题:2,小车经过up_pos(货架位置)无法进入loop函数(请帮忙看看setup函数)
//不同位置对应的RFID卡号
#define RFID_NUMS 4
const char RFID_TABLE[RFID_NUMS][7]=
{"34FE63","34FE5E","34FEA4","A57895"};
//位置
#define up_pos 0 //货架位置
#define left0_pos 1 //左0转弯位置
#define turn_pos 3 //转向位置
#define down3_pos 2 //终点3位置
//小车路线定位
int proc=0;//用来判定(货架)和(左0转弯位置)
//转向判定
int turnP=0;//用来判定(转向位置方向),(货架位置方向)
//货架已经升起标志
bool upFlag=false;
void start(){
//采集传感器数据
sense();//1
//处于右转位置
if(pos==left0_pos) {
if(proc==0){
Stop();//1
turnCross('l');//1
followLineTime();//1
proc=1;
Blink();//1
}
}
//处于货架位置并且还未升起货架
else if(pos==up_pos && upFlag==false ) {
if(proc==1){
Stop();//1
rise();//1
upFlag=true;
proc=2;
Blink();//1
}
}
//循迹
followLine();//1
//延迟
delay(DELAY_IN_LOOP);//1
}
void trans(){
//采集传感器数据
sense();//1
//处于转向1位置
if(pos==turn_pos && turnP==0) {
Stop();//1
turnCross('r');//1
followLineTime();//1
Blink();//1
}
//处于货架位置并且以升起货架
else if(pos==down3_pos && upFlag==true ) {
Stop();//1
fall();//1
turnCross('r');//1
followLineTime();//1
Stop();//1
upFlag=false;
turnP=1;
Blink();//1
}
//返回点2
else if(pos==down3_pos && upFlag==false) {
Stop();//1
turnCross('r');//1
followLineTime();//1
upFlag=true;
Blink();//1
}
//处于转向2位置
else if(pos==turn_pos&&turnP==1) {
Stop();//1
turnCross('l');//1
followLineTime();//1
Blink();//1
}
//处于货架位置并且还未升起货架
else if(pos==up_pos && upFlag==false) {
if(turnP==1){
Stop();//1
turnCross('l');//1
followLineTime();//1
Stop();//1
turnP=2;
Blink();//1
}
}
else if(pos==up_pos && upFlag==false ) {
if(turnP==2){
turnCross('l');//1
followLineTime();//1
Stop();//1
rise();//1
turnP=0;
Blink();//1
}
}
//循迹
followLine();//1
//延迟
delay(DELAY_IN_LOOP);//1
}
void setup() {
while(!(proc==2)){
start();
}
}
void loop() {
trans();
}