• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
AutonomicznyCar
#1
Witam. Zrobiłem autonomiczne autko. Pojedyńcze elementy gdy wywołuję działają bez zarzutu, gdy wrzuciłem wszystko w jeden kod nie działa nic. Mógłby ktoś spojrzeć i wskazać błędy. Według mojego rozumowania wszystko powinno działać bez zarzutu. 
Kod:
//Algorytm sterowania autonomicznym autkiem

//Diode - Lighting
int blinkierLeftPin = 1;  
int blinkierRightPin = 2;
int positionalLightPin = 3;
int reverseLightPin = 4;

//Engine - drive
int enablePin1 = 5; // Signal PWM Engine
int in1Pin = 6;    // Signal's control drive engine
int in2Pin = 7;

//Electromagnet - control
int enablePin2 = 8;  // Signal PWM Control
int in3Pin = 9;    // Signal's left or right
int in4Pin = 10;

//Sensor distance
int echoPin = 11;
int trigPin = 12;
int dis;

int p = 0;
void setup(){
Serial.begin(9600);

pinMode(blinkierLeftPin, OUTPUT);
pinMode(blinkierRightPin, OUTPUT);
pinMode(positionalLightPin, OUTPUT);
pinMode(reverseLightPin, OUTPUT);

pinMode(enablePin1, OUTPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);

pinMode(enablePin2, OUTPUT);
pinMode(in3Pin, OUTPUT);
pinMode(in4Pin, OUTPUT);

pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}

int main(void){ //loop(){
//Start
//digitalWrite(positionalLightPin, HIGH); //PositionalLight ON
//EngineStart();
//Sensor();
 if(p == 0){
   EngineStart();
   TurnRight();
   delay(2000); //Waiting 2sec
   }else{
   TurnLeft();
   EngineRevers();
 delay(2000); // Waiting 2sec
 }
 EngineStart();
 //delay(5000); //Waiting 5sec
 digitalWrite(positionalLightPin, LOW); //PositionalLight OFF
 
 p++;
 return -1; // zakończenie programu  
}
void EngineStart(){
digitalWrite(6, LOW); //Engine - sales in left
digitalWrite(7, HIGH);

 for(int i = 100; i <= 255; i++){
analogWrite(5, i); //Low-High (0 - 255) speed Engine
       Serial.println(i + "front");
delay(5000); // Waiting 5 sek.
 }
}

void EngineRevers(){
digitalWrite(6, HIGH); //Engine - sales in right
digitalWrite(7, LOW);
digitalWrite(4, HIGH); //ReversLight ON

 for(int i = 50; i <=100; i++){
analogWrite(5, i); //Low-High (0 - 255) speed Engine
       Serial.println(i + "Revers");
delay(3000); // Waiting 3sek.
       digitalWrite(4, LOW); //ReverseLight OFF
 }
}

void TurnLeft(){
analogWrite(8, 255); // MAX turn left
digitalWrite(9, LOW); //Control - left
digitalWrite(10, HIGH);

digitalWrite(1, HIGH); //blinkierLeft
delay(500);
digitalWrite(1, LOW);
delay(500);
}

void TurnRight(){
analogWrite(8, 255); // MAX turn Right
digitalWrite(9, HIGH); //Control - Right
digitalWrite(10, LOW);

digitalWrite(2, HIGH); //blinkierRight
delay(500);
digitalWrite(2, LOW);
delay(500);
}
void Sensor(){
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
int distance = pulseIn(echoPin, HIGH);
         dis = distance/58; //obliczenie odległosci w CM
         Serial.println(dis);
}


Z góry dzięki za pomoc :)

Czyżby nie było nikogo,  kto wie,  gdzie mam problem ?
Pod względem składniowy  program jest napisany prawidłowo,  kompiluje  się,  bez problemu. Wycieków pamięci nie ma - sprawdzone. Musi być błąd z wywołaniem funkcji,  ale go nie widzę niestety.

Proszę posty edytować a nie generować nowe
 
Odpowiedź
#2
Program nie ma ani ładu ani składu , jest jak wyrwane zdanie z kontekstu . Jeżeli nie pisałeś go sam podaj źródło lub wklej kompletny kod .

Główna pętla jest źle zadeklarowana.
Sensor wisi w powietrzu nie ma żadnego powiązania z programem .
Pętle opóźniające są tak długie że wykonanie kroku zajmuje ponad 5 minut .
Przydałby się schemat połączenia silników i oświetlenia
Silniki cały czas pracują nie ma momentu zatrzymania( spowolnienia ) się przed skrętem i cofaniem
co zapewne generuje spore obciążenia dla całego układu

