Помогите с подключением Music Shield'a

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем teddyfox, 14 июн 2012.

  1. teddyfox

    teddyfox Нерд

    MusicShield подключил к Меге. Работаю на Arduino 1 (работаю на Маке). Карточка на 2 гига (читал, что не все карточки кушаются, но это мы узнаем в конце) - три файла 001.mp3, 002.mp3, 003.mp3.

    Кстати, а подключенный к Меге MusicShield с поданным на Мегу питанием не должен уметь проигрывать файлы под управлением лишь кнопок? У меня никакие индикаторы на Music Shield'e не горят. На кнопки не реагирует. Ладно. Поехали дальше:

    Скачал библиотеки MusicShieldNewSDLib и FAT16. Заменил файл portpins.h. Взял пример из библиотеки MusicShieldNewSDLib - MusicPlayWithName - проигрывание файла по имени.

    Получился код:
    // Попытка проиграть файл .mp3 через MusicShield
    #include <Arduino.h>
    #include <avr/io.h>
    #include "/Users/fedortihomirov/Library/Arduino/MusicShieldNewSDLib/config.h"
    #include "/Users/fedortihomirov/Library/Arduino/MusicShieldNewSDLib/player.h"
    #include "/Users/fedortihomirov/Library/Arduino/MusicShieldNewSDLib/vs10xx.h"
    #include "/Users/fedortihomirov/Library/Arduino/Fat16/Fat16.h"
    #include "/Users/fedortihomirov/Library/Arduino/Fat16/Fat16Util.h"
    #include "/Users/fedortihomirov/Library/Arduino/MusicShieldNewSDLib/newSDLib.h"
    void setup()
    {
    Serial.begin(9600);
    InitSPI();
    InitIOForVs10xx();
    InitIOForKeys();
    InitIOForLEDs();
    Mp3Reset();
    if (!initialSDCard())
    return;
    RED_LED_ON();//light red LED
    }
    void loop()
    {
    playFile("001.mp3");
    }
    Arduino ругается:
    In file included from test0.cpp:9:
    /Users/fedortihomirov/Library/Arduino/Fat16/Fat16.h:250: error: conflicting return type specified for 'virtual void Fat16::write(uint8_t)'
    /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/cores/arduino/Print.h:48: error: overriding 'virtual size_t Print::write(uint8_t)'
    - конфликт объявлений в библиотеке FAT16 с чем-то в кишочках Arduino. В чем косяк?
     
  2. Unixon

    Unixon Оракул Модератор

    Класс Fat16 унаследован от класса Print, при этом в классе Print есть функция
    Код (Text):
    virtual size_t write(uint8_t) = 0;
    а в классе Fat16 она перекрывается
    Код (Text):
    void write(uint8_t b);
    для Arduino IDE < 1.0 что вызывает у компилятора жуткий головняк из-за несоответствия size_t и void.

    В файле Fat16.h предусмотрено объявление
    Код (Text):
    size_t write(uint8_t b);
    для Arduino IDE версии >= 1.0, но у вас почему-то выбирается старый вариант для прошлых версий IDE.