Minor changes

This commit is contained in:
alastaira
2023-09-26 10:27:52 +01:00
parent 41318bff92
commit 2775c70bc3
4 changed files with 393 additions and 11 deletions

View File

@@ -205,7 +205,7 @@ static const EyeConfig Preset_Skeptic_Alt = {
.Inverse_Offset_Bottom = 0 .Inverse_Offset_Bottom = 0
}; };
static const EyeConfig Preset_Fustrated = { static const EyeConfig Preset_Frustrated = {
.OffsetX = 3, .OffsetX = 3,
.OffsetY = -5, .OffsetY = -5,
.Height = 12, .Height = 12,

View File

@@ -119,8 +119,8 @@ void FaceExpression::GoTo_Skeptic()
void FaceExpression::GoTo_Frustrated() void FaceExpression::GoTo_Frustrated()
{ {
ClearVariations(); ClearVariations();
_face.RightEye.TransitionTo(Preset_Fustrated); _face.RightEye.TransitionTo(Preset_Frustrated);
_face.LeftEye.TransitionTo(Preset_Fustrated); _face.LeftEye.TransitionTo(Preset_Frustrated);
} }
void FaceExpression::GoTo_Unimpressed() void FaceExpression::GoTo_Unimpressed()

380
doc/eyes.svg Normal file
View File

@@ -0,0 +1,380 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="210mm"
height="297mm"
viewBox="0 0 210 297"
version="1.1"
id="svg1"
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
sodipodi:docname="eyes.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="true"
inkscape:zoom="1.8088339"
inkscape:cx="247.12054"
inkscape:cy="273.38055"
inkscape:window-width="1920"
inkscape:window-height="1057"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer1">
<inkscape:grid
id="grid2"
units="px"
originx="0"
originy="0"
spacingx="0.26458333"
spacingy="0.26458334"
empcolor="#0099e5"
empopacity="0.30196078"
color="#0099e5"
opacity="0.14901961"
empspacing="5"
dotted="false"
gridanglex="30"
gridanglez="30"
visible="true" />
</sodipodi:namedview>
<defs
id="defs1">
<marker
style="overflow:visible"
id="Triangle"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path135" />
</marker>
<marker
style="overflow:visible"
id="marker7"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path7" />
</marker>
<marker
style="overflow:visible"
id="Triangle-6"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path135-1" />
</marker>
<marker
style="overflow:visible"
id="marker7-5"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path7-6" />
</marker>
<marker
style="overflow:visible"
id="Triangle-6-4"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path135-1-3" />
</marker>
<marker
style="overflow:visible"
id="marker7-5-9"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path7-6-9" />
</marker>
<marker
style="overflow:visible"
id="Triangle-6-4-1"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path135-1-3-4" />
</marker>
<marker
style="overflow:visible"
id="marker7-5-9-3"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path7-6-9-4" />
</marker>
<marker
style="overflow:visible"
id="Triangle-6-4-1-0"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path135-1-3-4-3" />
</marker>
<marker
style="overflow:visible"
id="marker7-5-9-3-5"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Triangle arrow"
markerWidth="0.5"
markerHeight="0.5"
viewBox="0 0 1 1"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid"
markerUnits="userSpaceOnUse">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path7-6-9-4-7" />
</marker>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
id="rect1"
style="fill:#5c5cd6;stroke:#5c5cd6;fill-opacity:1;stroke-opacity:1"
d="m 52.777002,65.007195 32.770035,8.466667 c 4.810658,1.242911 8.968641,4.000014 8.968641,8.968641 v 16.557491 c 0,4.968626 -1.354181,6.322816 -6.322808,6.322816 H 50.131169 c -4.968627,0 -6.322808,-1.35419 -6.322808,-6.322816 V 73.975836 c 0,-4.968627 4.157983,-10.211552 8.968641,-8.968641 z"
sodipodi:nodetypes="sssssssss" />
<path
style="fill:none;stroke:#000000;stroke-width:0.851072;stroke-dasharray:0.851072, 0.851072;stroke-dashoffset:0"
d="M 100.54166,80.697919 H 38.364582"
id="path2"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.912251;stroke-dasharray:1.8245, 0.912251;stroke-dashoffset:0"
d="M 107.15625,72.760419 H 35.718747"
id="path2-6"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.855516;stroke-dasharray:0.855516, 0.855516;stroke-dashoffset:0"
d="M 99.880204,99.218753 H 37.703126"
id="path3"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.962267;stroke-dasharray:0.962267, 0.962267;stroke-dashoffset:0"
d="m 48.947915,111.125 0,-50.270831"
id="path4"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.963503;stroke-dasharray:0.963503, 0.963503;stroke-dashoffset:0"
d="M 88.635414,60.854171 V 111.125"
id="path5"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;stroke-dashoffset:0;marker-start:url(#Triangle);marker-end:url(#marker7)"
d="m 34.395832,83.343753 c 0,14.552084 0,14.552084 0,14.552084"
id="path6" />
<text
xml:space="preserve"
style="font-size:3.52778px;font-family:'Gill Sans MT';-inkscape-font-specification:'Gill Sans MT';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stroke-dashoffset:0"
x="22.274263"
y="92.080513"
id="text7"><tspan
sodipodi:role="line"
id="tspan7"
style="font-size:3.52778px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.5"
x="22.274263"
y="92.080513">Height</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;stroke-dashoffset:0;marker-start:url(#Triangle-6);marker-end:url(#marker7-5)"
d="m 51.593751,113.77084 35.718746,0"
id="path6-9"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;stroke-dashoffset:0;marker-start:url(#Triangle-6-4);marker-end:url(#marker7-5-9)"
d="m 91.281247,113.77084 2.645834,0"
id="path6-9-4"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:3.52778px;font-family:'Gill Sans MT';-inkscape-font-specification:'Gill Sans MT';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stroke-dashoffset:0"
x="64.306145"
y="117.60609"
id="text7-6"><tspan
sodipodi:role="line"
style="font-size:3.52778px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.5"
x="64.306145"
y="117.60609"
id="tspan8">Width</tspan></text>
<text
xml:space="preserve"
style="font-size:3.52777px;font-family:'Gill Sans MT';-inkscape-font-specification:'Gill Sans MT';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stroke-dashoffset:0"
x="89.74733"
y="118.82307"
id="text9"><tspan
sodipodi:role="line"
id="tspan9"
style="stroke-width:0.5"
x="89.74733"
y="118.82307">Radius</tspan><tspan
sodipodi:role="line"
style="stroke-width:0.5"
x="89.74733"
y="123.23278"
id="tspan10">Bottom</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;stroke-dashoffset:0;marker-start:url(#Triangle-6-4-1);marker-end:url(#marker7-5-9-3)"
d="m 99.218747,78.052086 0,-2.645834"
id="path6-9-4-4"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:3.52777px;font-family:'Gill Sans MT';-inkscape-font-specification:'Gill Sans MT';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stroke-dashoffset:0"
x="102.53122"
y="76.646492"
id="text9-2"><tspan
sodipodi:role="line"
id="tspan9-6"
style="stroke-width:0.5"
x="102.53122"
y="76.646492">Radius</tspan><tspan
sodipodi:role="line"
style="stroke-width:0.5"
x="102.53122"
y="81.056206"
id="tspan10-3">Top</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-dasharray:none;stroke-dashoffset:0;marker-start:url(#Triangle-6-4-1-0);marker-end:url(#marker7-5-9-3-5)"
d="m 92.604164,70.114586 0,-5.291667"
id="path6-9-4-4-8"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:3.52777px;font-family:'Gill Sans MT';-inkscape-font-specification:'Gill Sans MT';fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.499999;stroke-dasharray:none;stroke-dashoffset:0"
x="95.266388"
y="69.306709"
id="text9-2-7"><tspan
sodipodi:role="line"
style="stroke-width:0.5"
x="95.266388"
y="69.306709"
id="tspan10-3-5">Slope x Height</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -11,8 +11,10 @@
#include "Face.h" #include "Face.h"
// CONSTANTS // CONSTANTS
const byte joystickPins[] = {26, 25}; const byte joystickPins[] = {25, 26};
const byte blinkPin = 16; const byte blinkPin = 16;
const byte moodPins[] = {12, 13, 15};
const eEmotions moods[] = {eEmotions::Angry, eEmotions::Sad, eEmotions::Surprised};
// GLOBALS // GLOBALS
Face *face; Face *face;
@@ -31,7 +33,7 @@ void setup(void) {
face->Expression.GoTo_Normal(); face->Expression.GoTo_Normal();
// Assign a weight to each emotion // Assign a weight to each emotion
face->Behavior.SetEmotion(eEmotions::Normal, 1.0); //face->Behavior.SetEmotion(eEmotions::Normal, 1.0);
//face->Behavior.SetEmotion(eEmotions::Angry, 1.0); //face->Behavior.SetEmotion(eEmotions::Angry, 1.0);
//face->Behavior.SetEmotion(eEmotions::Sad, 1.0); //face->Behavior.SetEmotion(eEmotions::Sad, 1.0);
// Automatically switch between behaviours (selecting new behaviour randomly based on the weight assigned to each emotion) // Automatically switch between behaviours (selecting new behaviour randomly based on the weight assigned to each emotion)
@@ -67,7 +69,7 @@ void loop(){
int yRaw = analogRead(25); int yRaw = analogRead(25);
int xRaw = analogRead(26); int xRaw = analogRead(26);
float y = mapFloat(yRaw, 0, 4095, 1.0, -1.0); float y = mapFloat(yRaw, 0, 4095, 1.0, -1.0);
float x = mapFloat(xRaw, 0, 4095, 1.0, -1.0); float x = mapFloat(xRaw, 0, 4095, -1.0, 1.0);
face->Look.LookAt(x, y); face->Look.LookAt(x, y);
lastMoveTime = millis(); lastMoveTime = millis();
} }
@@ -76,12 +78,12 @@ void loop(){
face->DoBlink(); face->DoBlink();
} }
/*
// Use this code to set a particular emotion from a button // Use this code to set a particular emotion from a button
int32_t potValue = analogRead(15); for(int i=0; i<3; i++){
float anger = map(potValue, 0, 4095, 0.0, 2.0); int32_t potValue = analogRead(moodPins[i]);
face->Behavior.SetEmotion(eEmotions::Angry, anger); float moodLevel = map(potValue, 0, 4095, 0.0, 2.0);
*/ face->Behavior.SetEmotion(moods[i], moodLevel);
}
// Update the face! // Update the face!
face->Update(); face->Update();