• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
variable or field 'lcd_print' declared void
#1
Próbuję uruchomić na Arduino UNO r3 kod timera strzeleckiego z githuba:
https://github.com/SolemnScribe/arduino-shot-timer

Różnica u mnie jest taka, że nie ma być to na Adafruit RGB LCD Shield, tylko na zwykły LCD Shield. 

Po pierwsze dostaję: variable or field 'lcd_print' declared void
Po drugie zastanawiam się jak wywalić z tego Adafruit

W jakim kierunku powinienem iść?

Kod:
//////////////////////////////
  // Print to an LCD
  //////////////////////////////
 
  void lcd_print(Adafruit_RGBLCDShield* lcd, uint32_t t, byte digits)
  {
    DEBUG_PRINT(F("Printing to LCD:"));
    char lcd_output[11];
    convert_num(t, digits, lcd_output);
    DEBUG_PRINTLN(lcd_output,0);
    lcd->print(lcd_output);
  }
 
  //////////////////////////////
  // Print time to an LCD screen
  //////////////////////////////
 
  void lcd_print_time(Adafruit_RGBLCDShield* lcd, uint32_t t, byte digits)
  {
    DEBUG_PRINTLN(F("Printing Time to LCD"),0);
    char lcd_output[11];
    convert_time(t, digits, lcd_output);
    DEBUG_PRINTLN(lcd_output,0);
    lcd->print(lcd_output);
  }
 
#endif // LCDHELPERS_H_
 
Odpowiedź
#2
Dla sprawdzenia działania funkcji void napisałem taki prosty programik:

Kod:
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void lcdprintt(int x)
{
if (x == 1) {lcd.print("Test 1");}
else {lcd.print("err");}
}

void setup()
{
lcd.begin(16, 2);         
lcd.setCursor(0,0);
int x = 1;
lcdprintt(x);
}

void loop() {}

Wpisuje sobie ręcznie "int x=1" i wyświetla "Test 1"
Wpisuję x różne od 1 i mam "err"

To Adafruit tam psuje temat?
 
Odpowiedź
#3
Z tego co piszesz to działa tak jak chcesz, jeśli x=1 to drukuje Test 1, a jak x różne od 1 to drukuje err. Nie wiem, może późno jest, o co walczysz?
Naucz się odmierzać czas bez delay (millis), pamiętaj o czyszczeniu ekranu, żebyś nie pisał "2" w miejsce gdzie przed chwilą było "115", bo wyjdzie napis "215" na LCD. I walcz dalej...
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#4
Nie działa mi kod z pierwszego posta. Wywala błąd 'variable or field 'lcd_print' declared void'

To w pliku .h z gotowego, podlinkowanego rozwiązania z GitHub, które to rozwiązanie chcę uruchomić
 
Odpowiedź
#5
Dołączyłem wszystkie biblioteki łącznie z niechcianym Adafruit. Niby jest ok, ale dostaję:

Kod:
In function 'convert_num',
    inlined from 'lcd_print.constprop' at sketch\LCDHelpers.h:75:16:
sketch\LegibleTime.h:62:11: warning: 'strcpy' writing 13 bytes into a region of size 11 overflows the destination [-Wstringop-overflow=]
    strcpy(str,"000000000000"); // pre-set -- should this go in PROGMEM?
          ^
In function 'convert_time',
    inlined from 'lcd_print_time.constprop' at sketch\LCDHelpers.h:88:17:
sketch\LegibleTime.h:96:11: warning: 'strcpy' writing 13 bytes into a region of size 11 overflows the destination [-Wstringop-overflow=]
    strcpy(str,"00:00:00.000"); //pre-set -- should this go in PROGMEM?
          ^
Szkic używa 15686 bajtów (48%) pamięci programu. Maksimum to 32256 bajtów.
Zmienne globalne używają 1481 bajtów (72%) pamięci dynamicznej, pozostawiając 567 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów.

Funkcja void lcd_print była powiązana z biblioteką Adafruit_RGBLCDShield.h. Jakiś pomysł jak to przerobić na LiquidCrystal.h ? Mam zwykły wyświetlacz LCD Shield z przyciskami zamiast Adafruit RGB LCD Shield 2 pin I2C
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości