Skocz do zawartości

Plik na karcie SD zawierający program, który wykonuje Arduino.


Szmyterling

Pomocna odpowiedź

3 godziny temu, prezesedi napisał:

w tym wykonaniu pokazuje zamiast ó -> @ a zamiast ł -> $

Aż nie wytrzymałem i sprawdziłem - u mnie działa (jest "GÓRAL Bielsko Biała")

Na pewno dobrze podmieniłeś? Bo to wygląda tak, jakby korzystał z oryginalnego pliku.

W Arduino/libraries/Adafruit_GFX podmieniasz plik glcdfont.c. Jeśli Arduino IDE miałeś włączony, wyłączasz i uruchamiasz jeszcze raz. Po skompilowaniu i wgraniu powinieneś mieć polskie literki.

PS. właśnie po to trzymam cały czas Arduino UNO.

Edytowano przez ethanak
Link do komentarza
Share on other sites

Dzień dobry,

dzisiaj dobrze pokazuje - GÓRAL i Bielsko Biała. Wczoraj resetowałem arduino ale może potrzebny był reset komputera. Bardzo dziękuję za bibliotekę.

Link do komentarza
Share on other sites

2 godziny temu, prezesedi napisał:

Wczoraj resetowałem arduino ale może potrzebny był reset komputera

Niestety - to błąd Arduino IDE (brak możliwości usunięcia cache), zgłaszany i olewany przez autorów jako "a komu to potrzebne". Jak widać potrzebne 😉

 

Link do komentarza
Share on other sites

