TactonPlayerPreciseNew::TactonPlayerPreciseNew(byte nbtactors, byte *pins, byte pwmPin)\r
:TactonPlayer(nbtactors, pins), _pwmPin(pwmPin)\r
{
- pinMode(_pwmPin, OUTPUT);
+ pinMode(_pwmPin, OUTPUT);\r
+ digitalWrite(_pwmPin, LOW);
init();\r
}\r
\r
void TactonPlayerPreciseNew::init() const\r
{\r
//init PWM timer\r
- TIMSK1 = 0;\r
- TCNT1 = 0;\r
- TCCR1A = 0; // CTC mode\r
- TCCR1B = (1 << WGM12) | (1 << CS10);\r
+// TCNT1 = 0;\r
+ //CTC mode\r
+ TCCR1A = (1 << COM1A0) | (1 << COM1B0); \r
+ TCCR1B = (1 << WGM12);\r
+ //set duty cycle to 0;\r
+ OCR1A = 0;\r
}\r
\r
void TactonPlayerPreciseNew::setFrequency(unsigned int frequency)\r
ocr = F_CPU / _frequency / 64 / 2 - 1;\r
prescalarbits = (1 << CS11) | (1 << CS10);\r
}\r
- /*\r
+ \r
Serial.print("_frequency=");\r
Serial.print(_frequency, DEC);\r
Serial.print(" prescalar=");\r
Serial.print(prescalarbits, BIN);\r
Serial.print(" ocr=");\r
- Serial.println(ocr, DEC);*/\r
+ Serial.println(ocr, HEX);\r
\r
+ //set pre-scaler\r
TCCR1B |= prescalarbits;\r
+ //set duty cycle\r
OCR1A = ocr;\r
+ Serial.print(" OCR1A=");\r
+ Serial.println(OCR1A, HEX);\r
+ //OCR1B = ocr;\r
/*\r
_ccper256cv = F_CPU / 512 / _frequency;\r
_currentcvi = 0;*/\r
Serial.println(_ccper256cv, DEC);*/\r
}\r
\r
-\r
void TactonPlayerPreciseNew::beep(byte pattern, unsigned long duration, unsigned int frequency, byte amplitude)\r
{\r
+ sei();\r
init();\r
- setFrequency(frequency);\r
- setAmplitude(amplitude);\r
- setDuration(duration);\r
- setPattern(pattern);
+// setAmplitude(amplitude);\r
+// setDuration(duration);\r
+// setPattern(pattern);
//set the pattern
for (int i = 0 ; i < _nbtactors ; i++)
{
- if (_pattern & (1 << i))\r
- {
- analogWrite(_pins[i], _amplitude);\r
- }
+ if (pattern & (1 << i))\r
+ analogWrite(_pins[i], amplitude);\r
+ else\r
+ digitalWrite(_pins[i], LOW);
}
- \r
- //_active = true;
-
+ \r
+ //set the frequency and activate the output\r
+ setFrequency(frequency);\r
+// analogWrite(9, 1);\r
+ /*\r
+ Serial.print("Start pattern");\r
+ Serial.println(pattern, HEX);\r
+ */
//Start the PWM\r
- TIMSK1 = (1 << OCIE1A);
-
- delay(duration);
+// TCCR1A |= 1 << COM1A1;\r
+// TIMSK1 = (1 << OCIE1A);
+// Serial.print("Wait");\r
+// Serial.println(duration, DEC);\r
+ delay(duration);\r
+ \r
+/* Serial.println("TCCR1");\r
+ Serial.println(TCCR1A, BIN);
+ Serial.println(TCCR1B, BIN);\r
+ */
//Stop the PWM
- TIMSK1 &= ~(1 << OCIE1A);\r
+// TIMSK1 &= ~(1 << OCIE1A);\r
+// TCCR1A &= ~(1 << COM1A1);\r
+\r
+ TCCR1A = 0;\r
+\r
+ //set duty cycle to 0\r
+ OCR1A = 0;\r
+ OCR1B = 0;\r
+ //clear the pattern\r
+ for (int i = 0 ; i < _nbtactors ; i++)\r
+ digitalWrite(_pins[i], LOW);\r
+\r
+// Serial.println("Stop");\r
// TIMSK2 = (1 << OCIE2A) | (1 << TOIE2);\r
// TIMSK2 = (1 << TOIE2);\r