Skocz do zawartości

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


Szmyterling

Pomocna odpowiedź

1 minutę temu, prezesedi napisał:

Nie potrafię przejść błędu związanego z BREAK "break statement not within loop or switch".

W którym miejscu?

 

Link do komentarza
Share on other sites

  switch(currentMsg) {
    case 10:
    display.clearDisplay();
    display.setCursor(18,0);
    display.setTextSize(1);
    display.print("KATOWICE BRYNOW");
    display.setTextSize(3);
    display.setCursor(20,15);
    display.print("15:20");
    display.display();
    currentMsg = 11;
    lastLocalMsg = millis();
    }
    break;
    
    case 11:
    if (millis() - lastLocalMsg > 3000UL) { // 3000 = 3 sekundy
    currentMsg = scheduleMsg;
    x = display.width();
    }
    break;

    default:
    display.ssd1306_command(SSD1306_DISPLAYOFF);
    break; //tu!!!!!!!!!!!!!!!!!!!!!!!!!!

 
if (millis() - displayctl < SCROLL_STEP) return;
displayctl = millis();

 

Link do komentarza
Share on other sites

Coś pokręciłeś chyba. Pełny kod po ustaleniu co przylazło z klawiatury powinien wyglądać mniej więcej tak:
 

////
// burst wyświetlania
    if (millis() - displayctl < SCROLL_STEP) return;
    displayctl = millis();
// rozkład jazdy
    if (currentMessage >= 1 && currentMessage <= 9) {
        wyswietl(currentMessage);
        return;
    }
// inne
    switch(currentMsg) {
        case 10:
        display.clearDisplay();
        display.setCursor(18,0);
        display.setTextSize(1);
        display.print("KATOWICE BRYNOW");
        display.setTextSize(3);
        display.setCursor(20,15);
        display.print("15:20");
        display.display();
        currentMsg = 11;
        lastLocalMsg = millis();
        // tu miałeś niepotrzebną klamrę! 
        break;
    
        case 11:
        if (millis() - lastLocalMsg > 3000UL) { // 3000 = 3 sekundy
            currentMsg = scheduleMsg;
            x = display.width();
        }
        break;

        default:
        display.ssd1306_command(SSD1306_DISPLAYOFF);
        break;
    } // koniec switch
} // koniec loop


 


 

Zresztą docelowo i tak to się znajdzie w funkcji show(), ale zanim co musi działać!

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

A ja to na pewno namieszałem. Bo wiem, że potrafię. Zmieniłem kolejność i "przeszło" jednak nie wyświetla się żaden komunikat. Więc namieszałem GRUBO, ale to u mnie normalne. Trzeba wziąć poprawkę (na mnie) i mieć żelazne nerwy 😕

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

      //ustawienie i2c
#define OLED_SDA 21
#define OLED_SCL 22
#define SCROLL_STEP 10UL

static uint32_t displayctl= millis();

Adafruit_SSD1306 display(128,64,&Wire);



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

