精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創(chuàng)作
電子發(fā)燒友網>電子資料下載>電子資料>魔術8球靈感答案盒開源硬件

魔術8球靈感答案盒開源硬件

2023-01-05 | zip | 0.11 MB | 次下載 | 免費

資料介紹

描述

靈感

我對這個項目的最初想法是讓我的團隊在度過艱難的一天時可以使用一些有趣的東西,或者只是需要減輕心情。當我環(huán)顧辦公室時,我注意到了舊的 Magic 8ball。

我想我可以做類似的事情并大大擴展可能的答案數量。把它放在你可以提供你自己的答案和大量答案的地方。

我還注意到一個谷歌語音工具包,我?guī)缀跏前资制鸺业摹?/font>我還沒有用那個工具包做任何事情,這似乎是一個絕好的機會。

連接一切

連接一切都非常簡單。

  • 確定街機按鈕上的 LED 和開關連接。
  • 將一些跳線焊接到連接上。
  • 將陰極(負)引線插入 LED 上,并將開關的一側插入擴展板中的接地(GND)引腳。
  • 將開關的另一端插入擴展板上的 D2。
  • 將 LED 上的陽極(正極)引線插入擴展板上的 D13。
  • 將揚聲器線焊接到 1/8 音頻插頭上。使黑色成為外部(地面),紅色成為最中間的連接。應該無關緊要,因為此項目的所有音頻輸出都設置為單聲道。
  • 按照有關組裝 Google 外殼的說明進行操作。
  • 將 Spresense 安裝在外殼底部。我用了一些維可牢尼龍搭扣來防止它四處移動。
  • 插入USB

您現在應該準備好開始編寫草圖了

?
poYBAGO06aGAOysYAAuezeESD1Y261.jpg
?
1 / 7 ?基礎部件和我對它們的測試
?

讓按鈕工作

定義按鈕及其 LED 將使用的引腳:

const int buttonPin = 2;      // Pin used to detect a button press
const int ledPin    = 13;     // Pin for the highside of the button LED

設置一個變量來跟蹤按鈕的狀態(tài):

// Variables used in interrupt service routines and other parts of the program should be volatile
// 2 is used to indicate there has not been an interrupt yet
// 1 is button released
// 0 is button pressed
volatile int buttonState = 2;

初始化引腳和中斷以處理按鈕狀態(tài)更改:

// setup the button and LED
pinMode(ledPin, OUTPUT);      // will raise and lower this output to toggle the LED. 
pinMode(buttonPin, INPUT);    // will watch this pin to detect the button press. 
  
// attaching and interrupt to the pin 
attachInterrupt(buttonPin, pinIsr, CHANGE);

編寫中斷處理例程:

void pinIsr()
{
  buttonState = digitalRead(buttonPin);
  digitalWrite(ledPin, buttonState);
  
  if (buttonState == 1)
    canPlayQuip = true;
  
  delayMicroseconds(200);
}

記錄俏皮話

我使用開源工具 Audacity 錄制了這個項目中的所有音頻。我這樣做有兩個原因:

  • 這些是我自己的錄音,所以不會出現版權問題。
  • 我喜歡使用 Audacity,一有機會就大聲疾呼

在錄音中要記住的是,當您保存它們時,它們需要采用以下格式:

  • 恒定比特率
  • 192kbps 比特率
  • 幾秒長

應該有辦法不具備這些要求。我相信您應該能夠擁有大量的比特率。我嘗試了很多選項,但這些是唯一適用于 Spresense 播放器初始化設置的選項。

這是執(zhí)行該初始化的行:

/*   
 * Set main player to decode stereo mp3. Stream sample rate is set to "auto detect"    
 * Search for MP3 decoder in "/mnt/sd0/BIN" directory   
*/
err = theAudio->initPlayer(AudioClass::Player0, AS_CODECTYPE_MP3, "/mnt/sd0/BIN", AS_SAMPLINGRATE_AUTO, AS_CHANNEL_MONO);

我為采樣率或通道類型設置了什么似乎并不重要,除非使用上述比特率,否則 MP3 無法正確播放。

從 SD 卡讀取

設置一個變量來了解如何訪問 SD 卡:

SDClass theSD;

設置一個變量來保存文件信息

File myDir;

打開SD卡根目錄》

Serial.println("Reading available quips from the SD card...");
myDir = theSD.open("/");

讀入文件并將它們放入一個數組中,以便稍后處理:

