31
Composants / Re : Teensy 3.1, 3.2 - Sonorisation locomotive
« le: juillet 19, 2018, 11:32:36 pm »
J'ai trouvé sur Ebay Allemagne une petite locomotive diesel de triage rouge (Echelle 1) pour une trentaine d'€.
J'ai changé le stator bobiné d'origine pour un rotor aimant permanent de chez ESU (+ charbons + Bandages adhérants +nettoyage complet du moteur).
J'ai récupéré certains sons sur "ESU Project".
Afin d'obtenir une grande réactivité pour la génération des sons (16 bits - 44kHz), certains fichiers son ne durent qu'environ 1 s.
Il existe certes, des petits claquements à reprise de lecture. Je pense régler cela avec un condensateur, à moins qu'il existe une solution logicielle ?
La commande du moteur et des leds sera effectuée à partir d'un Arduino Nano.
Celui-ci enverra les ordres de lecture de son ('a', 'z', 'e', 'r', 't', 'y', 'u', 'i') avec la ligne Serial (Tx Rx).
Le Teensy 3.2 recevra les ordres de lecture de son sur la ligne Serial (Tx1 Rx1) (qui est indépendante de sa ligne Serial Tx Rx de la liaison USB - PC : avantage du Teensy).
Ci-joint, le code de génération du son du Teensy :
J'ai changé le stator bobiné d'origine pour un rotor aimant permanent de chez ESU (+ charbons + Bandages adhérants +nettoyage complet du moteur).
J'ai récupéré certains sons sur "ESU Project".
Afin d'obtenir une grande réactivité pour la génération des sons (16 bits - 44kHz), certains fichiers son ne durent qu'environ 1 s.
Il existe certes, des petits claquements à reprise de lecture. Je pense régler cela avec un condensateur, à moins qu'il existe une solution logicielle ?
La commande du moteur et des leds sera effectuée à partir d'un Arduino Nano.
Celui-ci enverra les ordres de lecture de son ('a', 'z', 'e', 'r', 't', 'y', 'u', 'i') avec la ligne Serial (Tx Rx).
Le Teensy 3.2 recevra les ordres de lecture de son sur la ligne Serial (Tx1 Rx1) (qui est indépendante de sa ligne Serial Tx Rx de la liaison USB - PC : avantage du Teensy).
Ci-joint, le code de génération du son du Teensy :
Code: [Sélectionner]
// Diesel Henschel DHG 500
// Teensy 3.2 + SPI Flash + Serial1(Arduino Nano)
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
//'*' Type on Serial Monitor
//DHG_STA.TRW = 'a' Engine start
//DHG_STO.TRW = 'z' Stop Engine
//DHG_HOR.TRW = 'e' Horn
//DHG_SPE.TRW = 'r' Driving
//DHG_BRA.TRW = 't' Brake
//DHG_IDL.TRW = 'y' Idle
//DHG_UNC.TRW = 'u' Uncoupling
//DHG_ACC.TRW = 'i' Acceleration
const int FLASH_CHIP_SELECT = 10;
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioPlaySerialflashRaw playFlashRaw1; //xy=228,273
AudioOutputAnalog dac1; //xy=751,337
AudioConnection patchCord1(playFlashRaw1, 0, dac1, 0);
// GUItool: end automatically generated code
int Data; // Read serial data
int PrevData; // Read previous serial data
int i = 0;
void setup() {
Serial.begin(9600); // Serial setup
while (!Serial && millis()<500 );
AudioMemory(50);//
// analogReference(EXTERNAL);// 3,3V Amplitude DAC
//************************************
// Set up SPI Teensy without audio Card
SPI.setMOSI(11); //7
SPI.setMISO(12);
SPI.setSCK(14);
//************************************
delay(2000);
if (!SerialFlash.begin(FLASH_CHIP_SELECT)) {
while (1){
Serial.println ("Cannot access SPI Flash chip");
delay (10000);
}
}
}
void playFile1(const char *filename)// Play audio file function
{
SerialFlashFile ff = SerialFlash.open(filename);
Serial.print("Playing file1: ");
Serial.println(ff);
playFlashRaw1.play(filename);
// Simply wait for the file to finish playing.
while (playFlashRaw1.isPlaying()) {
}
}
void loop() {
if ( Serial.available() ) {
Data = Serial.read();
Serial.println(Data);
}
else {
Serial.println("Nothing");
}
switch (Data) {
case 'a':{ // Play Soundfile in loop : Start
playFile1("DHG_STA.TRW");
Serial.println("DHG_STA.TRW");
Data = 'y';
playFile1("DHG_IDL.TRW");
Serial.println("DHG_IDL.TRW");
break;
}
case 'z':{ // Play Soundfile in loop : Stop
playFile1("DHG_STO.TRW");
Serial.println("DHG_STO.TRW");
Data = 'o';
break;
}
case 'e':{ // Play Soundfile only once : Horn
playFile1("DHG_HOR.TRW");
Serial.println("DHG_HOR.TRW");
Data=PrevData; // Continue with previous soundfile
Serial.println(Data);
break;
}
case 'r':{ // Play Soundfile in loop : Full Speed
PrevData = 'r';
playFile1("DHG_SPE.TRW");
Serial.println("DHG_SPE.TRW");
break;
}
case 't':{ // Play Soundfile in loop : Brake
PrevData = 't';
playFile1("DHG_BRA.TRW");
Data = 'y';
playFile1("DHG_IDL.TRW");
break;
}
case 'y':{ // Play Soundfile in loop : Idle
PrevData = 'y';
playFile1("DHG_IDL.TRW");
Serial.println("DHG_IDL.TRW");
break;
}
case 'u':{ // Play Soundfile in loop : Uncoupling
PrevData = 'u';
playFile1("DHG_UNC.TRW");
Serial.println("DHG_UNC.TRW");
Data = 'y';
playFile1("DHG_IDL.TRW");
Serial.println("DHG_IDL.TRW");
break;
}
case 'i':{ // Play Soundfile in loop : Uncoupling
PrevData = 'i';
playFile1("DHG_ACC.TRW");
Serial.println("DHG_UNC.TRW");
Data = 'r';
playFile1("DHG_IDL.TRW");
Serial.println("DHG_IDL.TRW");
break;
}
}
}