Skocz do zawartości

other019

Użytkownicy
  • Zawartość

    9
  • Rejestracja

  • Ostatnio

Wszystko napisane przez other019

  1. other019

    CybAiRBot 2013

    Myszy były wgl chyba ze 4
  2. other019

    Dobry darmowy program do nagrywania pulpitu z dzwiekiem.

    http://obsproject.com/, jest coś takiego, można streamować, a można do pliku, tylko pamietaj, żeby zapisywać w istniejącym katalogu, bo inaczej nie zapisze (taki bug ).
  3. Gratulacje, za pierwsze miejesce od widzów na CybAIRbocie we Freestylu.
  4. other019

    CybAiRBot 2013

    Cześć, chciałbym się przygotować do startu w zawodach za jakiś czas. Czy możliwe by było, żebym jako zwykły widz odwiedził strefę serwisową, by móc lepiej zobaczyć co mnie czeka? Pozdrawiam other019
  5. Tak ale trzeba dać jakieś opóźnienie, żeby nie liczył podwójnie jednego wcisnięcia. Można oczywiście zrobić to inaczej np tak: char flags; // ostatni bit znaczy wcisniety if (PINC & 0x01) { flags & 0x01; //ustawia flagę wscisniętego przycisku } if(flags & 0x01) { if(!PINC & 0x01) //dopiero gdy przycisk jest puszczony zeruję flagę i inkrementuję liczbę... { flags | 0x01; n++ } } Ale to tylko taka nieprzemyślana koncepcja na szybko XD
  6. Co do drgania styków, moim zdaniem nie ma się czym przejmować, bo one same z siebie nie drgają, tylko przy wciśnięciu następuje kilkakrotne złączenie i rozłączenie i właśnie po to jest to 200 ms, żeby styki się uspokoiły. Oczywiście ten czas może być krótszy, jednak 200ms to wystarczająco dużo by wcisnąć i puścić. Można by na końcu whila dać jeszcze jakieś opóźnienie, żeby nie było tak, że user trzyma przycisk przez jakiś czas pętla wykonuje iterację, zmienia się liczba, program znowu sprawdza warunek już dodaje, leci te 200msm użytkownik puszcza przycisk, a liczba "sama" zwiększa się. Co do podłączenia, musimy wiedzieć jaki masz wyświetlacz czy jest to wspólna anoda czy katoda. Wtedy musisz sobie dopasować to co masz pod DDRD i chyba zanegować te define co zrobiłem, ale palca sobie za to uciąć nie dam. Przyciski łączysz z ziemią do C0 i C1. A wyświetlacz tak jak na "obrazku" w kodzie, sugerowałbym jakieś rezystory, lecz atmega raczej Ci go nie zniszczy, gdyż ma niską wydajność prądową. Więc po tym wszystkim co opisałem kod wygląda w następujący sposób: /* 0 = 1| |5 =----- 6 2| |4 = .-----7 3 */ #define DIS0 0x3F // bo binarnie 0011 1111 #define DIS1 0x30 // bo binarnie 0011 0000 #define DIS2 0x6D // bo binarnie 0110 1101 #define DIS3 0x79 // bo binarnie 0111 1001 #define DIS4 0x72 // bo binarnie 0111 0010 #define DIS5 0x5D // bo binarnie 0101 1101 #define DIS6 0x5F // bo binarnie 0101 1111 #define DIS7 0x71 // bo binarnie 0111 0001 #define DIS8 0x7F // bo binarnie 0111 1111 #define DIS9 0x7B // bo binarnie 0111 1011 //pewnie tu coś skopałem ale to sobie poprawisz :D int main() { int n=0; DDRD = 0xFF; //Zależnie od tego jakim wyświetlaczem dysponujesz PORTD = 0x00; //do c podłaczysz przyciski, które podciągniesz progamowo do ziemi DDRC = 0x00; PORTC = 0x03; while(1) { if(PINC & 0x01) //tutaj sprawdzamy pierwszy bit z portu C { _delay_ms(200); //czekamy, aż drgania styków ustaną, zobacz co będzie jak to zakomentujesz n++; } if(PINC & 0x02) { _delay_ms(200); //czekamy, aż drgania styków ustaną, zobacz co będzie jak to zakomentujesz n--; } switch(n&10) //bo liczby większej od 10 i tak nie wyświetlimy { case 0: PORTD = DIS0; break; case 1: PORTD = DIS1; break; case 2: PORTD = DIS2; break; case 3: PORTD = DIS3; break; case 4: PORTD = DIS4; break; case 5: PORTD = DIS5; break; case 6: PORTD = DIS6; break; case 7: PORTD = DIS7; break; case 8: PORTD = DIS8; break; case 9: PORTD = DIS9; break; default: PORTD = 0x00; break; } _delay_ms(200); } return 0; }
  7. Kurcze racja nie przemyślałem tego. Chociaż, nie jest dobrze. Wciśnie raz, poczeka aż styki przestaną drgać, zmniejszy. Gdyby tego nie było, to leciał by i na jednych drganiach wykonało by się kilka iteracji.
  8. To wydaję się proste. Jeśli ma realizować tylko to to nie musisz wykorzystywać nawet przerwań tylko porgramowe delay_ms(); (jeśli piszesz w C ). Sprawdzasz kl robisz delay_ms(200); sprawdzasz drugi to samo opóźnienie potem robisz funkcje odpowiedzialną za wyświetlanie, i w zależności od tego, który jest wcisniety robisz n-- lub n++. Będzie to switch, który będzie zależny od n. W zależności od tego jaką wartość ma n, ustawia on stan portu. Jak na mnie wyglądało by to tak mnw (dawno nie pisałem więc sorka za ewentualne błędy ) /* 0 = 1| |5 =----- 6 2| |4 = .-----7 3 */ #define DIS0 0x3F // bo binarnie 0011 1111 #define DIS1 0x30 // bo binarnie 0011 0000 #define DIS2 0x6D // bo binarnie 0110 1101 #define DIS3 0x79 // bo binarnie 0111 1001 #define DIS4 0x72 // bo binarnie 0111 0010 #define DIS5 0x5D // bo binarnie 0101 1101 #define DIS6 0x5F // bo binarnie 0101 1111 #define DIS7 0x71 // bo binarnie 0111 0001 #define DIS8 0x7F // bo binarnie 0111 1111 #define DIS9 0x7B // bo binarnie 0111 1011 //pewnie tu coś skopałem ale to sobie poprawisz :D int main() { int n=0; DDRD = 0xFF; //Zależnie od tego jakim wyświetlaczem dysponujesz PORTD = 0x00; //do c podłaczysz przyciski, które podciągniesz progamowo do ziemi DDRC = 0x00; PORTC = 0x03; while(1) { if(PINC & 0x01) //tutaj sprawdzamy pierwszy bit z portu C { _delay_ms(200); //czekamy, aż drgania styków ustaną, zobacz co będzie jak to zakomentujesz n++; } if(PINC & 0x02) { _delay_ms(200); //czekamy, aż drgania styków ustaną, zobacz co będzie jak to zakomentujesz n--; } switch(n&10) //bo liczby większej od 10 i tak nie wyświetlimy { case 0: PORTD = DIS0; break; case 1: PORTD = DIS1; break; case 2: PORTD = DIS2; break; case 3: PORTD = DIS3; break; case 4: PORTD = DIS4; break; case 5: PORTD = DIS5; break; case 6: PORTD = DIS6; break; case 7: PORTD = DIS7; break; case 8: PORTD = DIS8; break; case 9: PORTD = DIS9; break; default: PORTD = 0x00; break; } } return 0; }
×