Skocz do zawartości

Nietypowe deklaracje zmiennych


Pomocna odpowiedź

(edytowany)

Podstawy się kłaniają. Operacje bitowe sam sobie sprawdzisz, w arduino do majtania gpio są wbudowane funkcje, wymyślania koła cd...

gpiowrite(LED_GPIO,!gpioread(LED_GPIO));

Koledzy obeznani w funkcjach wbudowanych poprawią na poprawne nazwy funkcji. Ja się na arduino nie znam

EDIT 

digitalWrite() digitalRead();

Edytowano przez _LM_
Gość
21 minut temu, _LM_ napisał:

Operacje bitowe sam sobie sprawdzisz, w arduino do majtania gpio są wbudowane funkcje

Aż to wypróbuję. Myślałem, że jak tak to zrobię, to przycisk wypadnie losowo w zależności jak tam pętla wypadnie. W kodzie leci to losowo, dlatego rozpisałem funkcję przerzutnika . Zobaczę czy faktycznie na portach stan się utrzyma.

Gość

@_LM_

Jeżeli o to chodziło;

void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(11, OUTPUT);

}

void loop() {

digitalWrite(11, !digitalRead(2));

}

To taka składnia nie działa podobnie jak i w kodzie. Mam tylko odwrócony logicznie status wejścia, co jest normalne. Natomiast jak podstawisz 11 zamiast 2, to się robi generator nieskończony. 

Gość

@_LM_ Tak wiem, ponieważ temat wszędzie jest w koło maglowany. Natomiast celem ćwiczenia było samodzielne napisanie timera który zarówno możesz wykorzystać do gaszenia zjawiska szumów mikrostykowych, jak również wpisując inną wartość np, nie 50ms a 60000 timer odliczający czas działania lampy na dworze. No i funkcje działają poprawnie, podobnie jak działa funkcja przerzutnika T. A że kod wyszedł jak wyszedł? Ja też na początku kombinowałem tak jak Ty z zatrzaskiwaniem stanów logicznych na zmiennych, czy też wyjściach, ale nie wszystko po za przerzutnikiem RS zrobisz w taki prosty sposób. Bynajmniej nie z wiedzą którą aktualnie posiadam zakładając iż są tu dostępne jakieś inne triki jakich nie znam z PLC. 

26 minut temu, rafal220 napisał:

Aż to wypróbuję. 

Rafał czyli mówisz prawdę, przerobiłeś forbotowy kurs arduino tylko nie po kolei. Chyba opuściłeś drugi odcinek. Ten o podstawach.

Gość
(edytowany)
6 minut temu, SOYER napisał:

Chyba opuściłeś drugi odcinek

Pierwszy i trzeci mam zgrany na dysk. A drugiego faktycznie brakuje. Prawdopodobnie nie wykonywałem typowo z nim związanych zadań. Możliwe że przerabiałem na innym powiązanym przypadku.  

P.S.

Jednak czytałem. I teraz pytanie. Możesz powiedzieć gdzie tam było coś o przerzutniku T ? Ja wiem że można to zrobić poprzez funkcje delay, ale nie o to się rozchodzi... 

Edytowano przez rafal220
7 minut temu, rafal220 napisał:

 Ja wiem że można to zrobić poprzez funkcje delay, ale nie o to się rozchodzi... 

Ale od tego masz millis()...przecież nie potrzebujesz uruchamiać funkcji dokładnie co do mikrosekundy 

Gość
18 minut temu, farmaceuta napisał:

Ale od tego masz millis()...przecież nie potrzebujesz uruchamiać funkcji dokładnie co do mikrosekundy 

No ale przecież wszystko ładnie rozpisałem kilka postów do tyłu na millis. wszystkie podstawowe timery. (4 Rodzaje) Natomiast co do czysto rozumianego przerzutnika T nie potrzebujesz żadnych timerów o ile nie zamierzasz łączyć logiki bezpośrednio z przyciskiem. Przerzutnik T też rozpisałem. Kolega @SOYER proponuje lekcję #2, kiedy to ja już dawno rozwiązałem. Teraz jest dyskusja odnośnie tego jak uprościć ten kawałek kodu na samych odwołaniach do portów 1/0

/* flip-flop T */
uint8_t flipflop_T(uint8_t cl_T){

static uint8_t d1 = 0;
static uint8_t ret = 0; 
 
if (cl_T & d1){ret = !ret;}  // przerzutnik T wyzwalanie H
if (cl_T & 1){d1 = 0;}
else {d1 = 1;}
return ret;  
}
/* flip-flop T */

    

5 godzin temu, rafal220 napisał:

@_LM_

Jeżeli o to chodziło;

void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(11, OUTPUT);

}

void loop() {

digitalWrite(11, !digitalRead(2));

}

To taka składnia nie działa podobnie jak i w kodzie. Mam tylko odwrócony logicznie status wejścia, co jest normalne. Natomiast jak podstawisz 11 zamiast 2, to się robi generator nieskończony. 

bool buttonState = false;
bool ledState = false;

void setup() {
    pinMode(2, INPUT_PULLUP);
    pinMode(11, OUTPUT);
}

void loop() {
    bool currentState = digitalRead(2);
    if (currentState != buttonState) { 
        if (currentState) {
            ledState = !ledState;
            digitalWrite(11, ledState);
            delay(50);
        }
        buttonState = currentState;
    }
}

Pozdrawiam -- Spook.

Gość
(edytowany)

@spook Zrobiłeś trochę podobnie, aczkolwiek Twój kod też jednoznacznie pokazuje, że można by rzec zwykłego przerzutnika T od tak bez funkcji zbytnio nie da się zrobić wyprowadzając wejście na zanegowane wyjście. Sumując klikanie zał/ wył LED nie zrobisz w jednej linijce kodu. Trochę czytałem, i nie jedna poczatkująca osoba na tej funkcji się potknęła.  

P.S.

Szczerze mówiąc gdybym miał wybierać, bardziej wolałbym taką wersję. (Rozpisałem na nowo poprzednią wersję)

bool clip = false;
bool readLed = false;
void setup() {

  pinMode(2, INPUT_PULLUP);
  pinMode(11, OUTPUT);
}

void loop() {

  bool button_1 = digitalRead(2);

  if (button_1 == 0 && clip == 0) {
    clip = 1;
    readLed = !readLed;
    digitalWrite(11, readLed);
  }
  else if (button_1 == 1) {
    clip = 0;
  }

  delay(100);
}

 

Edytowano przez rafal220

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...