A tak przy okazji skoro juz byla mowa o kodach kilku cyfrowych...znasz @ethanak jakis szybki sposob na laczenie kilku cyfr w jedna liczbe? Bo szukalem wczoraj i guzik znalazlem (tzn dla String'òw jest troche, ale mi bardziej chodzi o bajty etc, czyli mam np. 1/4/8 i ma wyjść 148) (mozna by mnożyć przez 10/100/1000 etc. konkretna cyfre, ale moze cos lepszego znasz)

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

2 minuty temu, farmaceuta napisał:

czyli mam np. 1/4/8 i ma wyjść 148

Uściślij: 1, 4, 8 czy może '1', '4', '8'.

Ogólnie coś w stylu (pseudojęzyk):

wynik = 0;
for (byte in array) wynik = wynik * 10 + value(byte);

 

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

6 minut temu, ethanak napisał:

 


wynik = 0;
for (byte in array) wynik = wynik * 10 + value(byte);

 

 

7 minut temu, ethanak napisał:

Uściślij: 1, 4, 8 czy może '1', '4', '8'.

Elegancko👍 dla bajtów już mamy😉 ale dla char'òw też mnie interesuje i kolege wyżej napewno też 😉

Link do komentarza
Share on other sites

31 minut temu, ethanak napisał:

 

Uściślij co oznacza "dla bajtów" i "dla charów"

 

1 jako cyfra (bajt) jest czymś innym niż 1 jako znak (char) wiec jesli otrzymam '1'  '4'  '8'  to wzór który podałeś wyżej nie będzie działał dla char...(bo '5' jako char to 0x35 w ascii, a 53 jako bajt)

W każdym razie już znalazłem rozwiązanie (wystarczy kilka warunków żeby "zamienić" char na bajt, a dalej to twój pomysł i gotowe)

Edytowano przez farmaceuta
Link do komentarza
Share on other sites

Po pierwsze: wyrażaj się ściśle. char to typ języka C (bajt ze znakiem lub bez), a znak to zupełnie coś innego.

Po drugie: napisałem, że to pseudojęzyk, opisałem ogólny algorytm, a że nie zauważyłeś czy nie zrozumiałeś tajemniczego value(byte) to wybacz - ale byłem przekonany że zauważysz i zrozumiesz.

Po trzecie: do tablic znakowych masz funkcję strtol i podobne.

Link do komentarza
Share on other sites

value(byte) oznacza w tym przypadku wartość liczbową odpowiadającą danemu bajtowi i zależy od tego, jak w tablicy zapisane są kolejne cyfry. Dla ASCII może to być np.

byte - '0'

Poza tym nie '1 jako znak (char)' bo to nie ma sensu - char nie jest jakimś magicznym kontenerem do przechowywania wyłącznie napisów, a po prostu zależnie od implementacji odpowiednik int8_t lub uint8_t.

Edytowano przez ethanak
  • Lubię! 1
Link do komentarza
Share on other sites

Witam. Płytka ESP32 na miejscu. Sprawdziłem piny (na mojej jest mniejsza ilość niż na innych ESP32)

obraz.thumb.png.d528f90cbebaa29f3b32f04cc1196b4c.png

podpiąłem klawiaturę wgrałem kod "keypad". Zmieniłem piny. W monitorze pokazuje ale z błędem.

Pod klawiszem 2 mam 1

Pod klawiszem 8 mam 7

Pod klawiszem 0 mam *

reszta ok.

obraz.thumb.png.4e6aa258176b3332b5df1d5b9ef0db74.png

byte pin_rows[ROW_NUM] = {18, 5, 17, 16};
byte pin_column[COLUMN_NUM] = {4, 2, 15};

jak zamienię kolejnością 4 i 2 dla testów to pokazuje wszystkie cyfry prawidłowe ale wiadomo - w przestawionej kolejności

Link do komentarza
Share on other sites

1 godzinę temu, prezesedi napisał:

na mojej jest mniejsza ilość niż na innych ESP32

Czyli tyle ile trzeba - sześciu dodatkowych pinów nie wykorzystasz.

1 godzinę temu, prezesedi napisał:

W monitorze pokazuje ale z błędem

No to masz trzy możliwości:

  1. Pozmieniać połączenia klawiatury z ESP (totalnie bez sensu, ale możliwe)
  2. Pozmieniać piny w pin_rows i pin_column tak żeby pokazywał prawidłowo (to najlepszy sposób)
  3. Pozmieniać wartości w hexaKeys (najszybciej, ale robi się lekki bałagan w programie).

Przyznam się, że jak robiłem klawiaturę do czytaka (3x3) to najpierw podłączyłem klawisze tak żeby było wygodniej, a potem zmieniałem wartości (czyli "na lenia") 🙂

 

 

Edytowano przez ethanak
Link do komentarza
Share on other sites

Ok. bałagan musi być, inaczej nie chce współpracować poprawnie. Zamienione piny w IDE 4 i 2 a dodatkowo układ klawiatury (kolumna 1 i 2).

Teraz działa poprawnie

Czy kod, który działał na ESP8266 powinien działać na ESP32 tylko po zdefiniowaniu pinów SCL i SDA? Bo u mnie tak nie jest - na wyświetlaczu jest "stado" pikseli

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>

      //ustawienie i2c
#define OLED_SDA 21
#define OLED_SCL 22

Adafruit_SSD1306 display(21,22);

      // ustawienie klawiatury
const byte ROWS = 4; //cztery rzędy
const byte COLS = 3; //trzy kolumny
char hexaKeys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'*','0','#'}};

