• 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
problemy z odczytem prędkości w pełnym programie
#1
Witam.
Mam pewien problem z programem. Źle odczytuje mi prędkość. Jeżeli mam sam odczyt prędkości wszytko działa jak powinno. Może przy niskich prędkościach dziwne rzeczy się dzieją natomiast w pełnym programie dzieje się coś takiego jak na zdjęciu. Ma ktoś jakiś pomysł jak to opanować. 
Kod programu wygląda tak:

Kod:
//Hall
const int pinHall = 8;
int stanHall = 0;
int licznik = 0;
long pauza = 0;
bool wyjscie = 0;
int PopStanHall = 0;
//Aku
int odczytanyAku = 0;
//potencjometr
int potencjometr = 0;
//Predkosc
long previous, impulses, time;
float circuit=2.15;
float predkosc;
//Ustawienie biegu
int bieg = 0;
int biegbierzacy = 0;
//Sterowanie silnikiem
const int pinKroku = 3;
const int pinKierunku = 4;
int czas = 2500;
int kroki = 200;

void setup(){
 Serial.begin(9600);
 //hall
 pinMode(pinHall, INPUT);
 digitalWrite(pinHall, HIGH);
 PopStanHall = digitalRead(pinHall);
 pauza = millis();
 
 //Aku
 pinMode(13, OUTPUT);
 //Predkosc
 pinMode (A5, INPUT);
 //Ustawienie biegu
 //Sterowanie silnikiem
  pinMode(pinKroku,OUTPUT);
 pinMode(pinKierunku,OUTPUT);
 
 }

   
void loop(){
//Hall

   stanHall = digitalRead(pinHall);
if(stanHall!= PopStanHall){
   licznik++;
   pauza = millis();
   PopStanHall=stanHall;}
   
if (licznik > 8){
   wyjscie=1;
 
   pauza = millis();
   licznik=0;}
   
else if(millis()-pauza>4000){
   wyjscie=0;
 
   pauza= millis();}
  wyjscie=1;
//Aku
 odczytanyAku = analogRead(A0);
if(odczytanyAku<835){

     digitalWrite(1, HIGH);
    }
else digitalWrite(1, LOW);
//potencjometr
potencjometr = analogRead(A1);
//Serial.println("potencjometr");
//Serial.println(potencjometr);
//Predkosc

     if(analogRead(A5)>=300){
   
     //count turn time
   time=(millis()-previous);
   //count speed
   predkosc=(circuit / time)*3600.0;
   previous=millis();
   Serial.println("predkosc");
   Serial.println(predkosc);
   delay(100);}
//Ustawienie biegu
if(predkosc >=0 and predkosc <=5)
   {bieg = 1;}
else if (predkosc > 5 and predkosc <=10)
   {bieg = 2;}
else if (predkosc > 10 and predkosc <=20)
   {bieg = 3;}
else if (predkosc > 20 and predkosc <=24)
   {bieg = 4;}
else if (predkosc > 24 and predkosc <=27)
   {bieg = 5;}
else if (predkosc > 27 and predkosc <=30)
   {bieg = 6;}
else if (predkosc > 30 and predkosc <=36)
   {bieg = 7;}
else if (predkosc > 36)
   {bieg = 8;}
//Serial.println("bieg");
//Serial.println(bieg);
//delay (100);
//W gore
if (biegbierzacy > bieg and potencjometr > 75 and wyjscie == 1)
{   digitalWrite(pinKierunku,LOW);
 for(int x = 0; x < kroki; x++) {
   digitalWrite(pinKroku,HIGH);
   delayMicroseconds(czas);
   digitalWrite(pinKroku,LOW);
   delayMicroseconds(czas);}
   biegbierzacy = bieg;
   delay(500);
   }
//W dol
if (biegbierzacy < bieg and potencjometr < 360 and wyjscie == 1)
{   digitalWrite(pinKierunku,HIGH);
 for(int x = 0; x < kroki; x++) {
   digitalWrite(pinKroku,HIGH);
   delayMicroseconds(czas);
   digitalWrite(pinKroku,LOW);
   delayMicroseconds(czas);}
   biegbierzacy = bieg;
   delay(500);
   
   }
 
 }    
 


Załączone pliki Miniatury
   
 
Odpowiedź
#2
Dodaj w losowych miejscach ze 4 razy po delay(500) i zobacz czy będzie jakaś różnica.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości