Here a video describing how I managed to make a a 3-in-1 Piezo Buzzer, Sensor and Haptic Actuator!
/*This SW is just a dummy*/
#define HAPTIC_PERIOD1 30
#define HAPTIC_PERIOD2 (HAPTIC_PERIOD1*2)
#define HAPTIC_PERIOD3 130
int analogPin = A1;
int Gate1 = 12; /*Use Pin12 for Gate1*/
int Gate2 = 13; /*Use Pin13 for Gate1*/
int FreqToogle = 8;
int ENPin = 7;
int GateToggle = 1;
int ToggleMode = 1;
int sensorlast = 0;
void setup() {
pinMode(Gate1, OUTPUT);
pinMode(Gate2, OUTPUT);
pinMode(FreqToogle, OUTPUT);
pinMode(ENPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
delay(20);
digitalWrite(Gate1, LOW);
digitalWrite(Gate2, LOW);
digitalWrite(ENPin, LOW);
int sensor = analogRead(sensor); // read the input pin
int der = sensor - sensorlast;
if(der > 5){
/*Touch detected*/
digitalWrite(ENPin, HIGH);
for (int p = 0; p < HAPTIC_PERIOD3; p++){
digitalWrite(FreqToogle, HIGH);
for (int i = 0; i < 5; i++){
if(i >= GateToggle){
digitalWrite(Gate1, LOW);
digitalWrite(Gate2, HIGH);
}
else{
digitalWrite(Gate1, HIGH);
digitalWrite(Gate2, LOW);
}
}
digitalWrite(FreqToogle, LOW);
ToggleMode++;
if(ToggleMode == HAPTIC_PERIOD1){
GateToggle++;
if(GateToggle == 6){
GateToggle = 5;
ToggleMode = HAPTIC_PERIOD1+1;
}
else{
ToggleMode = 0;
}
}
if(ToggleMode == (HAPTIC_PERIOD2)){
GateToggle--;
if(GateToggle == 0){
ToggleMode = 0;
}
else{
ToggleMode = HAPTIC_PERIOD1+1;
}
}
}
for (int w = 0; w < 400; w++){
for (int p = 0; p < HAPTIC_PERIOD3; p++){
digitalWrite(FreqToogle, HIGH);
for (int i = 0; i < 5; i++){
if(i >= GateToggle){
digitalWrite(Gate1, LOW);
digitalWrite(Gate2, HIGH);
}
else{
digitalWrite(Gate1, HIGH);
digitalWrite(Gate2, LOW);
}
}
digitalWrite(FreqToogle, LOW);
ToggleMode++;
if(ToggleMode == 2){
GateToggle++;
if(GateToggle == 6){
GateToggle = 5;
ToggleMode = 3;
}
else{
ToggleMode = 0;
}
}
if(ToggleMode == 4){
GateToggle--;
if(GateToggle == 0){
ToggleMode = 0;
}
else{
ToggleMode = 3;
}
}
}
}
delay(500);
}
else{
/*Keep searching for my finger*/
}
sensorlast = sensor;
}
Comments