Помогите разобраться со скетчем.
- Войдите на сайт для отправки комментариев
Ср, 18/11/2020 - 11:44
Добрые люди помогите. С дочкой решили сделать пинпонг как в этой статье http://wiki.amperka.ru/projects:pong но при заливки скетча вылетает ошибка.
Arduino: 1.8.13 (Windows 7), Плата:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:\Users\mikolka6\Desktop\gamePong\gamePong.ino: In function 'void loop()':
gamePong:66:10: error: 'class TVout' has no member named 'clearScreen'
TV.clearScreen();
^~~~~~~~~~~
gamePong:68:10: error: 'class TVout' has no member named 'selectFont'; did you mean 'select_font'?
TV.selectFont(font4x6);
^~~~~~~~~~
select_font
gamePong:68:21: error: 'font4x6' was not declared in this scope
TV.selectFont(font4x6);
^~~~~~~
gamePong:73:10: error: 'class TVout' has no member named 'selectFont'; did you mean 'select_font'?
TV.selectFont(font8x8);
^~~~~~~~~~
select_font
gamePong:73:21: error: 'font8x8' was not declared in this scope
TV.selectFont(font8x8);
^~~~~~~
gamePong:85:10: error: 'class TVout' has no member named 'selectFont'; did you mean 'select_font'?
TV.selectFont(font4x6);
^~~~~~~~~~
select_font
gamePong:87:10: error: 'class TVout' has no member named 'clearScreen'
TV.clearScreen();
^~~~~~~~~~~
gamePong:154:8: error: 'class TVout' has no member named 'delayFrame'; did you mean 'delay_frame'?
TV.delayFrame(1);
^~~~~~~~~~
delay_frame
gamePong:162:12: error: 'class TVout' has no member named 'delayFrame'; did you mean 'delay_frame'?
TV.delayFrame(120);
^~~~~~~~~~
delay_frame
gamePong:169:12: error: 'class TVout' has no member named 'delayFrame'; did you mean 'delay_frame'?
TV.delayFrame(120);
^~~~~~~~~~
delay_frame
gamePong:182:10: error: 'class TVout' has no member named 'clearScreen'
TV.clearScreen();
^~~~~~~~~~~
C:\Users\mikolka6\Desktop\gamePong\gamePong.ino: In function 'void drawScores()':
gamePong:203:6: error: 'class TVout' has no member named 'printChar'; did you mean 'print_char'?
TV.printChar((hres / 4), 4, '0' + playerScoreLeft);
^~~~~~~~~
print_char
gamePong:204:6: error: 'class TVout' has no member named 'printChar'; did you mean 'print_char'?
TV.printChar((hres / 4) + (hres / 2), 4, '0' + playerScoreRight);
^~~~~~~~~
print_char
C:\Users\mikolka6\Desktop\gamePong\gamePong.ino: In function 'void drawPaddles()':
gamePong:211:6: error: 'class TVout' has no member named 'drawRect'; did you mean 'draw_rect'?
TV.drawRect(0, 0, 1, vres, 0, 0);
^~~~~~~~
draw_rect
gamePong:212:6: error: 'class TVout' has no member named 'drawRect'; did you mean 'draw_rect'?
TV.drawRect(hres - 2, 0, 1, vres, 0, 0);
^~~~~~~~
draw_rect
gamePong:215:6: error: 'class TVout' has no member named 'drawRect'; did you mean 'draw_rect'?
TV.drawRect(0, leftPaddleY, 1, PADDLE_HEIGHT, WHITE, true);
^~~~~~~~
draw_rect
gamePong:216:6: error: 'class TVout' has no member named 'drawRect'; did you mean 'draw_rect'?
TV.drawRect(hres - 2, rightPaddleY, 1, PADDLE_HEIGHT, WHITE, true);
^~~~~~~~
draw_rect
C:\Users\mikolka6\Desktop\gamePong\gamePong.ino: In function 'void drawBall()':
gamePong:222:6: error: 'class TVout' has no member named 'setPixel'; did you mean 'set_pixel'?
TV.setPixel(ballX, ballY, INVERT);
^~~~~~~~
set_pixel
C:\Users\mikolka6\Desktop\gamePong\gamePong.ino: In function 'void drawBox()':
gamePong:227:6: error: 'class TVout' has no member named 'clearScreen'
TV.clearScreen();
^~~~~~~~~~~
gamePong:230:8: error: 'class TVout' has no member named 'drawLine'; did you mean 'draw_line'?
TV.drawLine(hres / 2, i, hres / 2, i + 2, 1);
^~~~~~~~
draw_line
gamePong:233:6: error: 'class TVout' has no member named 'drawLine'; did you mean 'draw_line'?
TV.drawLine(0, 0, hres, 0, WHITE);
^~~~~~~~
draw_line
gamePong:235:6: error: 'class TVout' has no member named 'drawLine'; did you mean 'draw_line'?
TV.drawLine(0, vres - 2, hres, vres - 2, WHITE);
^~~~~~~~
draw_line
exit status 1
'class TVout' has no member named 'clearScreen'
выкладывайте скетч по правилам форума, лазать по внешним ссылкам никто не будет
Да и спрашивать надо спервоначала у автора кода/статьи
Ну и, вангую, ниасилишь ты пока это, ни один, ни с дочкой. Начни с чегонить попроще.
Я это понимаю. Просто хотели поиграть. Но уже третий день бьемся.
выкладывайте скетч по правилам форума, лазать по внешним ссылкам никто не будет
// библиотека для работы с композитным видео выходом #include <TVout.h> // создаём объект TV класса TVout TVout TV; // максимальное количесво очков #define MAX_SCORE 7 // длина ракеток #define PADDLE_HEIGHT 10 // невидимые боковые грани рекакетки // для отбивания в крайних точках ракетки #define PADDLE_OFFSET 2 // пины подключения джойстиков каждого игрока #define PLAYER_LEFT_PIN A5 #define PLAYER_RIGHT_PIN A0 // переменные для хранения размеров экрана int hres, vres; // координаты шара int ballX, ballY; // направление шара int ballDX = 1; int ballDY = 1; // очки игроков int playerScoreLeft = 0; int playerScoreRight = 0; int leftPaddleY = 0; int rightPaddleY = 0; // состояния системы enum State { RESET_GAME, NEXT_LEVEL, PLAY_GAME, STATE_MISS, }; // объявляем переменную state State state; bool missed = 0; void setup() { // инициализируем коммуникацию с телевизиром TV.begin(NTSC, 136, 96); // ждём 1 секунду delay(1000); // считываем размеры экрана hres = TV.hres(); vres = TV.vres(); // сбрасываем игру state = RESET_GAME; } void loop() { switch (state) { case RESET_GAME: // очищаем экран TV.clearScreen(); // выбираем шрифт «4×6» TV.selectFont(font4x6); // печатем на экране слово «Амперка» TV.print(55, 0, "Amperka"); delay(1000); // выбираем шрифт «8×8» TV.selectFont(font8x8); // печатем на экране название игры «Arduino Pong"» TV.print(20, 30, "Arduino Pong"); delay(1000); // на старт, внимание, вперёд for (int i = 3; i != 0; i-- ) { TV.print(hres / 2, 60, i); TV.tone(1000, 300); delay(1000); } TV.tone(2000, 300); // выбираем шрифт «4×6» TV.selectFont(font4x6); // очищаем экран TV.clearScreen(); // обнуляем счёт обоих игроков playerScoreLeft = 0; playerScoreRight = 0; // переходим на следующий уровень state = NEXT_LEVEL; break; case NEXT_LEVEL: // сброс шарика и ракеток resetBallAndPaddles(); // рисуем игровое поле на экране drawBox(); // выводим очки игроков на экране drawScores(); // рисуем игровые ракетки drawPaddles(); // переходим в состояние игры state = PLAY_GAME; break; case PLAY_GAME: // если мяч достиг верхеней / нижней границицы поля if (ballY == vres || ballY == 0) { ballDY *= -1; } // если мяч приближается к правой стороне if (ballX >= hres - 2) { // если мяч отбился правой ракеткой if (ballY > rightPaddleY - PADDLE_OFFSET && ballY < (rightPaddleY + PADDLE_HEIGHT + PADDLE_OFFSET) && ballDX > 0 ) { ballDX = -1; } } // если мяч достиг правой стены if (ballX == hres - 1) { missed = true; state = STATE_MISS; playerScoreLeft++; break; } // если мяч приближается к правой стороне if (ballX <= 2) { // если мяч отбился левой ракеткой if (ballY > leftPaddleY - PADDLE_OFFSET && ballY < (leftPaddleY + PADDLE_HEIGHT + PADDLE_OFFSET) && ballDX < 0 ) { ballDX = 1; } } // если мяч достиг левой стены if (ballX == 0) { missed = false; state = STATE_MISS; playerScoreRight++; break; } // обновляем положения ракеток leftPaddleY = map(analogRead(PLAYER_LEFT_PIN), 0, 1024, 0, vres - PADDLE_HEIGHT); rightPaddleY = map(analogRead(PLAYER_RIGHT_PIN), 0, 1024, 0, vres - PADDLE_HEIGHT); // обновляем положение шарика drawBall(); // меням местоположение шарика на следущий шаг ballX += ballDX; ballY += ballDY; drawPaddles(); // обновляем положение шарика drawBall(); TV.delayFrame(1); break; case STATE_MISS: // если кто то пропустид мяч if (playerScoreLeft == MAX_SCORE) { TV.print(16, vres / 2, "Winner!"); TV.tone(2000, 500); TV.delayFrame(120); state = RESET_GAME; while(1); break; } else if (playerScoreRight == MAX_SCORE) { TV.print(hres / 2 + 16, vres / 2, "Winner!"); TV.tone(2000, 500); TV.delayFrame(120); state = RESET_GAME; while(1); break; } if (missed) { TV.print(hres / 2 + 16, vres / 2, "Missed!"); TV.tone(500, 300); } else { TV.print(16, vres / 2, "Missed!"); TV.tone(500, 300); } delay(1000); TV.clearScreen(); state = NEXT_LEVEL; break; } } // сброс шарика и ракеток void resetBallAndPaddles() { randomSeed(analogRead(A2)); int noise = random(vres); ballX = hres / 2; ballY = random(vres); ballDX = (noise & 0x01) ? 1 : -1; ballDY = (noise & 0x02) ? -1 : 1; leftPaddleY = vres / 2; rightPaddleY = vres / 2; } // вывод очков на дисплей void drawScores() { TV.printChar((hres / 4), 4, '0' + playerScoreLeft); TV.printChar((hres / 4) + (hres / 2), 4, '0' + playerScoreRight); } // вывод ракеток на дисплей void drawPaddles() { // стираем предыдущие ракетки // стираем всю возможную область их местоположения TV.drawRect(0, 0, 1, vres, 0, 0); TV.drawRect(hres - 2, 0, 1, vres, 0, 0); // выводим текущее положение ракеток TV.drawRect(0, leftPaddleY, 1, PADDLE_HEIGHT, WHITE, true); TV.drawRect(hres - 2, rightPaddleY, 1, PADDLE_HEIGHT, WHITE, true); } // вывод шарика void drawBall() { // рисуем шарик TV.setPixel(ballX, ballY, INVERT); } // отрисовка игрового поля на экране void drawBox() { TV.clearScreen(); // середина поля for (int i = 0; i < vres; i += 6) { TV.drawLine(hres / 2, i, hres / 2, i + 2, 1); } // верхняя граница поля TV.drawLine(0, 0, hres, 0, WHITE); // нижняя граница поля TV.drawLine(0, vres - 2, hres, vres - 2, WHITE); }Да и спрашивать надо спервоначала у автора кода/статьи
Статья и код вроде в свободном доступе.
В лесу грибы растут для любого. Это повод для просьб ко всем окружающим быстренько сбегать и набрать для вас с дочкой груздей, потому что очень вам их хочется, но отличить нормальные грибы от поганок не умеете?
Хотите, чтобы кто-то помог - принимайте участие в решении _своей_, а не нашей проблемы. Или форум вам очень сильно задолжал когда-то?
Исходя из текста ошибок - использована какая-то сторонняя библиотека TVOut, несовместимая с той, что применялась при разработке скетча его автором.
Статья и код вроде в свободном доступе.
в этой же статье есть прямая ссылка на библиотеку. И с ней, насколько я вижу - таких ошибок быть не должно. Удалите неправильную библиотеку со своего компа, поставьте библиотеку по ссылке из статьи и все будет хорошо.
Статья и код вроде в свободном доступе.
в этой же статье есть прямая ссылка на библиотеку. И с ней, насколько я вижу - таких ошибок быть не должно. Удалите неправильную библиотеку со своего компа, поставьте библиотеку по ссылке из статьи и все будет хорошо.
Я пробовал оба скетча. ошибка одна и таже.
Ладно ребят вопрос снят. Спасибо всем. Буду сам разбираться.
Я пробовал оба скетча. ошибка одна и таже.
какие оба? в статье только один скетч.
Там есть ссылка на библиотеку TVOut . Вы ее скачали? Установили?
Я пробовал оба скетча. ошибка одна и таже.
какие оба? в статье только один скетч.
Там есть ссылка на библиотеку TVOut . Вы ее скачали? Установили?
Там скетч выложенный текстом и ссылка на скачивание. Я пробовал оба варианта. Библиотеку установил изначально. Более ссылок я не нашел.
Библиотеку установил изначально. Более ссылок я не нашел.
Николка, заканчивайте тупить. Я вас спрашиваю, вы библиотеку установили именно ту, что по ссылке из статьи? Или какую-то другую с таким же названием, например из Ардуин ИДЕ?
Вам надо взять именно ту, что в статье
Надо войти на гитхаб, скачать ZIP-архив, а потом разархивировать его в свою папку libraries в том кактлоге, где у вас установлена Ардуино
Надо войти на гитхаб, скачать ZIP-архив, а потом разархивировать его в свою папку libraries в том кактлоге, где у вас установлена Ардуино
А ту, которая установлена сейчас, удалить
Библиотеку установил изначально. Более ссылок я не нашел.
Николка, заканчивайте тупить. Я вас спрашиваю, вы библиотеку установили именно ту, что по ссылке из статьи? Или какую-то другую с таким же названием, например из Ардуин ИДЕ?
Вам надо взять именно ту, что в статье
Надо войти на гитхаб, скачать ZIP-архив, а потом разархивировать его в свою папку libraries в том кактлоге, где у вас установлена Ардуино
Вы оказались правы. Я установил библиотеку из самого приложения ардуино. А нужно было скачать и добавить с сайта. Всё залилось. Спасибо Вам огромное!!! Тема закрыта. Спасибо ещё раз. Буду учить матчасть.