mirror of
				https://github.com/esp8266/Arduino.git
				synced 2025-11-03 14:33:37 +03:00 
			
		
		
		
	Fixes #427 Adds a basic I2S class based off of the Arduino-SAMD core. The raw i2s_xxx functions are still a better way to use I2S due to their flexibility, but this will allow basic Arduino sketches to work.
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/*
 | 
						|
  This example generates a square wave based tone at a specified frequency
 | 
						|
  and sample rate. Then outputs the data using the I2S interface to a
 | 
						|
  MAX08357 I2S Amp Breakout board.
 | 
						|
 | 
						|
  created 17 November 2016
 | 
						|
  by Sandeep Mistry
 | 
						|
  modified for ESP8266 by Earle F. Philhower, III <earlephilhower@yahoo.com>
 | 
						|
*/
 | 
						|
 | 
						|
#include <I2S.h>
 | 
						|
 | 
						|
const int frequency = 440; // frequency of square wave in Hz
 | 
						|
const int amplitude = 500; // amplitude of square wave
 | 
						|
const int sampleRate = 8000; // sample rate in Hz
 | 
						|
 | 
						|
const int halfWavelength = (sampleRate / frequency); // half wavelength of square wave
 | 
						|
 | 
						|
short sample = amplitude; // current sample value
 | 
						|
int count = 0;
 | 
						|
 | 
						|
void setup() {
 | 
						|
  Serial.begin(115200);
 | 
						|
  Serial.println("I2S simple tone");
 | 
						|
 | 
						|
  // start I2S at the sample rate with 16-bits per sample
 | 
						|
  if (!I2S.begin(I2S_PHILIPS_MODE, sampleRate, 16)) {
 | 
						|
    Serial.println("Failed to initialize I2S!");
 | 
						|
    while (1); // do nothing
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
void loop() {
 | 
						|
  if (count % halfWavelength == 0) {
 | 
						|
    // invert the sample every half wavelength count multiple to generate square wave
 | 
						|
    sample = -1 * sample;
 | 
						|
  }
 | 
						|
 | 
						|
  // write the same sample twice, once for left and once for the right channel
 | 
						|
  I2S.write(sample);
 | 
						|
  I2S.write(sample);
 | 
						|
 | 
						|
  // increment the counter for the next sample
 | 
						|
  count++;
 | 
						|
}
 | 
						|
 |