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

Arduino Uno - jedna z nowszych płytek z serii Arduino.

emer2 12 Paź 2010 10:16 16339 4
REKLAMA
  • Arduino Uno - jedna z nowszych płytek z serii Arduino.

    Arduino Uno to kolejna wersja platformy z serii Arduino. Jest to płytka uruchomieniowa z mikrokontrolerem ATmega 328. Posiada ona 14 cyfrowych wejść/wyjść, z czego 6 może zostać użyte jako wyjścia PWM, 6 wejść analogowych, a także kwarc o częstotliwości 16MHz. Dodatkowo zamontowane zostało złącze USB, złącze zasilające, złącze ICSP, a także przycisk RESET. Płytka ta zawiera wszystko co potrzebne do uruchomienia mikrokontrolera. Połączenie z komputerem odbywa się poprzez przewód USB. Układ zasilić można z użyciem zasilacza lub baterii.

    Arduino Uno różni się od poprzednich wersji tym, że nie używa FTDI USB. Chip ten został zastąpiony mikrokontrolerem ATmega8U2 zaprogramowanym jako konwerter USB. Oznaczenie "Uno" oznacza w języku włoskim "jeden" i oznacza nadchodzące Arduino 1.0. Arduino Uno i wersja 1.0 będą wersjami platform Arduino.

    Specyfikacja:
    Mikrokontroler ATmega328
    Napięcie zasilania 5V
    Napięcie wejściowe 7-12V
    Maks. napięcie wejściowe do 20V
    Cyfrowe linie I/O 14 ( w tym 6 PWM)
    Analogowe wejścia 6
    Prąd dla linii I/O 40mA
    Pamięć Flash 32kB
    SRAM 2kB
    EEPROM 1kB
    Częstotliwość taktowania 16MHz

    Płytka Arduino Uno może zostać zasilone ze złącza USB albo z zewnętrznego zasilacza. Źródło jest wybierane automatycznie. Zewnętrznym źródłem zasilającym może być także bateria.

    Płytka Arduino Uno Deska może pracować przy zewnętrznym napięciu od 6 do 20V. Jeżeli napięcie bd niższe niż 7V to na wyjściach 5V może pojawić się niższe napięcie. Jeżeli napięcie przekroczy wartość 12V to regulator może się grzać lub zostać uszkodzony, dlatego zalecana jest praca przy napięciu od 7 do 12V.

    Poniżej schemat Arduino Uno pochodzący ze strony źródłowej:
    Arduino Uno - jedna z nowszych płytek z serii Arduino.

    Link do strony źródłowej:
    Strona źródłowa

    Fajne? Ranking DIY
    O autorze
    emer2
    Tłumacz Redaktor
    Offline 
    Specjalizuje się w: projektowanie i montaż elektroniki
    emer2 napisał 434 postów o ocenie 56. Mieszka w mieście Warszawa. Jest z nami od 2008 roku.
  • REKLAMA
  • #2 10460701
    luki964
    Poziom 10  
    Mam pytanie odnośnie programowania...
    Nie ma dokładnej instrukcji komend po polsku i miałbym kilka pytań.
    Jestem uczniem gimnazjum i biorę udział w pewnym projekcie... Zajęcia odbywają się raz w tygodniu i bierze w nich udział 15 osób, więc rzadko kiedy mam szanse porozmawiać z instruktorem. No dobra wydaje mi się ze ogaranołem podstawy obsługi więc wziąłem się za jakiś bardziej skomplikowany program niż wyświetlanie imienia i nazwiska na wyświetlaczu lcd. Chciałbym zrobić coś w stylu "elektronicznego piórnika" w którym na wyświetlaczy zamontowanym z jednej strony wyświetlałbym godzinę ,lekcje, ściągi itp.
    Jednak cała trudność polega na tym ze nie mogę poradzić sobie z komendą "if".
    Chce za pomocą przycisków (buttonów) sterować kursorem i np. przesuwać poszczególne części MENU.
    Zaraz wyjaśnię dokładnie, ale najpierw dodam ścieżkę programu.


    #include <LiquidCrystal.h>
    int buton1 = 4;
    int buton2 = 3;
    int dioda = 13;
    LiquidCrystal lcd(7,8,9,10,11,12);

    void setup()
    {
    pinMode(dioda,OUTPUT);
    digitalWrite(dioda,LOW);
    pinMode(buton1,INPUT);
    digitalWrite(buton1,HIGH);
    pinMode(buton2,INPUT);
    digitalWrite(buton2,HIGH);
    lcd.begin(16,2);
    }
    void loop()
    {
    lcd.blink();
    int x=0;
    int y=0;
    if(digitalRead(buton1)==LOW)
    {
    x++;
    }
    lcd.setCursor(x,0);
    }

    Chodzi o to że do x button dodaje liczbę tylko podczas wciśnięcia, po puszczeniu x dalej równe jest 0, a ja docelowa chciałbym dodać jeden x co każde wciśnięcie buttona.

    Z góry dziękuje za pomoc.
  • REKLAMA
  • #3 10916378
    True_Brujah
    Poziom 12  
    Jak dla mnie to program powinien wyglądać tak:

    #include <LiquidCrystal.h>
    int buton1 = 4;
    int buton2 = 3;
    int dioda = 13;
    LiquidCrystal lcd(7,8,9,10,11,12);

    void setup()
    {
    pinMode(dioda,OUTPUT);
    digitalWrite(dioda,LOW);
    pinMode(buton1,INPUT);
    digitalWrite(buton1,HIGH);
    pinMode(buton2,INPUT);
    digitalWrite(buton2,HIGH);
    lcd.begin(16,2);
    }
    int x=0;
    int y=0;

    void loop()
    {
    lcd.blink();
    if(digitalRead(buton1)==LOW)
    {
    x++;
    }
    lcd.setCursor(x,0);
    }

    Jeżeli definiujesz zmienne w pętli i podstawiasz "wartość" to za każdym wykonaniem pętli resetujesz zmienną do podanej wartości. W twoim przypadku "0".
  • REKLAMA
  • #4 11062317
    kr0nos
    Poziom 10  
    Stare, ale może komuś się przyda.
    Po pierwsze, w celu niewielkiego (ale zawsze) oszczędzenia pamięci, zamiast deklarować zmienne:
    int buton1 = 4;
    int buton2 = 3;
    int dioda = 13;
    które przecież w trakcie działania nie będą zmieniane można zrobić to tak:
    #define button1 4
    #define button2 3
    #define dioda 13
    w tym przypadku większego zysku nie ma, ale może warto sobie taki nawyk wyrobić (?).

    Po drugie można użyć słowa kluczowego 'static' przy definiowaniu x oraz y. Spowoduje to, że przy kolejnych wykonaniach pętli zmienne nie będą na nowo inicjowane (co miało miejsce w pierwszej wersji programu).
    Dodatkowo obsługa guzika też nie jest poprawna.
    Wychodzi na to, że za każdym razem, kiedy wykona się pętla, a guzik nie będzie wciśnięty do x dodane zostanie 1, więc 'pozycje w menu' będą przeskakiwać same.
    Wypadałoby zastosować dodatkową zmienną, która będzie pamiętać poprzedni stan guzika i dopiero jeżeli jest LOW, a poprzedni był HIGH (przycisk na pewno daje stan LOW po jego naciśnięciu?) to dopiero x jest modyfikowane, ale skoro ta wersja działa jak powinna, to nie widzę powodu, aby to zmieniać :).

    Tak więc program bym widział tak:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    P.S. jak można robić w kodzie wcięcia??
  • #5 15169637
    Kamil071
    Poziom 2  
    luki964 napisał:
    Mam pytanie odnośnie programowania...
    Nie ma dokładnej instrukcji komend po polsku i miałbym kilka pytań.
    Jestem uczniem gimnazjum i biorę udział w pewnym projekcie... Zajęcia odbywają się raz w tygodniu i bierze w nich udział 15 osób, więc rzadko kiedy mam szanse porozmawiać z instruktorem. No dobra wydaje mi się ze ogaranołem podstawy obsługi więc wziąłem się za jakiś bardziej skomplikowany program niż wyświetlanie imienia i nazwiska na wyświetlaczu lcd. Chciałbym zrobić coś w stylu "elektronicznego piórnika" w którym na wyświetlaczy zamontowanym z jednej strony wyświetlałbym godzinę ,lekcje, ściągi itp.
    Jednak cała trudność polega na tym ze nie mogę poradzić sobie z komendą "if".
    Chce za pomocą przycisków (buttonów) sterować kursorem i np. przesuwać poszczególne części MENU.
    Zaraz wyjaśnię dokładnie, ale najpierw dodam ścieżkę programu.



    #include <LiquidCrystal.h>
    int buton1 = 4;
    int buton2 = 3;
    int dioda = 13;
    LiquidCrystal lcd(7,8,9,10,11,12);

    void setup()
    {
    pinMode(dioda,OUTPUT);
    digitalWrite(dioda,LOW);
    pinMode(buton1,INPUT);
    digitalWrite(buton1,HIGH);
    pinMode(buton2,INPUT);
    digitalWrite(buton2,HIGH);
    lcd.begin(16,2);
    }
    void loop()
    {
    lcd.blink();
    int x=0;
    int y=0;
    if(digitalRead(buton1)==LOW)
    {
    x++;
    }
    lcd.setCursor(x,0);
    }

    Chodzi o to że do x button dodaje liczbę tylko podczas wciśnięcia, po puszczeniu x dalej równe jest 0, a ja docelowa chciałbym dodać jeden x co każde wciśnięcie buttona.

    Z góry dziękuje za pomoc.




    Daj " int x=0;
    int y=0;" na sam początek to powinno pomóc

    Dodano po 0 [sekundy]:

    luki964 napisał:
    Mam pytanie odnośnie programowania...
    Nie ma dokładnej instrukcji komend po polsku i miałbym kilka pytań.
    Jestem uczniem gimnazjum i biorę udział w pewnym projekcie... Zajęcia odbywają się raz w tygodniu i bierze w nich udział 15 osób, więc rzadko kiedy mam szanse porozmawiać z instruktorem. No dobra wydaje mi się ze ogaranołem podstawy obsługi więc wziąłem się za jakiś bardziej skomplikowany program niż wyświetlanie imienia i nazwiska na wyświetlaczu lcd. Chciałbym zrobić coś w stylu "elektronicznego piórnika" w którym na wyświetlaczy zamontowanym z jednej strony wyświetlałbym godzinę ,lekcje, ściągi itp.
    Jednak cała trudność polega na tym ze nie mogę poradzić sobie z komendą "if".
    Chce za pomocą przycisków (buttonów) sterować kursorem i np. przesuwać poszczególne części MENU.
    Zaraz wyjaśnię dokładnie, ale najpierw dodam ścieżkę programu.



    #include <LiquidCrystal.h>
    int buton1 = 4;
    int buton2 = 3;
    int dioda = 13;
    LiquidCrystal lcd(7,8,9,10,11,12);

    void setup()
    {
    pinMode(dioda,OUTPUT);
    digitalWrite(dioda,LOW);
    pinMode(buton1,INPUT);
    digitalWrite(buton1,HIGH);
    pinMode(buton2,INPUT);
    digitalWrite(buton2,HIGH);
    lcd.begin(16,2);
    }
    void loop()
    {
    lcd.blink();
    int x=0;
    int y=0;
    if(digitalRead(buton1)==LOW)
    {
    x++;
    }
    lcd.setCursor(x,0);
    }

    Chodzi o to że do x button dodaje liczbę tylko podczas wciśnięcia, po puszczeniu x dalej równe jest 0, a ja docelowa chciałbym dodać jeden x co każde wciśnięcie buttona.

    Z góry dziękuje za pomoc.




    Daj " int x=0;
    int y=0;" na sam początek to powinno pomóc
REKLAMA