Skocz do zawartości

Pomocna odpowiedź

(edytowany)
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

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

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 😉

 

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)

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
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ż 😉

(edytowany)
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

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.

(edytowany)

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

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

(edytowany)
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
(edytowany)

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

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😜)

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