想要努力的明天 发表于 2018-3-18 19:01:37

更新完新的IDE,I2C和wire的头文件都用不了了。。。


程序很长,后边都是重复性的,为了完成一些个比赛任务写的,安装了新的IDE就再也用不了这两种头文件了,一直显示为开发板编译错误。
求助,这是什么原因???:dizzy:
****************************************
//#include <i2cmaster.h>
#include <Servo.h>
#define uint16_t unsigned int
#define LOW 0
#define HIGH 1
Servo myservo;//3 夹合
Servo myserv1;//5 上下
Servo myserv2;//6钩
Servo myserv3;//9左右
const int led1 = 1;//X1
const int led2 = 0;//X2
const int led5 = 4;//X3
const int led6 = A0; //X4
const int led7 = A1; //X3
const int led8 = 2; //X4
const int led3 = A2; //
const int led4 = A3; //
boolean X;
boolean X1 ;
boolean X2 ;
boolean X3 ;
boolean X4 ;
boolean X7 ;
boolean X8 ;
int Y = 0;
int Ldir = 8;      //左电机前进 AIN1
int Rdir = 7;       //右电机前进 BIN1
int cp = 12;
int Len = 11;
int Ren = 10;
void setup()
{
Serial.begin(115200);   // 打开串口,设置数据传输速率9600
//电机初始化
pinMode(Ldir, OUTPUT);
pinMode(Rdir, OUTPUT);
pinMode(Len, OUTPUT);
pinMode(Ren, OUTPUT);
//黑白传感器初始化
pinMode(led1, INPUT);
digitalWrite(led1, HIGH);
pinMode(led2, INPUT);
digitalWrite(led2, HIGH);
pinMode(led3, INPUT);
digitalWrite(led3, HIGH);
pinMode(led4, INPUT);
digitalWrite(led4, HIGH);
    pinMode(led5, INPUT);
digitalWrite(led5, HIGH);
pinMode(led6, INPUT);
digitalWrite(led6, HIGH);
pinMode(led7, INPUT);
digitalWrite(led7, HIGH);
pinMode(led8, INPUT);
digitalWrite(led8, HIGH);
//颜色初始化
//i2c_init();
//舵机初始化
myservo.attach(3); // 夹合25/155
myservo.write(175);
myserv1.attach(5);//上下//35/84/125
myserv1.write(35);
myserv2.attach(6);//钩//10/170
myserv2.write(10);
myserv3.attach(9);//左右//150/110/125
myserv3.write(150);
}
void run(int sp)
{
digitalWrite(Ldir, 0);
digitalWrite(Rdir, 1);
digitalWrite(Len, 1);
digitalWrite(Ren, 1);
tone(cp, sp);
}