void getQuips(File dir, int numTabs) 
{ 
  String endTest = ".mp3"; 
  
  while (true) 
  {
     File entry =  dir.openNextFile();
  
     if (!entry || numQuips >= MAX_QUIPS) 
     { 
        // no more files
        break;
     }
   
     String entryName = entry.name();
     entryName.remove(0,1);
  
     if (!entry.isDirectory() && entryName.endsWith(endTest) && !entryName.equals("init.mp3"))
     {
        foundQuips[numQuips] = entryName;
        numQuips++;
     }    
  
     entry.close();
  }
}

關閉目錄:

myDir.close();

您一次只能打開一個文件。在這種情況下,與大多數文件系統一樣,目錄只是磁盤上的一個特殊文件。

讓聲音播放

設置一個變量來保存音頻實例:

AudioClass *theAudio;

設置音頻的基礎:

void setupAudio()
{
  puts("checking audio initialization");
  
  // make sure we are not calling this if there is nothing to call
  if(audioInitialized)
  { 
     puts("shutting down the audio subsystem"); 
     theAudio->end(); 
     sleep(1);
     audioInitialized = false;
   } 
  
   // start audio system  
   theAudio = AudioClass::getInstance();
   theAudio->begin(audio_attention_cb);
  
   puts("initialization Audio Library");
  
   /* Set clock mode to normal */
   theAudio->setRenderingClockMode(AS_CLKMODE_NORMAL);
  
   puts("setting player mode"); 
  
   /* Verify player initialize */
   if (err != AUDIOLIB_ECODE_OK)
   { 
      printf("Player0 initialize error\n"); 
      exit(1);
    }
  
   /* Main volume set to -16.0 dB */
   theAudio->setVolume(60);
  
   audioInitialized = true;
}

找出要玩的俏皮話:

if (canPlayQuip)
{  
   playQuip(foundQuips[(int)random(numQuips)]);
   currentQuip++;
   Serial.print("currentQuip: ");
   Serial.println(currentQuip);
}

設置播放器播放俏皮話并播放:

void playQuip(String fileName)
{  
    canPlayQuip = false;
    Serial.print("Playing: "); 
    Serial.println(fileName);  

    /* Open file placed on SD card */ 
    File myFile = theSD.open(fileName); 

    /* Verify file open */ 
    if (!myFile) 
    {   
        printf("File open error\n");   
        exit(1); 
    }  
    
    printf("Open! %s\n", myFile.name()); 
    theAudio->setPlayerMode(AS_SETPLAYER_OUTPUTDEVICE_SPHP, AS_SP_DRV_MODE_LINEOUT); 

    puts("player initialization");  

    /*   
     * Set main player to decode stereo mp3. Stream sample rate is set to "auto detect"   
     * Search for MP3 decoder in "/mnt/sd0/BIN" directory   
    */   
    err = theAudio->initPlayer(AudioClass::Player0, AS_CODECTYPE_MP3, "/mnt/sd0/BIN", AS_SAMPLINGRATE_AUTO, AS_CHANNEL_MONO);  

    /* Send first frames to be decoded */ 
    err = theAudio->writeFrames(AudioClass::Player0, myFile); 
    
    printf("Error: %d\n", err); 

    if ((err != AUDIOLIB_ECODE_OK) && (err != AUDIOLIB_ECODE_FILEEND)) 
    {   
        printf("File Read Error! =%d\n",err);   
        myFile.close();   
        exit(1); 
    }  
    
    puts("Play!");  

    theAudio->startPlayer(AudioClass::Player0);  
    delay(100);  
    
    puts("Stop!");  
    sleep(1);  

    theAudio->stopPlayer(AudioClass::Player0);  

    puts("closing file");  

    myFile.close();  

    puts("returning to ready mode");  
    theAudio->setReadyMode();
}

確保在完成后關閉文件,因為您只能打開一個文件。此外,將播放器返回到“就緒模式”,以便再次播放。

進一步的想法

我認為這是一個非常整潔的董事會,有很多可能性。我有點驚訝,板上沒有內置無線連接。有附加板可以解決這個問題,本節(jié)中的其他項目已經展示了如何做到這一點。我確實希望有一種方法可以通過 Arduino IDE 使用多個內核。這是一次很棒的學習經歷。

我開始考慮可以使用與我對這個項目所做的類似的方法來完成的其他項目。以下是其中的一些想法:

基于位置的答案

連接到傳感器并能夠通過讀取傳感器級別給出更有創(chuàng)意的答案。

把這個放在狗項圈里,這樣他們就可以和你說話了。

做一些鼓舞人心的俏皮話,讓它因團隊房間里的一些事件而消失,以激勵團隊走向偉大!

?


評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費