char message1[]="1 00:05 EC 'SOBIESKI' Wien";
char message2[]="2 01:15 EC 'POLONIA' Berlin";
char message3[]="3 02:00 EC 'CHOPIN' Graz";
char message4[]="4 03:30 EC 'SILESIA' Praha";
char message5[]="1 04:05 EIP 'GIBKI CUG' Warszawa Wsch.";
char message6[]="2 05:00 TLK 'JASNA GORA' Czestochowa";
char message7[]="3 05:55 EIC 'KORMORAN' Olsztyn Gl.";
char message8[]="4 06:20 IC 'TATRY' Zakopane";
char message9[]="1 07:15 IC 'G\013RAL' Bielsko Bia\024a";
char message10[]="2 07:30 EIC 'LATARNIK' Kolobrzeg";
char message11[]="3 08:00 KS 'SZTYGAR' Tarnowskie Gory";
char message12[]="4 08:05 IC 'CZANTORIA' Wisla Glebce";
char message13[]="1 11:55 TLK 'GRANICA' Chalupki";
char message14[]="2 12:00 IC 'SUDETY' Klodzko";
char message15[]="3 12:10 IC 'LAJKONIK' Krakow";
char message16[]="4 12:25 KS 'BESKIDY' Zywiec";
char message17[]="1 14:15 KS 'GORNIK' Gliwice";
char message18[]="2 14:40 KS 'FIAT' Tychy Lodowisko";
char message19[]="3 15:00 PR 'WARTA' Wielun Dabrowa";
char message20[]="4 15:25 TLK 'BOLEK I LOLEK' Wodzislaw Sl.";
char message21[]="1 17:30 IC 'ODRA' Opole";
char message22[]="2 17:40 EIP 'PRZEMYSLANIN' Przemysl Gl.";
char message23[]="3 17:55 KS 'SPODEK' Myslowice";
char message24[]="4 18:15 EIC 'KARKONOSZE' Jelenia Gora";
char message25[]="1 19:00 EIP 'NEPTUN' Hel";
char message26[]="2 19:20 KS 'PIRAT' Lubliniec";
char message27[]="3 19:45 PR 'SPRINTER' Zywiec";
char message28[]="4 20:00 KS 'GWAREK' Raciborz";
char message29[]="1 21:00 EIC 'BALTYK' Gdynia Gl.";
char message30[]="2 21:30 EIP 'PIAST' Poznan Gl.";
char message31[]="3 21:45 PR 'GIBKI CUG' Tarnowskie Gory";
char message32[]="4 22:00 IC 'CHEMIK' Plock";
char message33[]="1 22:05 EIC 'WYDMY' Ustka";
char message34[]="2 22:40 TLK 'SZYCHTA' Sosnowiec Pld.";
char message35[]="3 23:20 EIC 'WOLIN' Swinoujscie";
char message36[]="4 23:50 EC 'LWOW EXPRESS' Kiev";
   int x, minX;

      // podłączenie klawiatury do Arduino   
byte rowPins[ROWS] = {18, 5, 17, 16};  //Piny, do których podłączamy wyprowadzenia od rzędów
byte colPins[COLS] = {4, 2, 15}; //Piny, do których podłączamy wyprowadzenia od kolumn

