manhoosbilli1

FINAL CODE ARDUINO ESP32 SIGN LANGUAGE TRANSLATOR

Feb 24th, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <LiquidCrystal_I2C.h>
  2. #include <TinyGPS++.h>
  3. #include "SD.h"
  4. #include "TMRpcm.h"
  5. #include "SPI.h"
  6. #include <Wire.h>
  7. //save the wav files with the same same as the command or speech
  8.  
  9. bool cmd1Flag, cmd2Flag, cmd3Flag, cmd4Flag, cmd5Flag, cmd6Flag, playFlag, timerFlag;
  10. String command = "";
  11. String com, lastPath, lastS;
  12. float latitude, longitude;
  13. unsigned long lastTrigger, lastTrigger1, lastTrigger2, timer;         //timers
  14. ;
  15. //flex sensor
  16. #define fingerPin1 A0
  17. int minimumVal1 = 850;
  18. int maximumVal1 = 930;
  19.  
  20. #define fingerPin2 A6                // sensors one leg to vcc via a 10k resistor.connect node of 10k resistor and sensor leg to input pin. and the other to ground
  21. int minimumVal2 = 930 ;
  22. int maximumVal2 = 960 ;
  23.  
  24. #define fingerPin3 A5
  25. int minimumVal3 = 835;
  26. int maximumVal3 = 865;
  27.  
  28.  
  29. //-------------
  30. bool Finger1, Finger2, Finger3;
  31. int finger1, finger2, finger3;
  32.  
  33. //instantiations and initializations
  34. #define SD_ChipSelectPin 53
  35. LiquidCrystal_I2C lcd(0x27, 16, 2);
  36. TMRpcm tmrpcm;
  37. //serial2 is esp
  38. //serial3 is gps
  39. TinyGPSPlus gps;
  40. bool test = false;
  41. //---------------
  42.  
  43. String path;
  44. void setup() {
  45.   // put your setup code here, to run once:
  46.   tmrpcm.speakerPin = 11;
  47.   Serial.begin(9600);
  48.   Serial1.begin(9600);
  49.   Serial3.begin(9600);   //esp
  50.  
  51.  
  52.   // tmrpcm.loop(0);                        //turn off audio looping
  53.   lcd.init();
  54.   lcd.backlight();
  55.   lcd.setCursor(0, 0);
  56.   lcd.print("Command:      ");
  57.   lcd.setCursor(0, 1);
  58.   //tmrpcm.loop(0);
  59.   if (!SD.begin(SD_ChipSelectPin)) {
  60.     return;
  61.   }
  62.   delay(100);
  63.   tmrpcm.setVolume(7);
  64.   tmrpcm.quality(0);
  65.  
  66. }
  67. void loop() {
  68.   //getting ADC reading
  69.   finger1 = analogRead(fingerPin1);
  70.   finger2 = analogRead(fingerPin2);
  71.   finger3 = analogRead(fingerPin3);
  72.   //mapping values
  73.   if (finger1 <= minimumVal1) {
  74.     Finger1 = 1;
  75.   } else if (finger1 >= maximumVal1) {
  76.     Finger1 = 0;
  77.   }
  78.   if (finger2 <= minimumVal2) {
  79.     Finger2 = 1;
  80.   } else if (finger2 >= maximumVal2) {
  81.     Finger2 = 0;
  82.   }
  83.   if (finger3 <= minimumVal3) {
  84.     Finger3 = 1;
  85.   } else if (finger3 >= maximumVal3) {
  86.     Finger3 = 0;
  87.   }
  88.  
  89.   lcd.setCursor(9, 0);
  90.   lcd.print(Finger1);
  91.   lcd.print(",");
  92.   lcd.print(Finger2);
  93.   lcd.print(",");
  94.   lcd.print(Finger3);
  95.  
  96.   Serial.println("In loop");
  97.   if (Finger1 == 1 && Finger2 == 1 && Finger3 == 1) {
  98.     cmd1Flag = true;
  99.     path = "A.wav";
  100.   } else if (Finger1 == 0 && Finger2 == 1 && Finger3 == 1) {
  101.     cmd2Flag = true;
  102.     path = "B.wav";
  103.   } else if (Finger1 == 0 && Finger2 == 1 && Finger3 == 0) {
  104.     cmd3Flag = true;
  105.     path = "C.wav";
  106.   } else if (Finger1 == 1 && Finger2 == 0 && Finger3 == 0) {
  107.     cmd4Flag = true;
  108.     path = "D.wav";
  109.   } else if (Finger1 == 0 && Finger2 == 0 && Finger3 == 0) {
  110.     cmd5Flag = true;
  111.     path = "E.wav";
  112.  
  113.   }
  114.   if (path != lastPath) {
  115.     if (cmd1Flag) {
  116.       lcd.setCursor(0, 1);
  117.       lcd.print("Command 1         ");
  118.       com = "command 1";
  119.       tmrpcm.play("A.wav");
  120.       Serial.print("playing A.wav");
  121.       cmd1Flag = false;
  122.     } else if (cmd2Flag) {
  123.       lcd.setCursor(0, 1);
  124.       lcd.print("Command 2         ");
  125.       com = "command 2";
  126.       tmrpcm.play("B.wav");
  127.       Serial.print("Playing B.wav");
  128.       cmd2Flag = false;
  129.     } else if (cmd3Flag) {
  130.       lcd.setCursor(0, 1);
  131.       lcd.print("Command 3         ");
  132.       tmrpcm.play("C.wav");
  133.       com = "command 3";
  134.       Serial.print("Playing C.wav");
  135.       cmd3Flag = false;
  136.     } else if (cmd4Flag) {
  137.       lcd.setCursor(0, 1);
  138.       lcd.print("Command 4         ");
  139.       com = "command 4";
  140.       tmrpcm.play("D.wav");
  141.       Serial.print("Playing D.wav");
  142.       cmd4Flag = false;
  143.     } else if (cmd5Flag) {
  144.       lcd.setCursor(0, 1);
  145.       lcd.print("Command 5         ");
  146.       com = "command 5";
  147.       tmrpcm.play("E.wav");
  148.       Serial.print("Playing E.wav");
  149.       cmd5Flag = false;
  150.     }
  151.     lastPath = path;
  152.   }
  153.   if (millis() - lastTrigger >= 2000) {                            //will continously print to serial every 2 second with values
  154.     command_encoder(latitude, longitude, com);
  155.     lastTrigger = millis();
  156.     Serial.println("data sent");
  157.   }
  158.   while (Serial1.available() > 0) {
  159.     gps.encode(Serial1.read());
  160.     if (gps.location.isUpdated()) {
  161.       latitude = gps.location.lat();
  162.       longitude = gps.location.lng();
  163.     }
  164.   }
  165.   delay(500);
  166. }
  167. void command_encoder(float lati, float longi, String com) {
  168.   char latitude[12];
  169.   char longitude[12];
  170.   Serial3.print('#');
  171.   dtostrf(lati, 9, 6, latitude);      //convert to char
  172.   Serial3.print(latitude);
  173.   Serial3.print(',');
  174.   dtostrf(longi, 9, 6, longitude);
  175.   Serial3.print(longitude);
  176.   Serial3.print('`');
  177.   Serial3.print(com);
  178.   Serial.print('\n');
  179. }
  180. /*
  181.   //this will print to lcd, feed the com string to send to esp, and also say it using speaker
  182.   char* string2char(String command) {
  183.   if (command.length() != 0) {
  184.     char *p = const_cast<char*>(command.c_str());
  185.     return p;
  186.   }
  187.   }
  188.  
  189.   void say(String s) {                  //NEW FUNCTION UNCONFIRMED
  190.   char* filename;
  191.   if (s != lastS) {                      //if command has changed
  192.     String i = s;                        //make a string i concat the space and feed to function
  193.     i += "               ";
  194.     lcd.setCursor(0, 1);                 //print to lcd
  195.     lcd.print(i);
  196.     com = s;
  197.     String wavPath = s;                  //setting up the filename string here
  198.     wavPath += ".wav";
  199.     filename = string2char(wavPath);      //feeding it to filename to convert to char
  200.     playFlag = true;
  201.     timerFlag = true;
  202.     lastS = s;                           //save the current command to compare later
  203.   }
  204.   if (playFlag) {
  205.     if (timerFlag) {                                                                      //DIDNT WORK CAUSE OF FILEPATH CHAR
  206.       timer = millis();                  //record the time
  207.       timerFlag = false;
  208.     }
  209.     tmrpcm.play(filename);               //if timer expires or if audio is not playing anymore
  210.     if ((millis() - timer > 1000) || (!tmrpcm.isPlaying())) {        //get out of the loop
  211.       playFlag = false;
  212.     }
  213.   } else {
  214.     tmrpcm.stopPlayback();              //stop the music if not already stopped
  215.   }
  216.   }
  217.  
  218.   /*
  219.   void playAudio(String path) {       //turn on flag when you want to play*/
Add Comment
Please, Sign In to add comment