• 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
Dziwny problem z timerem przy pomiarze prędkości
#1
Temat przeniosłem z działu "Instalacja i rozwiązywanie problemów", gdyż z początku myślałem że nie jest on spowodowany problemem w kodzie. 

A więc tworze autonomicznego robota składającego się z:
- dwóch czujników ultradźwiękowych
- dwóch czujników szczelinowych
- dwóch silników DC
- modułu kart mikro SD


Kod mojego programu:
https://pastebin.com/NgUy9jJu

Problem jest z funkcją timera która służy mi do obliczania prędkości obrotu kół robota
Kod:
void setup() {

Serial.begin(9600);

//Ustawienie timera
Timer1.initialize(1000000); // ustawienie timera na sekunde
//zwieksz counter1 gdy pin predkosciomieza jest na Hig
attachInterrupt(digitalPinToInterrupt (motor_A), ISR_count_A, RISING);
//zwieksz counter2 gdy pin predkosciomieza jest na High
attachInterrupt(digitalPinToInterrupt (motor_B), ISR_count_B, RISING);
}

void ISR_timerone(){
  Timer1.detachInterrupt(); //Stop timera
  
  Serial.print("Motor1 Speed: ");
  float rotation_A = (counter_A / diskslots) * 60.00; //obliczenie obrotow na minute (RPM) dla motor1
  Serial.print(RMPtoCmS(rotation_A));
  Serial.print(" Cm/s - ");
  counter_A = 0;

  Serial.print("Motor2 Speed: ");
  float rotation_B = (counter_B / diskslots) * 60.00; //obliczenie obrotow na minute (RPM) dla motor2
  Serial.print(RMPtoCmS(rotation_B));
  Serial.println(" Cm/s");
  counter_B = 0;

 float srednia_predkosc = (RMPtoCmS(rotation_A) + RMPtoCmS(rotation_B)) /2;

//zapisywanie informacji o prędkości na karcie SD
 myFile = SD.open("DaneMapy.txt", FILE_WRITE);
 if (myFile) {
  Serial.println("Writing to file...");
    myFile.print("Motor1: ");
    myFile.print(RMPtoCmS(rotation_A));
    myFile.print("Motor2: ");
    myFile.print(RMPtoCmS(rotation_B));
    myFile.print(" Średnia prędkość: ");
    myFile.print(srednia_predkosc);
    myFile.close();
    Serial.println("Done.");
   }

 Timer1.attachInterrupt(ISR_timerone);
}
Gdy funkcja jest wywoływana w robocie działa tylko jeden silnik i przy zewnętrznym zasilaniu informacje nie zgrywają się na kartę SD (przy zasilaniu USB informacje się zgrywają).

Natomiast gdy funkcja timera nie jest uruchamiana robot jeździ dobrze.
Zaznaczę również że funkcja timera nie działa nawet gdy nie drukuje w niej informacji do karty SD.
W załączniku schemat (przepraszam że tak mało czytelny ale jestem początkujący), oraz zdjęcia robota.


Załączone pliki Miniatury
           
 
Odpowiedź
  


Wiadomości w tym wątku
Dziwny problem z timerem przy pomiarze prędkości - przez johnyNapalm - 14-01-2019, 18:36

Skocz do:


Przeglądający: 1 gości