P.s. Nikt przy kompie nie siedzi 24h na dobę proszę się uzbroić w cierpliwość , zwłaszcza że osoby które najwięcej się udzielają na forum mają powyżej 20 lat a co za tym idzie także pracę i nie są w stanie czasem w ciągu 10 godzin odpisać .

Poniżej masz z drobnymi poprawkami chyba to o co ci chodziło , Jak się domyślam za wartość zmiennej 'p' będzie odpowiedzialny sensor ?

Kod:
//Algorytm sterowania autonomicznym autkiem

//Diode - Lighting
int blinkierLeftPin = 1;  
int blinkierRightPin = 2;
int positionalLightPin = 3;
int reverseLightPin = 4;

//Engine - drive
int enablePin1 = 5; // Signal PWM Engine
int in1Pin = 6;    // Signal's control drive engine
int in2Pin = 7;

//Electromagnet - control
int enablePin2 = 8;  // Signal PWM Control
int in3Pin = 9;    // Signal's left or right
int in4Pin = 10;

//Sensor distance
int echoPin = 11;
int trigPin = 12;
int dis;

int p = 0;
void setup(){
Serial.begin(9600);

pinMode(blinkierLeftPin, OUTPUT);
pinMode(blinkierRightPin, OUTPUT);
pinMode(positionalLightPin, OUTPUT);
pinMode(reverseLightPin, OUTPUT);

pinMode(enablePin1, OUTPUT);
pinMode(in1Pin, OUTPUT);
pinMode(in2Pin, OUTPUT);

pinMode(enablePin2, OUTPUT);
pinMode(in3Pin, OUTPUT);
pinMode(in4Pin, OUTPUT);

pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}

//int main(void){ //
void loop(){
//Start
//digitalWrite(positionalLightPin, HIGH); //PositionalLight ON
//EngineStart();
//Sensor();
if (p == 0){
   EngineStart();
   TurnRight();
   delay(2000); //Waiting 2sec
}

if (p == 1){  
   TurnLeft();
   EngineRevers();
delay(2000); // Waiting 2sec
}

EngineStart();
delay(5000); //Waiting 5sec
digitalWrite(positionalLightPin, LOW); //PositionalLight OFF

p++;

Serial.println(p);
// return -1; // zakończenie programu  
}
void EngineStart(){

Serial.println("Front");

digitalWrite(6, LOW); //Engine - sales in left
digitalWrite(7, HIGH);

for(int i = 100; i <= 255; i++){
analogWrite(5, i); //Low-High (0 - 255) speed Engine
//Serial.println(i);
delay(50); // Waiting 5 sek.
}
}

void EngineRevers(){
  
Serial.println("Revers");
  
digitalWrite(6, HIGH); //Engine - sales in right
digitalWrite(7, LOW);
digitalWrite(4, HIGH); //ReversLight ON
for(int i = 50; i <=100; i++){
analogWrite(5, i); //Low-High (0 - 255) speed Engine
//Serial.println(i);
delay(50); // Waiting 3sek.
       digitalWrite(4, LOW); //ReverseLight OFF
}
}

void TurnLeft(){

Serial.println("Left");

analogWrite(8, 255); // MAX turn left
digitalWrite(9, LOW); //Control - left
digitalWrite(10, HIGH);
digitalWrite(1, HIGH); //blinkierLeft
delay(500);
digitalWrite(1, LOW);
delay(500);
}

void TurnRight(){
  
Serial.println("Right");
  
analogWrite(8, 255); // MAX turn Right
digitalWrite(9, HIGH); //Control - Right
digitalWrite(10, LOW);
digitalWrite(2, HIGH); //blinkierRight
delay(500);
digitalWrite(2, LOW);
delay(500);
}
void Sensor(){
digitalWrite(trigPin, HIGH);
delay(10);
digitalWrite(trigPin, LOW);
int distance = pulseIn(echoPin, HIGH);
         dis = distance/58; //obliczenie odległosci w CM
         Serial.println(dis);
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#3
Czy jakby autko stoi trupem ? Sprawdź wynik tego inita p jaki masz na starcie


@JasQ
Właśnie dopieszczam how to topics, wyśle na godzinach.
Pomogłem? Dodaj punkt reputacji Smile
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości