From 4006d23649b328288306264eb5ad5b456fd986dd Mon Sep 17 00:00:00 2001 From: Lukas Bachschwell Date: Thu, 23 Nov 2017 15:36:57 +0100 Subject: [PATCH] Adding sounds and ESP32 workaround for ledc and Adafruit_NeoPixel --- SimpleExpressions.cpp | 125 +++++++++++++++++++++++------------------- SimpleExpressions.h | 15 +++-- 2 files changed, 75 insertions(+), 65 deletions(-) diff --git a/SimpleExpressions.cpp b/SimpleExpressions.cpp index d5833e7..2c359fb 100755 --- a/SimpleExpressions.cpp +++ b/SimpleExpressions.cpp @@ -1,19 +1,16 @@ #include "Arduino.h" #include "SimpleExpressions.h" +#define ledc_channel 5 + void SimpleExpressionsClass::init(int mouthPin, int buzzerPin) { mouth = Adafruit_NeoPixel(7, mouthPin, NEO_GRB + NEO_KHZ800); mouth.begin(); - mouth.show(); - pinBuzzer = buzzerPin; - pinMode(buzzerPin, OUTPUT); + ledcSetup(ledc_channel, 2000, 8); // channel, max frequency, resolution + ledcAttachPin(buzzerPin, ledc_channel); - int freq = 2000; - int channel = 1; - int resolution = 8; - ledcSetup(1, freq, resolution); - ledcAttachPin(buzzerPin, 1); + clearMouth(); } /////////////////////////////////////////////////////////////////// @@ -27,7 +24,7 @@ void SimpleExpressionsClass::putAnimationMouth(int aniMouth, int index){ */ -void SimpleExpressionsClass::writeMouth(char mouthName[], int r, int g, int b){ +void SimpleExpressionsClass::writeMouth(char mouthName[], int r, int g, int b) { int number = -1; for(int i = 0; i < frameCount; i++){ if(strncmp(shapes[i].name, mouthName, 20) == 0) { @@ -48,9 +45,11 @@ void SimpleExpressionsClass::printMouth(int number, int r, int g, int b) { else mouth.setPixelColor(i, 0); } mouth.show(); + delay(1); + clearPixels(); } -void SimpleExpressionsClass::writeMouth(char mouthName[] ){ +void SimpleExpressionsClass::writeMouth(char mouthName[] ) { int number = -1; for(int i = 0; i < colorFrameCount; i++){ if(strncmp(shapes[i].name, mouthName, 20) == 0) { @@ -70,6 +69,8 @@ void SimpleExpressionsClass::printMouth(int number) { mouth.setPixelColor(i, mouth.Color(colorShapes[number].data[i][0], colorShapes[number].data[i][1], colorShapes[number].data[i][2])); } mouth.show(); + delay(1); + clearPixels(); } @@ -79,6 +80,8 @@ void SimpleExpressionsClass::writeMouthGeneric(const bool mouthArray[7], int r, else mouth.setPixelColor(i, 0); } mouth.show(); + delay(1); + clearPixels(); } void SimpleExpressionsClass::writeMouthGeneric(const int mouthArray[7][3]) { @@ -86,16 +89,27 @@ void SimpleExpressionsClass::writeMouthGeneric(const int mouthArray[7][3]) { mouth.setPixelColor(i, mouth.Color(mouthArray[i][0], mouthArray[i][1], mouthArray[i][2])); } mouth.show(); + delay(1); + clearPixels(); } -void SimpleExpressionsClass::clearMouth(){ - for(uint16_t i=0; i