Помогите, пожалуйста!!!!! Я написала программу для машинки и для 2 сенсоров,но она не работает.А где ошибка не знаю....Занимаюсь только 3 месяца,помогите пожалуйста((( #define LEFT A5 #include <Servo.h> Servo myservo; Servo Povorot; int pos = 0; int max_v=0; int angel =0; int step1 = 1; int SensorPin = A0; int total = 180; int val2 = 0; int val1 =0; float povorotVal=90; int sensorValue[180]; #define RIGHT A4 int right,left, leftPin,rightPin,incomingByte; float rightVal,leftVal,k; boolean stopper=false; int okrgl(float x){ if(x-0.5>int(x)) return (int(x)+1); if(x-0.5<=int(x)) return (int(x)); } boolean stopLine(int a, int b){ if (a==0 && b==1 || a==1 && b==0)return true; else return false; } void Drive(){ if(right+left < 4*max_v-800){ if (rightVal>leftVal){ povorotVal=90 - 45*k*rightVal/max_v; if ((left < 30) && (left < 30) && (right < 30)&&(right > 100))povorotVal=50; } else{ povorotVal=85 + 45*k*(leftVal-max_v)/max_v; if ((right < 30) && (right < 30) && (left < 30)&& (left > 100)) povorotVal=135; } } if (povorotVal>140) povorotVal=140; //ограничения if (povorotVal<50) povorotVal=50; Povorot.write(okrgl(povorotVal)); myservo.write(1485); } char* light(){ int conv = incomingByte - 48; if (conv==0)return "RED"; else if (conv==1)return "REDYELLOW"; else if (conv==2)return "GREEN"; else if (conv==3)return "GREENTICK"; else if (conv==4)return "YELLOW"; else if (conv==5)return "CROSSWALK"; else if (conv==6)return "STOP"; else return "FALSE"; } void task () { int u; float k=2; int grey = RIGHT- 8; int grey2 = LEFT - 8; while(true){ u=k*((RIGHT-grey)); u=k*((LEFT-grey)); myservo.write(50+u); myservo.write(50-u); delay(1000); } } void setup() { myservo.attach(8); Povorot.attach(11); Serial.begin(9600); myservo.write(1400); Povorot.write(85); delay(100); pinMode(53, INPUT); pinMode(41, INPUT); } void loop() { delay(500); long val3=0; for(int i =0;i<100;++i) { val3= val3 + analogRead(LEFT); } val3=val3/100; Serial.println(val3); delay(250); long val4=0; for(int i =0;i<100;++i) { val4= val4 + analogRead(LEFT); } val4=val4/100; Serial.println(val4); for(pos= total;pos< total;pos+=step1) { myservo.write(pos); delay(500); sensorValue[pos]=analogRead(LEFT); sensorValue[pos]=analogRead(RIGHT); } for(pos= total;pos >=total;pos-=step1) { myservo.write(pos); delay(500); val2 = analogRead(LEFT); val2 = analogRead(RIGHT); val2 = sensorValue[pos]; if(sensorValue[pos]>max_v) { max_v=sensorValue[pos]; angel=pos; } } Serial.println("New"); Serial.println(max_v); Serial.println(pos); for (int i=0;i<5;i++){ right+=analogRead(RIGHT); left+=analogRead(LEFT); } right=right/5; left=left/5; leftPin=digitalRead(53); rightPin=digitalRead(41); rightVal=right*1.0/2; leftVal=left*1.0/2; incomingByte = Serial1.read(); k=1.0; Drive(); }
Это прекрасно, что робототехника пришла в массы и стала доступна и интересна для всех желающих, однако это не отменяет того, что вопросы должны быть самодостаточными исодержать половину ответа. 1. Что вообще должно получиться? 2. Какое железо? Что куда подключено? 3. Что заработало, а что именно не получается? 4. Пожалуйста, пользуйтесь тегом для кода, так он разборчивее читаться будет 5. Пишите код аккуратнее: пользуйтесь отступами и не кидайте вперемешку дефайны, переменные и инклюды
1.машина должна поехать с помощью сервоприводов и аналоговых сенсоров света 2.все провода подключаются к ардуино мега 3.машина ехала в перед,но не успевала считывать значение сенсоров (иногда просто тупа ехала прямо)
В одном только loop понатыкано задержек суммарно на 1,75 секунды. Это очень много. Зачем такие большие значения? И приведите код в порядок, а то читать невозможно. В Arduino IDE нажмите Ctrl+T, чтобы автоматически отформатировать код. Затем в редакторе сообщения на форуме нажмите кнопочку с символами "<>" и в появившееся окошко вставьте код. Еще к коду не помешало бы написать подробные комментарии. Сложно найти ошибку в коде, не зная, что должен делать данный код.
Код (Text): #define LEFT A5 #define RIGHT A4 #include <Servo.h> Servo myservo; Servo Povorot; int pos = 0; int max_v=0; int angel =0; int step1 = 1; int SensorPin = A0; int total = 180; int val2 = 0; int val1 =0; float povorotVal=90; int sensorValue[180]; int right,left, leftPin,rightPin,incomingByte; float rightVal,leftVal,k; boolean stopper=false; int okrgl(float x){ if(x-0.5>int(x)) return (int(x)+1); if(x-0.5<=int(x)) return (int(x)); } boolean stopLine(int a, int b){ if (a==0 && b==1 || a==1 && b==0)return true; else return false; } void Drive(){ if(right+left < 4*max_v-800){ if (rightVal>leftVal){ povorotVal=90 - 45*k*rightVal/max_v; if ((left < 30) && (left < 30) && (right < 30)&&(right > 100))povorotVal=50; } else{ povorotVal=85 + 45*k*(leftVal-max_v)/max_v; if ((right < 30) && (right < 30) && (left < 30)&& (left > 100)) povorotVal=135; } } if (povorotVal>140) povorotVal=140; //ограничения if (povorotVal<50) povorotVal=50; Povorot.write(okrgl(povorotVal)); myservo.write(1485); } char* light(){ int conv = incomingByte - 48; if (conv==0)return "RED"; else if (conv==1)return "REDYELLOW"; else if (conv==2)return "GREEN"; else if (conv==3)return "GREENTICK"; else if (conv==4)return "YELLOW"; else if (conv==5)return "CROSSWALK"; else if (conv==6)return "STOP"; else return "FALSE"; } void task () { int u; float k=2; int grey = RIGHT- 8; int grey2 = LEFT - 8; while(true){ u=k*((RIGHT-grey)); u=k*((LEFT-grey)); myservo.write(50+u); myservo.write(50-u); delay(1000); } } void setup() { myservo.attach(8); Povorot.attach(11); Serial.begin(9600); myservo.write(1400); Povorot.write(85); delay(100); pinMode(53, INPUT); pinMode(41, INPUT); } void loop() { delay(500); long val3=0; for(int i =0;i<100;++i) { val3= val3 + analogRead(LEFT); } val3=val3/100; Serial.println(val3); delay(250); long val4=0; for(int i =0;i<100;++i) { val4= val4 + analogRead(LEFT); } val4=val4/100; Serial.println(val4); for(pos= total;pos< total;pos+=step1) { myservo.write(pos); delay(500); sensorValue[pos]=analogRead(LEFT); sensorValue[pos]=analogRead(RIGHT); } for(pos= total;pos >=total;pos-=step1) { myservo.write(pos); delay(500); val2 = analogRead(LEFT); val2 = analogRead(RIGHT); val2 = sensorValue[pos]; if(sensorValue[pos]>max_v) { max_v=sensorValue[pos]; angel=pos; } } Serial.println("New"); Serial.println(max_v); Serial.println(pos); for (int i=0;i<5;i++){ right+=analogRead(RIGHT); left+=analogRead(LEFT); } right=right/5; left=left/5; leftPin=digitalRead(53); rightPin=digitalRead(41); rightVal=right*1.0/2; leftVal=left*1.0/2; incomingByte = Serial1.read(); k=1.0; Drive(); }