31-03-2019, 10:36
Coś mi na esp32 przerywania nie wychodzą. Bo głównym problemem jest to ze pętla tylko raz ma się wykonać i dać wynik. Wiec włączanie wyłączanie nie mogę jakoś ogarnąć. A z drugiej strony i tak bym musiał zamrozić procesor bo pętla jak wyżej pisałem wykonuje się tylko raz. Wymysliłem tez taki kod to tylko przykład do mojego docelowego paragramu ważne jest tylko viod licznik() fakt że zamraża to procesor na 1s ale mam jeszcze drugi przykład gdzie odczyt stanu pinu jest w "if" nie while wtedy procesor nie jest zamrożony .
Działa w sumie poprawnie od 0 do 150kHz czy to ma jakieś wady??
Kod:
int pinLicznik = 34;
boolean stanPin = false;
int ostatni_stan_Pin = HIGH;
unsigned long Tims_ = millis();
unsigned long iloscImpulsow = 0;
boolean wynik = false;
void setup() {
Serial.begin(9600);
pinMode(pinLicznik, INPUT);
}
void loop() {
licznik();
if (wynik== true){
Serial.println(iloscImpulsow);
wynik=false;
}
}
void licznik(){
iloscImpulsow = 0;
Tims_=millis();
while (millis() - Tims_ <= 1000){
int odczytPin = digitalRead(pinLicznik);
if (odczytPin != ostatni_stan_Pin){
if ( odczytPin == LOW && stanPin == true ){
iloscImpulsow++;
stanPin=false;
}
if ( odczytPin == HIGH && stanPin == false){
stanPin= true;
}
}
ostatni_stan_Pin=odczytPin;
}
wynik = true;
}
Działa w sumie poprawnie od 0 do 150kHz czy to ma jakieś wady??
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.