char * messages[] = {
    "1 00:05 EC 'SOBIESKI' Wien",
    "2 01:15 EC 'POLONIA' Berlin",
    "3 02:00 EC 'CHOPIN' Graz",
    "4 03:30 EC 'SILESIA' Praha",
    "1 04:05 EIP 'GIBKI CUG' Warszawa Wsch.",
    "2 05:00 TLK 'JASNA G\013RA' Cz\005stochowa",
    "3 05:55 EIC 'KORMORAN' Olsztyn G\025.",
    "4 06:20 IC 'TATRY' Zakopane",
    "1 07:15 IC 'G\013RAL' Bielsko Bia\025a",
    "2 07:30 EIC 'LATARNIK' Ko\025obrzeg",
    "3 08:00 K\006 'SZTYGAR' Tarnowskie G\014ry",
    "4 08:05 IC 'CZANTORIA' Wis\025a G\025\005bce",
    "1 11:55 TLK 'GRANICA' Cha\025upki",
    "2 12:00 IC 'SUDETY' K\025odzko",
    "3 12:10 IC 'LAJKONIK' Krak\014w",
    "4 12:25 K\006 'BESKIDY' \016ywiec",
    "1 14:15 K\006 'G\013RNIK' Gliwice",
    "2 14:40 K\006 'FIAT' Tychy Lodowisko",
    "3 15:00 PR 'WARTA' Wielu\023 D\003browa",
    "4 15:25 TLK 'BOLEK I LOLEK' Wodzis\025aw \006l.",
    "1 17:30 IC 'ODRA' Opole",
    "2 17:40 EIP 'PRZEMY\006LANIN' Przemy\007l G\025.",
    "3 17:55 K\006 'SPODEK' Katowice",
    "4 18:15 EIC 'KARKONOSZE' Jelenia G\014ra",
    "1 19:00 EIP 'NEPTUN' Hel",
    "2 19:20 K\006 'PIRAT' Lubliniec",
    "3 19:45 PR 'SPRINTER' \016ywiec",
    "4 20:00 K\006 'GWAREK' Racib\014rz",
    "1 21:00 EIC 'BA\024TYK' Gdynia G\025.",
    "2 21:30 EIP 'PIAST' Pozna\023 G\025.",
    "3 21:45 PR 'GIBKI CUG' Tarnowskie G\014ry",
    "4 22:00 IC 'CHEMIK' P\025ock",
    "1 22:05 EIC 'WYDMY' Ustka",
    "2 22:40 TLK 'SZYCHTA' Sosnowiec P\025d.",
    "3 23:20 EIC 'WOLIN' \006winouj\007cie",
    "4 23:50 EC 'LW\013W 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] = {2, 4, 15}; //Piny, do których podłączamy wyprowadzenia od kolumn

Keypad keypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS );
byte currentMsg=0;
byte scheduleMsg=0;
uint32_t lastLocalMsg;

  void setup(){

  Wire.begin(OLED_SDA, OLED_SCL);
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setTextWrap(false);
  x = display.width();
  }

  void wyswietl(int n)
{
    display.ssd1306_command(SSD1306_DISPLAYON);
    display.clearDisplay();
    display.setTextSize(2);
    int i;
    for (i=0;i<4; i++) {
        display.setCursor(x,i*16);
        display.print(messages[(n-1) * 4] + i);
    }
    display.display();
    x -= 1;
}

  void loop(){
  char key = keypad.getKey();
      Serial.println(key);

  if (millis() - displayctl < SCROLL_STEP) return;
  displayctl = millis();

  if (currentMsg >= 1 && currentMsg <= 9) {
  wyswietl(currentMsg);
  return;
}

switch(currentMsg) {
        case 10:
        display.clearDisplay();
        display.setCursor(18,0);
        display.setTextSize(1);
        display.print("KATOWICE BRYNOW");
        display.setTextSize(3);
        display.setCursor(20,15);
        display.print("15:20");
        display.display();
        currentMsg = 11;
        lastLocalMsg = millis();
        break;
    
        case 11:
        if (millis() - lastLocalMsg > 3000UL) { // 3000 = 3 sekundy
            currentMsg = scheduleMsg;
            x = display.width();
        }
        break;

        default:
        display.ssd1306_command(SSD1306_DISPLAYOFF);
        break;
    }
}

 

Link do komentarza
Share on other sites

(edytowany)

Coś za dużo wyrzuciłeś z kodu - a gdzie ten kawałek co robi machlojki z currentMsg? Między getKey a burstem do wyświetlania...

if (key == '1') { 
    delay(500);       
   x= display.width();
   y = 1;
   kopia = 1;
} else if (key == '2') { 
  /// i tak dalej

Oczywiście to też pójdzie do przeróbki, ale bez tego nie będzie działać.

Edytowano przez ethanak
Link do komentarza
Share on other sites

Aj, tym razem to moja wina.

Zamiast

display.print(messages[(n-1) * 4] + i);

trzeba

display.print(messages[(n-1) * 4 + i]);

Niestety - tak to jest jak się programuje na kartce 🙂

Link do komentarza
Share on other sites

Witam.

Dziś wdrażam poprawki od zera, bo wczoraj coś mi nie poszło. Ale i tak wywala błąd przy sprawdzaniu:

"cannot convert 'char**' to 'const char*' for argument '1' to 'size_t strlen(const char*)'"

Przechwytywanie.JPG

Link do komentarza
Share on other sites

(edytowany)

Nic dziwnego -strlen oczekuje napisu, a Ty podajesz tablicę napisów.

Daj tam na razie messages[0] zamiast messages, dzisiaj już chyba nie pomogę 😞

A i przypominam: znak ma 6 pikseli szerokości a nie 8!

Edytowano przez ethanak
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.