Zrobilem to tak jak ponizej,
Program steruje moim prototypowym rowerem elektrycznym.
Adoptowalem to od kolegi z postu powyzej , troszke pozmienialem i kompiluje sie
tam jak jedynke zmienie na 0 to czeka na sygnal z krecenia, jak wpisze jeden to kreci sie od razu.
WEJSCIE HALOTRONU TO hal input
narazie steruje tym wyjscie hamout.
dlugosc jedynki halotronu to mniej wiecej 1/10 okresu
#define capin 25
#define lion 26
#define zas 33
#define lad 23
int hamin = 16; // LED an pin 13
int hamout = 32; // Taster an Digital-Pin 7
int hamuj = 0; // variable um den Pinstatus zu speichern
#define capout 22
#define hal 15
#define go 18
int stanAktualnyhal, stanPoprzednihal, taktout, golow, gohigh ;
uint32_t teraz, poprzednio, roznica;
void setup()
{
pinMode(lion, INPUT) ;
pinMode(zas, OUTPUT) ;
pinMode(lad, OUTPUT) ;
pinMode(hamout, OUTPUT);
pinMode(hamin, INPUT);
pinMode(capin, INPUT) ;
pinMode (capout, OUTPUT);
pinMode(hal, INPUT) ;
pinMode(go, OUTPUT);
//zmienna stanAktualnyhal ma poczatkowa wartosc 0, sprawdzdamy wstepnie co jest na pinie
stanAktualnyhal= digitalRead(hal);
stanPoprzednihal=stanAktualnyhal;
}
void loop() {
teraz=millis();
//po wejsciu w loop patrzymy na pierwsza zmiane
stanAktualnyhal= digitalRead(hal);
if(stanAktualnyhal == stanPoprzednihal)
{
// stan sie nie zmienil, jesli to potrwa powyzej 100ms to mamy <10Hz
if(( teraz-poprzednio)>100 );
taktout = 0;
}
else
{
if(( teraz-poprzednio)<=100);
taktout = 1;
//stan sie zmienil, zapiszmy czas
poprzednio=teraz;
}
delay(100);
//
if
(analogRead(lion) < 1750) //niski poziom +++++acu
{digitalWrite(zas, LOW); } //zasilanie wylacz
if
(analogRead(lion) < 2200)
{ digitalWrite(lad, LOW) ; } //ladowanie wlacz
delay(10);
if
(analogRead(lion) > 2100) //minimalny poziom acu
{ digitalWrite(zas, HIGH) ; } //zasilanie wlacz
if
(analogRead(lion) > 2500) // wysoki poziom Accu
{digitalWrite(lad, HIGH) ; } //Ladowanie wylacz (HIGH)
if
(analogRead(capin) > 3500) // wysoki poziom condnsatora
{digitalWrite(capout, HIGH) ; } //Ladowanie condensatora wlacz (HIGH)
if
(analogRead(capin) < 2300) // niski poziom condnsatora
{digitalWrite(capout, LOW) ; } //Ladowanie condensatora wylacz (LOW)
hamuj = digitalRead(hamin);
if (taktout = 0) // TO TUTAJ TO 0 ALBO 1 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
{ digitalWrite (hamout, HIGH); }
else
{ digitalWrite (hamout, LOW);}
Prosze o porade
}