Keypad keypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS );

  void setup(){
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setTextWrap(false);
  x = display.width();
  minX = -8 * strlen(message1);
  }

  void loop(){
 static byte y = 0;
 static long last = 0;
 static byte kopia = 0;

  char key = keypad.getKey();
      Serial.println(key);
 
  if (key == '1') { 
    delay(500);       
   x= display.width();
   y = 1;
   kopia = 1;
} else if (key == '2') { 
   delay(500);       
   x= display.width();
   y = 2;
   kopia = 2;
} else if (key == '3') { 
   delay(500);
   x= display.width();
   y = 3;
   kopia = 3;
} else if (key == '4') { 
   delay(500);
   x= display.width();
   y = 4;
   kopia = 4;
} else if (key == '5') { 
   delay(500);
   x= display.width();
   y = 5;
   kopia = 5;
}


switch (y) {
        
   case 1:
   display.clearDisplay();
   display.setCursor(x,0);
   display.setTextSize(1);
   display.print(message1);
   display.setTextSize(1);
   display.setCursor(x,8);
   display.print(message2);
   display.setCursor(x,16);
   display.setTextSize(1);
   display.print(message3);
   display.setCursor(x,24);
   display.setTextSize(1);
   display.print(message4);
   display.display();
   x = x-4;
  break;

  case 2:
  display.clearDisplay();
   display.setCursor(x,0);
   display.setTextSize(1);
   display.print(message5);
   display.setTextSize(1);
   display.setCursor(x,8);
   display.print(message6);
   display.setCursor(x,16);
   display.setTextSize(1);
   display.print(message7);
   display.setCursor(x,24);
   display.setTextSize(1);
   display.print(message8);
   display.display();
   x = x-4;
  break;

  case 3:
  display.clearDisplay();
   display.setCursor(x,0);
   display.setTextSize(1);
   display.print(message9);
   display.setTextSize(1);
   display.setCursor(x,8);
   display.print(message10);
   display.setCursor(x,16);
   display.setTextSize(1);
   display.print(message11);
   display.setCursor(x,24);
   display.setTextSize(1);
   display.print(message12);
   display.display();
   x = x-4;
  break;

  case 4:
   display.clearDisplay();
   display.setCursor(x,0);
   display.setTextSize(1);
   display.print(message13);
   display.setTextSize(1);
   display.setCursor(x,8);
   display.print(message14);
   display.setCursor(x,16);
   display.setTextSize(1);
   display.print(message15);
   display.setCursor(x,24);
   display.setTextSize(1);
   display.print(message16);
   display.display();
   x = x-4;
  break;

  case 5:
   display.clearDisplay();
   display.setCursor(x,0);
   display.setTextSize(1);
   display.print(message17);
   display.setTextSize(1);
   display.setCursor(x,8);
   display.print(message18);
   display.setCursor(x,16);
   display.setTextSize(1);
   display.print(message19);
   display.setCursor(x,24);
   display.setTextSize(1);
   display.print(message20);
   display.display();
   x = x-4;
  break;
  
   case 6: 
   display.clearDisplay();
   display.setCursor(18,0);
   display.setTextSize(1);
   display.print("KATOWICE BRYNOW");
   display.setTextSize(2);
   display.setCursor(35,15);
   display.print("15:20");
   display.display();
   y = 7;
   last = millis();
   break;

   case 7:
   if (millis() - last > 3000UL) { // 3000 = 3 sekundy
    y = kopia;
    x = display.width();
    }
  break;
  }
  
    
  if(x < minX) {
    x = display.width();
    y = 6;
   }
}

takie coś leci ciągle w monitorze

Rebooting...
	1⸮⸮⸮⸮(⸮⸮!X⸮⸮⸮⸮Guru Meditation Error: Core  1 panic'ed (IntegerDivideByZero). Exception was unhandled.
Core 1 register dump:
PC      : 0x400d2754  PS      : 0x00060730  A0      : 0x800d17a4  A1      : 0x3ffb1f10  
A2      : 0x3ffbdee8  A3      : 0x00000000  A4      : 0x00000001  A5      : 0x00000015  
A6      : 0xffffffff  A7      : 0x3ffbdee8  A8      : 0x800d2754  A9      : 0x3ffb1ee0  
A10     : 0x04c4b400  A11     : 0x00000013  A12     : 0x00000001  A13     : 0x00000001  
A14     : 0x00060720  A15     : 0x00000000  SAR     : 0x0000001c  EXCCAUSE: 0x00000006  
EXCVADDR: 0x00000000  LBEG    : 0x4000c46c  LEND    : 0x4000c477  LCOUNT  : 0x00000000  

ELF file SHA256: 0000000000000000

Backtrace: 0x400d2754:0x3ffb1f10 0x400d17a1:0x3ffb1f30 0x400d1d3e:0x3ffb1f50 0x400d0d68:0x3ffb1f80 0x400d3d0e:0x3ffb1fb0 0x400869bd:0x3ffb1fd0

Po resecie wszystkiego, rozpięciu i spięciu ponownym, w monitorze jest czysto ale na wyświetlaczu dalej piksele

20220628_191909[1].jpg

Edytowano przez prezesedi
Link do komentarza
Share on other sites

Widze ze w konstruktorze teraz podajesz dwa parametry ..

Adafruit_SSD1306 display(21,22);

wczesniej podawales jeden (4)...to może spróbuj zrobić tak samo...piny scl/sda są default'owo ustawione na 21/22 wiec nie trzeba nic podawać (nie chce mi się sprawdzać co ten konstruktor ma za argument😜)

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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