Fix tacton player
authorThomas Pietrzak <thomas.pietrzak@gmail.com>
Fri, 30 Mar 2012 15:46:52 +0000 (15:46 +0000)
committerThomas Pietrzak <thomas.pietrzak@gmail.com>
Fri, 30 Mar 2012 15:46:52 +0000 (15:46 +0000)
git-svn-id: svn+ssh://thomaspietrzak.com/var/svn/rep@72 47cf9a05-e0a8-4ed5-9e9b-101a649bc004

Arduino/TactonPlayer/TactonPlayerPreciseNew.cpp

index cdfa842fe6677584726385093a38f769907fe738..850e8c21e3b24b82b4f458bdd8576cecf30e484b 100644 (file)
@@ -4,17 +4,20 @@
 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
@@ -29,16 +32,21 @@ void TactonPlayerPreciseNew::setFrequency(unsigned int frequency)
                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
@@ -49,33 +57,56 @@ void TactonPlayerPreciseNew::setFrequency(unsigned int frequency)
        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