logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

jak zgasić drugą diodę podczas świecenia pierwszej?

ifrook 27 Maj 2014 09:25 1623 11
REKLAMA
  • #1 13637704
    ifrook
    Poziom 9  
    Witam, uczę się programować i w ramach ćwiczeń napisałem coś takiego.
    Chciałbym aby po zapaleniu diody1 dało się zmieniać stan diody2, i to działa.
    Problem polega na tym że gdy ustawie diode2 w stan wysoki i zgaszę wtedy diode1 to ta druga dalej świeci. Czyli wiem że muszę dodać funkcje IF , ale cośmi nie wychodzi ;/ Proszę o pomoc, porade


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 13637772
    gaskoin
    Poziom 38  
    ifrook napisał:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    No ale dlaczego ma się gasić skoro makro jest zamieniane na pustkę ? Dopisz gaszenie bitu i tyle.
  • REKLAMA
  • #3 13637933
    ifrook
    Poziom 9  
    Wpisuje
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W tym momencie diody samoczynnie zapalają się i gasną na zmianę, nie mam nad nimi kontroli żadnej
  • REKLAMA
  • #4 13637964
    gaskoin
    Poziom 38  
    No bo PORTC !(1 << PC1) nic nie oznacza.

    1. Musisz mieć operator przypisania PORTC = xxx
    2. ! to negacja logiczna a nie bitowa (czyli !23497092435345 = 0)
    3. ~ to negacja bitowa
    4. Dyrektywy preprocesora używa się trochę inaczej... http://en.wikipedia.org/wiki/C_preprocessor
    5. http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B

    Chcesz zgasić bit pierwszy:

    01011011

    Czyli co musisz zrobić ?
    Zandować go z 11111101

    01011011
    & 11111101
    = 01011001

    -----------------------

    1 << PC1 = 00000010
    ~(1 << PC1) = 11111101

    -----------------------

    Czy już wszystko jasne ?
  • REKLAMA
  • #5 13638015
    ifrook
    Poziom 9  
    hmm dzięki, dość trudne zadanie sobie wymyśliłem chyba :) jestem bliżej ale to jeszcze nie to, mianowicie po dodaniu
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    faktycznie diode2 mogę postawić w stan wysoki po włączeniu diody1 ale straciłem możliwość sterowania stanem diody1 bo ona po nacisnieciu przycisku zapala sie i od razu gaśnie. Teraz to nawet nie mam pomysłu jak powinien wyglądać warunek
  • #6 13638060
    gaskoin
    Poziom 38  
    Bo miałeś zandować portc z wartością ~(1 << PC1) a nie przypisać mu stałą wartość.

    PORTC = PORTC & ~(1 << PC1)

    albo skrótowo PORTC &= ~(1 << PC1), przecież używałeś takich operacji (tylko, że xor)
  • #7 13638136
    ifrook
    Poziom 9  
    PORTC &= ~(1 << PC1) Reakcja jest ta sama, przy właczaniu drugiej diody ta zaraz gaśnie (mimo ze 1wsza jest w stanie wysokim) moze to IF jest nie w tym miejscu??
  • #8 13638274
    Samuraj
    Poziom 35  
    ifrook napisał:
    PORTC &= ~(1 << PC1) Reakcja jest ta sama, przy właczaniu drugiej diody ta zaraz gaśnie (mimo ze 1wsza jest w stanie wysokim) moze to IF jest nie w tym miejscu??


    Pokaż jak zapalasz pierwszą i jak drugą. Teraz pierwszą masz dobrze ale może druga jest źle.
  • #9 13640605
    ifrook
    Poziom 9  
    Samuraj napisał:
    ifrook napisał:
    PORTC &= ~(1 << PC1) Reakcja jest ta sama, przy właczaniu drugiej diody ta zaraz gaśnie (mimo ze 1wsza jest w stanie wysokim) moze to IF jest nie w tym miejscu??


    Pokaż jak zapalasz pierwszą i jak drugą. Teraz pierwszą masz dobrze ale może druga jest źle.


    Przeczytaj mój program:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Z programu wynika że sa dwie diody kazda z nich jest oddzielnie sterowana przyciskami:

    1.dioda led1 po naciśnięciu przycisku k1 wchodzi w stan wysoki, ponowne naciśniecie k1 powoduje stan niski na led1.

    2. dioda led2 po naciśnięciu przycisku k2 wchodzi w stan wysoki, ponowne naciśniecie k2 powoduje stan niski na led2

    3. dodałem if(PINC & LED_PIN1)
    poto żebym uzaleznił diode2 od pierwszej w ten sposób że.
    Gdy dioda1 jest w stanie wysokim moge zmieniać stan diody2 z niskiego na wysoki i odwrotnie.

    4 i właśnie o to teraz pytam chciałbym dopisać coś co spowoduje że po zmianie stanu wysokiego na niski diody pierwszej(led1), dioda druga jeśli była wcześniej w stanie wysokim to zgaśnie.


    dlatego dodałem taką linie ale to niedziała

    #define LED_PIN2OFF PORTC &= ~(LED_PIN2)

    i taka :

    if(PINC & LED_PIN1)
    {
    LED_PIN2OFF

    }

    ale to sprawia że dioda druga zapala sie po naciśnieciu k2 i zaraz gaśnie
  • #10 13649581
    ifrook
    Poziom 9  
    dałem rade teraz działa jak chciałem, niby proste ale ciesze się że sam do tego doszedłem :P

    Mam jeszcze jedno pytanie, co daje mi plik nagłówkowy <util/delay.h> ?

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #12 13655584
    ifrook
    Poziom 9  
    dzięki do zamknięcia:)
REKLAMA