--- /dev/null
+#include "Arduino.h"\r
+#include "TactonPlayerPreciseNew.h"\r
+\r
+TactonPlayerPreciseNew::TactonPlayerPreciseNew(byte nbtactors, byte *pins, byte pwmPin)\r
+:TactonPlayer(nbtactors, pins), _pwmPin(pwmPin)\r
+{
+ pinMode(_pwmPin, OUTPUT);
+ 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
+}\r
+\r
+void TactonPlayerPreciseNew::setFrequency(unsigned int frequency)\r
+{\r
+ TactonPlayer::setFrequency(frequency);\r
+ \r
+ unsigned long ocr = F_CPU / _frequency / 2 - 1;\r
+ byte prescalarbits = (1 << CS10);\r
+ \r
+ if (ocr > 0xffff)\r
+ {\r
+ ocr = F_CPU / _frequency / 64 / 2 - 1;\r
+ prescalarbits = (1 << CS11) | (1 << CS10);\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
+\r
+ TCCR1B |= prescalarbits;\r
+ OCR1A = ocr;\r
+/*\r
+ _ccper256cv = F_CPU / 512 / _frequency;\r
+ _currentcvi = 0;*/\r
+\r
+/* Serial.print("_frequency=");\r
+ Serial.print(_frequency, DEC);\r
+ Serial.print(" _ccper256cv=");\r
+ Serial.println(_ccper256cv, DEC);*/\r
+}\r
+\r
+\r
+void TactonPlayerPreciseNew::beep(byte pattern, unsigned long duration, unsigned int frequency, byte amplitude)\r
+{\r
+ init();\r
+ setFrequency(frequency);\r
+ 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
+ }
+ }
+ \r
+ //_active = true;
+
+ //Start the PWM\r
+ TIMSK1 = (1 << OCIE1A);
+
+ delay(duration);
+
+ //Stop the PWM
+ TIMSK1 &= ~(1 << OCIE1A);\r
+
+// TIMSK2 = (1 << OCIE2A) | (1 << TOIE2);\r
+// TIMSK2 = (1 << TOIE2);\r
+// sei();\r
+}\r
+\r
--- /dev/null
+#ifndef _TACTONPLAYERPRECISENEW_\r
+#define _TACTONPLAYERPRECISENEW_\r
+\r
+#include "Arduino.h"\r
+\r
+#include <TactonPlayer.h>\r
+\r
+class TactonPlayerPreciseNew: public TactonPlayer\r
+{\r
+ public:\r
+ TactonPlayerPreciseNew(byte nbtactors, byte *pins, byte pwmPin);\r
+ \r
+ //8bits pattern => max 8 tactors, change type if using more\r
+ void beep(byte pattern, unsigned long duration, unsigned int frequency, byte amplitude);\r
+\r
+ private:\r
+ void init() const; \r
+ void setFrequency(unsigned int frequency);\r
+ //void setDuration(unsigned long duration);\r
+ //void setAmplitude(byte amplitude);\r
+ //void setPattern(byte pattern);\r
+\r
+ byte _pwmPin;\r
+};\r
+\r
+#endif\r