Упрощение программы
- Войдите на сайт для отправки комментариев
Ср, 12/03/2014 - 20:47
Здраствуйте, помогите пожалуста. Можно ли как нибуть упростить программу.
//motorПравый int dir1PinA = 8; //Серый int dir2PinA = 7; //Белый int speedA = 3; //motorЛевый int dir1PinB = 4; //Чёрный int dir2PinB = 2; //Коричневый int speedB = 5; //Sensors// int outputPin = 6;//подключил к ШИМ Ультрозвуковой датчик int inputPin = 9;// Echo int distance; //Random// int TimeDelay = 0; int napravlenie = 0; int povorot = 0; void setup(){ Serial.begin(9600); pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT); pinMode(dir1PinB, OUTPUT); pinMode(dir2PinB, OUTPUT); pinMode(inputPin, INPUT); //УЗ-датчик pinMode(outputPin, OUTPUT); //УЗ-датчик } void loop(){ //sensor// digitalWrite(outputPin, LOW); delayMicroseconds(2); digitalWrite(outputPin, HIGH); delayMicroseconds(10); digitalWrite(outputPin, LOW); int distance = pulseIn(inputPin, HIGH); distance= distance/58; Serial.print(distance); Serial.print("cm"); Serial.println(" "); // действи на значение sensor if(distance < 25){ //едем назад digitalWrite(dir1PinA,HIGH); digitalWrite(dir2PinA,LOW); digitalWrite(dir1PinB,HIGH); digitalWrite(dir2PinB,LOW); analogWrite(speedA, 100); analogWrite(speedB, 100); TimeDelay=random(500, 3500); delay(TimeDelay); } else if(distance > 25){ //иначе едем куда хотим napravlenie=random(1, 4); if(napravlenie == 1){ //поворачиваем направо digitalWrite(dir1PinA, HIGH); digitalWrite(dir2PinA, LOW); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, HIGH); analogWrite(speedA, 100); analogWrite(speedB, 100); TimeDelay=random(500, 3500); delay(TimeDelay); } else if(napravlenie == 2){ //поворачиваем налево digitalWrite(dir1PinA,LOW); digitalWrite(dir2PinA,HIGH); digitalWrite(dir1PinB,HIGH); digitalWrite(dir2PinB,LOW); analogWrite(speedA, 100); analogWrite(speedB, 100); TimeDelay=random(500, 3500); delay(TimeDelay); } else if(napravlenie == 3){ //едем Вперед digitalWrite(dir1PinA,LOW); digitalWrite(dir2PinA,HIGH); digitalWrite(dir1PinB,LOW); digitalWrite(dir2PinB,HIGH); analogWrite(speedA, 100); analogWrite(speedB, 100); TimeDelay=random(500, 3500); delay(TimeDelay); } else { //стоп digitalWrite(dir1PinA,LOW); digitalWrite(dir2PinA,LOW); digitalWrite(dir1PinB,LOW); digitalWrite(dir2PinB,LOW); analogWrite(speedA, 0); analogWrite(speedB, 0); TimeDelay=random(500, 3500); delay(TimeDelay); } if(napravlenie == 0) { napravlenie=random(1, 4); } else { napravlenie = 0; } } }
Можно. Зачем? http://ru.wikipedia.org/wiki/Рефакторинг
вижу много схожих последовательностей, немножко никогда неиспользуемых строк (12, 16, 89-93), избыточность типов переменных.
работает все классно, спасибо большое
а работать будет точно так же, потому что код после компилятора не изменился, изменилось только его визуальное представление :)
P.S. условие "case 4:..." никогда не сработает, потому что согласно описанию: "random(min, max) - Случайное число между min и max-1."
можно как нибуть добавить многозадачность для измерения растояния УЗ-датчиком спомощью LeOS
подробно как он работает написано здесь http://cyber-place.ru/showthread.php?t=358
Не совсем многозадачность, но "как бы параллельное" выполнение нескольких повторяющихся с различной периодичностью действий обеспечивает - тыц.