15-04-2018, 17:25
(Ten post był ostatnio modyfikowany: 15-04-2018, 19:47 przez ZielonyZeZlosci.)
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:
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);
}
}