Skocz do zawartości

Jaki jest najlepszy Attiny do wyświetlacza LCD z konwerterem I2C?


BeeKeyPro

Pomocna odpowiedź

@_LM_ Chciałem przełożyć ten oto kod z Arduino na atetiny

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4); //nagłówek dla wyswietlacza lcd i2c


String morse[26] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
"..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};


int kursor=0; //pozycja kursora na LCD
char wybierana = 'A'; //aktualnie wybierana litera (którą zmieniamy przyciskami)
char litera;
String slowo = ""; //słowo do przetłumaczenia, tu dopisujemy kolejne litery
 
void wyswietlWybierana() //funkcja wyświetlająca literę wybieraną
{
  lcd.setCursor(kursor,1);
  lcd.print(wybierana);
}
 
void(* resetKodu) (void) = 0; //funkcja resetująca arduino
 
void setup() //kod zawarty w funkcji setup powtórzy się tylko na początku programu
{
  pinMode(11,OUTPUT);
  pinMode(3,INPUT_PULLUP);
  pinMode(4,INPUT_PULLUP);
  pinMode(5,INPUT_PULLUP);
  
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Wpisz slowo:");
  wyswietlWybierana();
}
 
void loop() //kod zawarty w funkcji loop będzie powtarzał się aż zakończy się program
{
  if(!digitalRead(3)) //naciskamy przycisk litery w górę
  {
    wybierana++;
    
    if(wybierana > 90) //wyjechaliśmy poza alfabet, wracamy na początek
    {
      wybierana = 'A';
    }
    
    wyswietlWybierana();
    while(!digitalRead(3)); //czekamy aż użytkownik puści przycisk
    delay(200);
  }
  
  if(!digitalRead(4)) //naciskamy przycisk litery w dół
  {
    wybierana--;
 
    if(wybierana < 65) //wyjechaliśmy poza alfabet, idziemy na koniec
    {
      wybierana = 'Z';
    }
 
    wyswietlWybierana();
    while(!digitalRead(4)); //czekamy aż użytkownik puści przycisk
    delay(200);
  }
  
  if(!digitalRead(5)) //naciskamy przycisk zatwierdzenia
  {
    slowo += wybierana; //dopisujemy literę do słowa
    litera = wybierana;
    kursor++;
 
    delay(1000);
    if(digitalRead(5)) //jeśli po sekundzie przycisk już nie jest trzymany, dodajemy kolejną literę
    {
      wybierana = litera;
      wyswietlWybierana();
    }
    else //przytrzymanie przycisku - koniec wejścia, tłumaczymy
    {
      String zaszyfrowane = "";
 
      for(int i=0; i<slowo.length(); i++)
      {
        zaszyfrowane += morse[slowo[i]-65]; //dopisujemy odpowiednik litery w kodzie Morse'a
        zaszyfrowane += '/';
      }
 
      lcd.setCursor(0,0);
      lcd.print("Zaszyfrowany wyraz: ");
      lcd.setCursor(0,1);
      lcd.print(zaszyfrowane);
 
      for(int i=0; i<zaszyfrowane.length(); i++) //po wyświetleniu na LCD dajemy na wyjście 11 stosowny dźwięk/impuls
      {
        if(zaszyfrowane[i] == '.')
        {
          digitalWrite(11, HIGH);
          delay(250);
          digitalWrite(11, LOW);
          delay(300);
        }
        else if(zaszyfrowane[i] == '-')
        {
          digitalWrite(11, HIGH);
          delay(600);
          digitalWrite(11, LOW);
          delay(300);
        }
        else if(zaszyfrowane[i] == '/')
        {
          delay(1000);
        }
      }
 
      delay(2000);
      resetKodu(); //na koniec resetujemy całe arduino
    }
  }
}

Chciałem przełożyć ten kot z płytki Arduino na Attiny.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

@_LM_ @_LM_ Mam jeszcze kilka pytań, znalazłem takie zdjęcie i widzę tu kilka nie zrozumiałych pinów.

1. Jak resetować takie ATtiny?

2. Czy w pinach gdzie piszę A3, A2, A1 mogę też w piąć piny typu tact switch czy tylko typu potencjometrów?

3. Co oznaczają PWM w pinach 6 i 5?

ATtiny85-pinout-884x720.jpg

Link do komentarza
Share on other sites

1) pin reset normalnie pociągnięty rezystorem około 10k do zasilania. Resetujesz zawierając do masy 

2) tak, mogą pracować jako zwykle GPIO to ADC jest funkcją dodatkową 

3) Pulse Width Modulation może działać jako sterownik jasności LED, Regulacja prędkości silnika DC i wszystkiego co wiąże się z pwm. Piny mogą również działać jako zwykle GPIO

Link do komentarza
Share on other sites

To już musisz pytać fachowców od Arduino. Podejrzewam że 99% funkcji jest kompatybilnych  w końcu to ten sam mikrokontroler ale z nieco pomniejszonymi zasobami w porównaniu z AtMega

  • Pomogłeś! 1
Link do komentarza
Share on other sites

To co podał @_LM_ to jest poradnik z zastosowaniem tzw. Arduino Core. A dokładniej https://github.com/SpenceKonde/ATTinyCore

Są różne implementacje na jak i małe ATTiny i duże ATMegi. Zazwyczaj używałem z tej listy, ale jest pewnie i więcej implementacji.
Konfiguracja odbywa się jak w poradniku, poprzez menu w Arduino IDE. Tak samo jak programowanie, ale jak ktoś ma własny programator to nie musi koniecznie używać drugiego Arduino.
A reszta, wraz z zasilaniem i dostępnymi możliwościami to już strice sam AVR. Mogę polecić poradnik dotyczący zasilania, z którego sam korzystałem.

Sam kiedyś użyłem ATTiny, do sterowania małymi LED umieszczonymi w dość ciasnym stroiku bożonarodzeniowym. 😺

Link do komentarza
Share on other sites

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...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.