Skocz do zawartości

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


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.

  • 2 tygodnie później...

@_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

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

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

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

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