Академический Документы
Профессиональный Документы
Культура Документы
#define Function_h
#include <Arduino.h>
#include "Servo.h"
#include "ColSensor.h"
#include "Track.h"
#include "Car.h"
#include "ColQueue.h"
#define N 12
/*12
Memory[0]12*/
int Memory[N + 1];
ColQueue Red(N), Green(N), Blue(N);
//
int SPEED1 = 150;
//
int SPEED2 = 150 - 10;
//
int TURN = 180;
//
int TIME = 1;
//
int DELAY = 800;
//
int STOP = 250;
//
int BACK = 200;
//112
int num = 0;
Car mycar(8, 9, 10, 11, 5, 6);
Track mytrack(A5, A4, A3, A2, A1);
ColSensor mysensor(0, 1, 3, 4, 2, 10);
/*12
3*/
Servo myservo1, myservo2, myservo3;
/****************************************/
//
void TurnL(){
mycar.Move(0, 0, 5, STOP);
mycar.Move(TURN, TURN, 4, DELAY / 2);
do{
mycar.Move(TURN, TURN, 4, TIME);
} while (mytrack.Digital_in(2));
mycar.Move(0, 0, 5, 1);
}
//
void TurnR(){
mycar.Move(0, 0, 5, STOP);
mycar.Move(TURN, TURN, 6, DELAY / 2);
do{
mycar.Move(TURN, TURN, 6, TIME);
} while (mytrack.Digital_in(2));
mycar.Move(0, 0, 5, 1);
}
//180
void TurnC(){
mycar.Move(0, 0, 5, STOP);
mycar.Move(TURN, TURN, 4, DELAY);
do{
mycar.Move(TURN, TURN, 4, TIME);
} while (mytrack.Digital_in(2));
mycar.Move(0, 0, 5, 1);
}
/****************************************/
void Counter(){
mysensor.g_count++;
}
/*1230
RGB100
*/
int Color(){
int i, min1, min2;
mysensor.Get();
if (mysensor.g_array[0]>mysensor.g_array[1]){
i = 0; min1 = mysensor.g_array[1];
}
else{
i = 1; min1 = mysensor.g_array[0];
}
if (mysensor.g_array[i]>mysensor.g_array[2])
min2 = mysensor.g_array[2];
else {
min2 = mysensor.g_array[i]; i = 2;
}
if ((mysensor.g_array[i] - min1)>100 ||
(mysensor.g_array[i] - min2)>100)return i + 1;
return 0;
}
void Push(int i){
switch (Memory[i]){
case 1:Red.Enter(i); break;
case 2:Blue.Enter(i); break;
case 3:Green.Enter(i); break;
default:break;
}
}
int Check(int i){
int flag;
mycar.Move(0, 0, 5, STOP);
//
for (int i = 0; i<3; i++)
if (flag = Color()){
digitalWrite(13, HIGH); delay(500);
digitalWrite(13, LOW); delay(500);
break;
}
return Memory[i] = flag;
}
/****************************************/
//
void ServoMove(int a, int b, int c){
Servo p; int t;
switch (c){
case 1:p = myservo1; t = 2; break;
case 2:p = myservo2; t = 2; break;
case 3:p = myservo3; t = 2; break;
default:break;
}
// 3200
}
//
void Plus(){
SPEED1++; SPEED2++; TURN++;
}
//
void Stoping(int& a){
if (a > 2){
mycar.Move(SPEED1, SPEED2, 2, BACK / (6 / a));
mycar.Move(0, 0, 5, 1);
}
a = 0;
}
void Tracking(int a, int b, int temp = 11011){
int t = 1;
while (t){
t = mytrack.Digital_in();
Serial.println(t);
if (t == 100 || t == 1110 || t == 10101 || t == 11111)t = temp;
switch (t){
case 11110: case 11100: case 11101:
case 1100: case 1101: case 10100:
mycar.Move(a, b, 6, TIME); temp = t; break;
case 1111: case 110: case 101:
case 10110: case 10111: case 111:
mycar.Move(a, b, 4, TIME); temp = t; break;
case 10000: case 11000:
case 1000: case 1001: case 11010:
mycar.Move(a, b, 6, TIME); temp = t; break;
case 11: case 1:
case 10: case 10010: case 1011:
mycar.Move(a, b, 4, TIME); temp = t; break;
case 10001: case 11011: case 1010: case 11001: case 10011:
mycar.Move(a, b, 8, TIME); temp = t; break;
case 0:
/*
*/
while (t < 10000 || t % 10 == 0){
mycar.Move(a, b, 8, 1);
t = mytrack.Digital_in();
}t = 0; break;
default:break;
}
}
mycar.Move(0, 0, 5, 1);
}
void In(){
TurnL();
Tracking(SPEED1, SPEED2, 1);
}
#endif