void left(int sp)
{
digitalWrite(Ldir, 0);
digitalWrite(Rdir, 1);
digitalWrite(Len, 0);
digitalWrite(Ren, 1);
tone(cp , sp);
}
void right(int sp)
{
digitalWrite(Ldir, 0);
digitalWrite(Rdir, 1);
digitalWrite(Len, 1);
digitalWrite(Ren, 0);
tone(cp , sp);
}
void Left(int sp)
{
digitalWrite(Ldir, 1);
digitalWrite(Rdir, 1);
digitalWrite(Len, 1);
digitalWrite(Ren, 1);
tone(cp , sp);
}
void Right(int sp)
{
digitalWrite(Ldir, 0);
digitalWrite(Rdir, 0);
digitalWrite(Len, 1);
digitalWrite(Ren, 1);
tone(cp , sp);
}
void back(int sp)
{ digitalWrite(Len, 1);
digitalWrite(Ren, 1);
digitalWrite(Ldir, 1);
digitalWrite(Rdir, 0);
tone(cp , sp);
}
void backleft(int sp)
{
digitalWrite(Ldir, 1);
digitalWrite(Rdir, 0);
digitalWrite(Len, 1);
digitalWrite(Ren, 0);
tone(cp , sp);
}
void backright(int sp)
{
digitalWrite(Ldir, 1);
digitalWrite(Rdir, 0);
digitalWrite(Len, 0);
digitalWrite(Ren, 1);
tone(cp , sp);
}
void brake(int time)//刹车(停)
{ digitalWrite(Ldir, 0);
digitalWrite(Rdir, 1);
digitalWrite(Len, 1);
digitalWrite(Ren, 1);
pinMode(cp, INPUT);
digitalWrite(cp, 0);
delay(time * 100);
}
/******************************************************************************************************************************************************************颜色程序***************
unsigned char Re_buf;
unsigned char sign = 0;
uint16_t CT = 0, Lux = 0;
byte color = 0, rgb_data = {0};
int A = 0, B = 0, C = 0, D = 0, E = 0, F = 0;
void give()
{
unsigned char data = {0};
iic_read(0x0c, data, 3);
rgb_data = data; //r
rgb_data = data; //g
rgb_data = data; //b
if ((((rgb_data) - 30) > (rgb_data)) && (((rgb_data) - 30) > (rgb_data))) //红
{
    Y = 3;
}
else if (((rgb_data) > 140) && ((rgb_data) > 140) && ((rgb_data) > 140))//白
{
    Y = 4;
}

else if ((((rgb_data) - (rgb_data)) < 5) && (((rgb_data) - (rgb_data)) < 5) && (((rgb_data) - (rgb_data)) < 5) && (((rgb_data) - (rgb_data)) < 5) ) //黑
{
    Y = 2;
}
else if (((rgb_data) > (rgb_data)) && ((rgb_data) > (rgb_data))) //蓝
{
    Y = 1;
}
else//绿
{
    Y = 5;
}
Serial.print("r:");
Serial.print( rgb_data);
Serial.print(",g:");
Serial.print(rgb_data );
Serial.print(",b:");
Serial.println(rgb_data);
Serial.print(",yanse:");
Serial.println( Y);
iic_read(0x0f, data, 1);
color = data;
Serial.print(",color:");
Serial.println( color, HEX);
}
void bai()
{ unsigned char data = {0};
iic_read(0x10, &data, 1);
i2c_start_wait(0xb4);
i2c_write(0x10);
i2c_write(0x71);
i2c_stop();
}
void iic_read(unsigned char add, unsigned char *data, unsigned char len)
{
i2c_start_wait(0xb4);
i2c_write(add);
i2c_start_wait(0xb5);
while (len - 1)
{
    *data++ = i2c_readAck();
    len--;
}
*data = i2c_readNak();
i2c_stop();
}
/****************************************************************************************************标准转向*********************/
void right45()
{ int z;
for (z = 0; z < 400; z++)
{
    Right(3000);
} while (digitalRead(led3) == 0)
{
    Right(2000);
}
   while (digitalRead(led3) == 1)
{
    Right(2000);
}

}
void right90()
{ int z;
while (digitalRead(led4) == 0)
{
    Right(2000);
}while (digitalRead(led4) == 1)
{
    Right(2000);
} while (digitalRead(led4) == 0)
{
    Right(2000);
}
while (digitalRead(led4) == 1)
{
    Right(2000);
}
}
void right135()
{ int z;
for (z = 0; z < 300; z++)
{
    Right(3000);
} while (digitalRead(led4) == 1)
{
    Right(2000);
} delay(300);
while (digitalRead(led4) == 1)
{
    Right(2000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    Right(2000);
}
}
void right180()
{ int z;
for (z = 0; z < 300; z++)
{
    Right(3000);
} while (digitalRead(led4) == 1)
{
    Right(2000);
} delay(300);
while (digitalRead(led4) == 1)
{
    Right(2000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    Right(2000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    Right(2000);
}
}
void left45()
{ int z;
for (z = 0; z < 700; z++)
{
    Left(3000);
}
   while (digitalRead(led3) == 0)
{
    Left(2000);
}
   while (digitalRead(led3) == 1)
{
    Left(2000);
}
}
void left90()
{ int z;
while (digitalRead(led4) == 1)
{
    Left(2000);
}
while (digitalRead(led4) == 0)
{
    Left(2000);
}
while (digitalRead(led4) == 1)
{
    Left(2000);
}
   while (digitalRead(led4) == 0)
{
    Left(2000);
}
while (digitalRead(led4) == 1)
{
    Left(2000);
}
}
void left135()
{ int z;
for (z = 0; z < 300; z++)
{
    Left(3000);
} while (digitalRead(led4) == 1)
{
    Left(2000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    Left(2000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    Left(2000);
}
}
void houzhuan()
{ int z;
for (z = 0; z < 1000; z++)
{
    Left(2000);
}
while (digitalRead(led4) == 1)
{
    Left(2000);
}
delay(300);
while (digitalRead(led1) == 1)
{
    Left(2000);
}

}
/********************************************************循迹程序***********************/
void straight1(int sp)//直行循迹
{
X1 = digitalRead(led1);//黑1白0
X2 = digitalRead(led2);
X3 = digitalRead(led5);//黑1白0
X4 = digitalRead(led6);
if ( (X1 == 1 ) &&(X2 == 0))
{
    right(sp);
}
else if ( (X1 == 0 ) &&(X2 == 1))
{
    left(sp);
}
else if (( X4 == 1 ) && (X1 == 1 ) &&(X2 == 1) &&(X3 == 0))
{
    right(sp);
}
else if (( X4 == 0 ) && (X1 == 1 ) &&(X2 == 1) &&(X3 == 1))
{
    left(sp);
}
else
{run(sp);}
}
void straight2(int sp)//倒退循迹
{
X7 = digitalRead(led3);//黑1白0
X8 = digitalRead(led4);
if ( (X1 == 1 ) &&(X2 == 0))
{
    backleft(sp); Serial.print(0, DEC);
}
else if ( (X1 == 0 ) &&(X2 == 1))
{
    back(sp); Serial.print(1, DEC);
}
else
{
    back(sp); Serial.print(2, DEC);
}
}
void straight3(int sp)//直行循迹
{
X1 = digitalRead(led1);//黑1白0
X2 = digitalRead(led2);
X3 = digitalRead(led5);//黑1白0
X4 = digitalRead(led6);
if ( (X1 == 1 ) &&(X2 == 0))
{
    right(sp);
}
else if ( (X1 == 0 ) &&(X2 == 1))
{
    left(sp);
}
/* else if (( X4 == 1 ) && (X1 == 1 ) &&(X2 == 1) &&(X3 == 0))
{
    right(sp);
}
else if (( X4 == 0 ) && (X1 == 1 ) &&(X2 == 1) &&(X3 == 1))
{
    left(sp);
}*/
else
{run(sp);}
}
///*****************************************************************************************************************分部程序************************************************//
void NO0()//任务开始
{ while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(150);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(150);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
}
void NO1()//夹任务1
{
int z;
for (z = 0; z < 4000; z++)
{
    straight1(3000);
}
while (digitalRead(led3) == 1)
{
    straight1(3000);
}
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
myservo.write(10);//第一次抓
brake(2);
while (digitalRead(led3) == 1)
{
    straight2(3000);
}
houzhuan(); brake(5);
while (digitalRead(led4) == 1)
{
    straight3(3000);
}
while (digitalRead(led4) ==0)
{
    straight3(3000);
}
while (digitalRead(led4) == 1)
{
    straight3(3000);
}
}
void NO20()//放中间
{
int z;
for (z = 0; z < 4000; z++)
{
    straight3(2000);
}
while (digitalRead(led3) == 1)
{
    straight3(3000);
}
myservo.write(175);
brake(2);
for (z = 0; z < 2500; z++)
{
    straight2(2000);
}
houzhuan(); brake(5);
while (digitalRead(led4) == 1)
{
    straight3(3000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    straight3(3000);
}

}
void NO2()//放任务1
{ int z;
for (z = 0; z < 3000; z++)
{
    straight1(2000);
}
while (digitalRead(led3) == 1)
{
    straight1(3000);
} delay(300);
while (digitalRead(led3) == 1)
{
    straight1(3000);
}
brake(10);
for (z = 0; z < 1100; z++)
{
    straight1(1000);
}
myservo.write(135);//
brake(10);
for (z = 0; z < 600; z++)
{
   back(1000);
}
for (z = 0; z < 3000; z++)
{
    straight2(2000);
}
houzhuan(); brake(5);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
while (digitalRead(led4) == 0)
{
    straight3(3000);
}
while (digitalRead(led4) == 1)
{
    straight3(3000);
}
}
void NO3()///////////////////////////////////////////////////叠放第二层
{ myserv1.write(90);
int z;
for (z = 0; z < 5000; z++)
{
    straight1(2000);
}
while (digitalRead(led3) == 1)
{
    straight1(3000);
}
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
while (digitalRead(led3) == 1)
{
    straight1(2000);
}
brake(3);
myservo.write(120);
brake(10);
myserv1.write(35);
brake(10);
myservo.write(10);
brake(10);
myservo.write(150);
    brake(10);
for (z = 0; z < 1100; z++)
{
    straight1(1000);
}
    for (z = 0; z < 500; z++)
{
    back(1000);
}
for (z = 0; z < 3000; z++)
{
    straight2(3000);
}
houzhuan();
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
}
void NO4()///////////////////////////////////////////////////叠放第三层
{ myserv1.write(130);
int z;
for (z = 0; z < 5000; z++)
{
    straight1(2000);
}
while (digitalRead(led3) == 1)
{
    straight1(3000);
}
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
while (digitalRead(led3) == 1)
{
    straight1(2000);
}
brake(3);
myservo.write(120);
brake(10);
myserv1.write(35);
brake(10);
myservo.write(10);
brake(10);
myservo.write(150);
    brake(10);
for (z = 0; z < 700; z++)
{
    straight1(1000);
}
    for (z = 0; z < 500; z++)
{
    back(1000);
}
for (z = 0; z < 3000; z++)
{
    straight2(3000);
}
houzhuan();
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
}
/******************************勾去任务二*/
void NOa()                                                      //勾aaaaaaaaaaaa
{ int z;
for (z = 0; z < 4000; z++)
{
    straight1(2000);
}
while (digitalRead(led3) == 1)
{
    straight1(3000);
}delay(300);
while (digitalRead(led3) == 1)
{
    straight1(3000);
}

while (digitalRead(led4) == 1)
{
    straight3(1000);
}
brake(5);
for (z = 0; z < 400; z++)
{
   straight2(2000);
}brake(5);
myserv3.write(146);brake(5);
myserv2.write(155);brake(5);
   while (digitalRead(led3) == 1)
{
    straight2(3000);
}
houzhuan();
   myserv3.write(120);brake(5);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
myserv2.write(135); brake(2);
myserv2.write(115); brake(2);
myserv2.write(100); brake(2);
myserv2.write(10);brake(2);

while (digitalRead(led4) == 0)
{
    straight1(3000);
}
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
   delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}myservo.write(10);
}
void NOb()                                                 //勾bbbbbbbbbbbbbbbbb
{ int z;
for (z = 0; z < 3000; z++)
{
    straight1(3000);
} delay(200);
while (digitalRead(led3) == 1)
{
    straight1(3000);
}delay(300);
while (digitalRead(led3) == 1)
{
    straight1(3000);
}

while (digitalRead(led4) == 1)
{
    straight3(1000);
} brake(5);
myserv3.write(120);brake(5);
myserv2.write(155);brake(5);
   while (digitalRead(led3) == 1)
{
    straight2(3000);
}
houzhuan();
   myserv3.write(120);brake(5);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
myserv2.write(135); brake(2);
myserv2.write(115); brake(2);
myserv2.write(100); brake(2);
myserv2.write(10);brake(5);
while (digitalRead(led4) == 0)
{
    straight1(3000);
}
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
   delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}myservo.write(10); brake(5);
}
void NOc()                                                 //勾cccccccccccccccccccccccc
{   myservo.write(175);int z;
for (z = 0; z < 4000; z++)
{
    straight1(2000);
}
while (digitalRead(led3) == 1)
{
    straight1(3000);
} delay(200);
while (digitalRead(led3) == 1)
{
    straight1(3000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    straight3(1000);
} brake(5);
for (z = 0; z < 4000; z++)
{
    straight3(1000);
}
myserv3.write(115);brake(5);
myserv2.write(155);brake(5);

while (digitalRead(led4) == 1)
{
    straight2(3000);
}
while (digitalRead(led3) == 1)
{
    straight2(3000);
}
houzhuan();   myserv3.write(115);brake(5);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
myserv2.write(135); brake(2);
myserv2.write(115); brake(2);
myserv2.write(100); brake(2);
myserv2.write(10);brake(5);
while (digitalRead(led4) == 0)
{
    straight1(3000);
}
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
   delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}myservo.write(10); brake(5);
}
void NOd()                                                 //勾ddddddddddddddddddddddddd
{ int z;
for (z = 0; z < 4000; z++)
{
    straight1(2000);
}
while (digitalRead(led3) == 1)
{
    straight1(3000);
} delay(200);
while (digitalRead(led3) == 1)
{
    straight1(3000);
}
delay(300);
while (digitalRead(led4) == 1)
{
    straight3(1000);
} brake(5);
for (z = 0; z < 3200; z++)
{
      straight3(1000);
}
myserv3.write(133);brake(5);
myserv2.write(155);brake(5);
while (digitalRead(led4) == 1)
{
    straight2(3000);
}
while (digitalRead(led3) == 1)
{
    straight2(3000);
}
houzhuan();   myserv3.write(120);brake(5);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
myserv2.write(135); brake(2);
myserv2.write(115); brake(2);
myserv2.write(100); brake(2);
myserv2.write(10);brake(5);
while (digitalRead(led4) == 0)
{
    straight1(3000);
}
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
   delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}myservo.write(10); brake(5);
}
void NOe()                                                 //勾eeeeeeeeeeeeeeeeeeeee
{ int z;
for (z = 0; z < 4000; z++)
{
    straight1(2000);
}
while (digitalRead(led3) == 1)
{
    straight1(3000);
}delay(300);
while (digitalRead(led3) == 1)
{
    straight1(3000);
}

while (digitalRead(led4) == 1)
{
    straight3(1000);
   
}
   for (z = 0; z < 800; z++)
{
      straight3(1000);
}brake(5);
myserv3.write(150);brake(5);
myserv2.write(155);brake(5);
while (digitalRead(led4) == 1)
{
    straight2(3000);
}
while (digitalRead(led3) == 1)
{
    straight2(1500);
}
houzhuan();   myserv3.write(120);brake(5);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
myserv2.write(135); brake(2);
myserv2.write(115); brake(2);
myserv2.write(100); brake(2);
myserv2.write(10);brake(5);
while (digitalRead(led4) == 0)
{
    straight1(3000);
}
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
   delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
myservo.write(10); brake(5);
}
void NO00()//任务开始
{ int z;
for (z = 0; z < 3000; z++)
{
    straight1(3000);
}
while (digitalRead(led3) == 1)
{
    straight1(3000);
}
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
delay(200);
while (digitalRead(led4) == 1)
{
    straight1(3000);
}
brake(500000);
}
/*************************************888888888888888888888888888888888888888888888888888888888******************************************主程序********************/

void lop()
{ NO3(); brake(1000);

}
void loop()
{ int a;
//bai();
NO0(); brake(3);
NO1(); brake(3); //C位置
NO20(); brake(3); //放空处
right90(); brake(3);
NO1(); brake(3); //E位置
right90(); brake(3);
NO2(); brake(3); //放红处
right90(); brake(3);
NO1(); brake(3); //A位置
left135(); brake(3);
NO2(); brake(3); //放白
right45(); brake(3);
NO1(); brake(3);
left90(); brake(3);
NO2(); brake(3); //放绿
/************************************************任务一*/
right45(); brake(3); //A白
NOa(); brake(3);
NO3(); brake(3); //叠2层

NOb(); brake(3); //B黑
right90(); brake(3);
NO2(); brake(3);
left90(); brake(3);

NOe(); brake(3); //红
right45(); brake(3);
NO3(); brake(3);
left45(); brake(3);

NOd(); brake(3); //d蓝
right135(); brake(3);
NO2(); brake(3); //叠2层
left135(); brake(3);

NOc(); brake(3); //绿
left45(); brake(3);
NO3(); brake(3); //叠2层
right135(); brake(3);
/********第二个五个************/
NOa(); brake(3);
   left90(); brake(3);
NO4(); brake(3); //叠2层
   right90(); brake(3);

NOb(); brake(3); //B黑
NO3(); brake(3);

NOe(); brake(3); //红
    left45(); brake(3);
NO4(); brake(3);
right45(); brake(3);

NOd(); brake(3); //d蓝
right45(); brake(3);
NO3(); brake(3); //叠2层
left45(); brake(3);

NOc(); brake(3); //绿
left135(); brake(3);
NO4(); brake(3); //叠2层
right90();
NO00();
}

想要努力的明天 发表于 2018-3-18 19:06:16

单片机型号:        ALPHA 8F328P-U

弘毅 发表于 2018-3-19 19:15:08

我这里编译没发现问题。。。。
新特性与兼容性优先都可以编译通过

想要努力的明天 发表于 2018-3-19 19:30:13

弘毅 发表于 2018-3-19 19:15
我这里编译没发现问题。。。。
新特性与兼容性优先都可以编译通过

但是加上I2C呢?或者wire.h就不行了,关键是这个

弘毅 发表于 2018-3-20 07:27:09

想要努力的明天 发表于 2018-3-19 19:30
但是加上I2C呢?或者wire.h就不行了,关键是这个

这个是使用库例程里面的Wire库中的自带例程,master reader。编译是正常的。如果你是用了wire.h,但是编译有问题,这样就需要检查你的代码,还有检查你的库。也有可能是你安装的库,函数名冲突了。
页: [1]
查看完整版本: 更新完新的IDE,I2C和wire的头文件都用不了了。。。