/* Program coding of muscle stimulation and hot compress , Neramitr Chirakanphaisarn, mit9bkk@gmail.com */
// This program that shows charactor LCD size 20x4 (lcd12864)(20characters,4rows)
// The wiring diagram please see picture of Muscle Stimulation and Hot compress. This code is completed by wiring diagram sure!
// Mr.Neramitr Chirakanphaisarn, mit9bkk@gmail.com
#include <SoftwareSerial.h>
#include <SD.h> // used SD CARD module for reading and writing the log data
#include <LiquidCrystal.h> // used library of SLCD module with 16 digits x 2 lines
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // assigned the SLCD functions of 20 digits x 4 lines
#define ANALOG_PIN4 4 // Sweep the Subject ID or No. to Analog input A4 of ADK R3 mega2560
int analogValue4 = 4 ; // Sweep the Subject ID or No. to Analog input A4 of ADK R3 mega2560
#define ANALOG_PIN 5 // Sweep the Subject AGE to Analog input A5 of ADK R3 mega2560
int analogValue = 5; // Sweep the Subject AGE to Analog input A5 of ADK R3 mega2560
#define ANALOG_PIN3 3 // Sweep the Stimulate time to Analog input A3 of ADK R3 mega2560
int analogValue3 = 3; // Sweep the Stimulate time to Analog input A3 of ADK R3 mega2560
#define ANALOG_PIN0 0 // Sweep the Stimulate Level to Analog input A0 of ADK R3 mega2560
int analogValue0 = 0; // Sweep the Stimulate Level to Analog input A0 of ADK R3 mega2560
#define ANALOG_PIN1 1 // Sweep the Frequency to Analog input A1 of ADK R3 mega2560
int analogValue1 = 1; // Sweep the Frequency to Analog input A1 of ADK R3 mega2560
#define ANALOG_PIN2 2 // Sweep the T-PAD Temperature to Analog input A2 of ADK R3 mega2560
int analogValue2 = 2; // Sweep the T-PAD Temperature to Analog input A2 of ADK R3 mega2560
#define IN_PIN0 0 // set Digital Pin0 (D0) for control file.close of SD card
#define IN_PIN6 6 // set Digital Pin6 (D6) to show KNEE or ABDOMINAL
#define ANALOG_PIN7 7 // Sweep angle (degree)of ADK R3 mega2560
int analogValue7 = 7 ; // Decare the Sweep angle (degree)of ADK R3 mega2560
#define IN_PIN9 9 // set Digital Pin9 (D9) for show SEX type of MALE / FEMALE
#define IN_PIN10 10 // set Digital Pin10 (D10) for closed file for head label in EXCEL or CSV file
#define IN_PIN 19 //set Switch input to Digital pin19 ADKR3 mega2560
#define DEBOUNCE 10 // Delay 10 mSec , That no port number !!
#define OUT_PIN 8 //Output , Digital Pin8 (D8) or ADK R3 mega2560
#define IN_SWEEP 7 // Sweep the ANGLE to Analog input A7 of ADK R3 mega2560
#define ANALOG_PIN6 6
#define BUZZER 7 // Digital Pin7 (D7) is Buzzer beep using Alert! when 60 seconds
#define ENDU_COUNT 8 // Digital Pin1 (D1) is Endurance Counter for Round Per Minute (RPM)
//We will use D8 for OUT_PIN and ENDU_COUNT are SURELY (Mitr)
const int chipSelect = 53;
int infrared;
int distance;
int state_sw = HIGH;
int reading;
int previous = HIGH;
unsigned long atime= 0;
unsigned long rtc= 0;
unsigned char counter=0;
unsigned long temp[200]; // default is temp[61];
unsigned long sub=0;
bool data_effect=true;
const int max_heartpluse_duty=20000;
//---------closed declare of debounce switch-------------------
void setup()
{
Serial.begin(9600);
lcd.begin(20, 4);
delay(100);
while (!Serial)
{
; // wait for serial port to connect.
}
// Starting of datalogger section of setup mode ------------------------------
pinMode(IN_PIN0,INPUT); // set pinMode is INPUT value for file.close of SD card
Serial.print("Initializing SD card...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(53, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("card initialized.");
// End of datalogger section of setup mode ------------------------------
//---------open setup of debounce switch-------------------
pinMode(IN_PIN, INPUT); // set pinMode digitalPin 19 name's IN_PIN is INPUT of ADK R3
pinMode(OUT_PIN, OUTPUT); // set pinMode digitalPin 8 name's OUT_PIN is OUTPUT of ADK R3
digitalWrite(OUT_PIN, state_sw); // set digitalWrite of digitalPin 3
pinMode(IN_SWEEP,INPUT); // set pinMode analogPin 7 (A7)
//---------closed setup of debounce switch-------------------
lcd.setCursor(0,3); // show position (column,row)
lcd.print(" ");
// Select the Muscle Stimulation and Hot compress
pinMode (IN_PIN6, INPUT); // set pinMode digitalPin 6
int test = digitalRead(IN_PIN6); // default (IN_PIN6) get input HIGH or LOW to select
if(test == LOW ) // Setting LOW
{
Serial.println("NERAMITR TSE-TU2021");
Serial.println("Id\tYear\tSex\tEndur\tTime\tStrng\tAngle");
// Start DATA LOGGER in LOOP for saving in CSV to SD CARD
File dataFile = SD.open("k_muscle.csv", FILE_WRITE); //limit "name" size = 8 characters
if (dataFile >= 0) // dataFile=1 has write , dataFile=0 has not file , limited 207 lines
{
dataFile.println("NERAMITR TSE-TU2021"); //Show header of file
dataFile.print("ID");
dataFile.print(",");
dataFile.print("Age");
dataFile.print(",");
dataFile.print("Sex");
dataFile.print(",");
dataFile.print("Level");
dataFile.print(",");
dataFile.print("Freq");
dataFile.print(",");
dataFile.print("Temp");
dataFile.print(",");
dataFile.println("Time");
int reading = digitalRead(IN_PIN0); // get input HIGH or LOW , it is mode of control RECORD DATA
if(reading == LOW ) // Press RED SW to small is LOW (0 volt) , Release to tall is HIGH (5 volts)
{
dataFile.close();
dataFile.println("NERAMITR TSE-TU2021"); //Endurance rpm
dataFile.print("ID");
dataFile.print(",");
dataFile.print("Age");
dataFile.print(",");
dataFile.print("Sex");
dataFile.print(",");
dataFile.print("Level");
dataFile.print(",");
dataFile.print("Freq");
dataFile.print(",");
dataFile.print("Temp");
dataFile.print(",");
dataFile.println("Time");
}
else {
Serial.println ("status_swith is HIGH you should a Press to LOW");
}
}
else {
Serial.println("error opening k_muscle.csv");
}
// Closed the DATA LOGGER in LOOP for saving in CSV to SD CARD
}
}
void loop()
{
// Setting the Stimulate Muscle & Hot compress 2021 Published paper
pinMode (IN_PIN6, INPUT); // set pinMode digitalPin 6 name's IN_PIN6 is INPUT of ADK R3
int test = digitalRead(IN_PIN6); // default (IN_PIN6) get input HIGH or LOW to select
if(test == LOW ) // Setting LOW
{
lcd.setCursor(0,0);
lcd.print("NERAMITR TSE-TU2021");
lcd.setCursor(0,1); // show position (column,row)
// show ID YR LV FREQ TMP on LCD first
lcd.print("Id Yr Sx Lv Fre Tmp");
lcd.setCursor(15,3); // show unit of stimulate time (column,row)
lcd.print("min");
//delay(100);
// Set Patients ID , We applied A4 ANALOG PIN4 and adjust age with Volume 10K ohms
analogValue4 = analogRead(ANALOG_PIN4);
int id = analogValue4/10; // adjust Patients Id , values 0 to 100 persons (1000/10= 100 persons)
if(id <= 99) { // Fix LCD shows 0 to 50 persons only
lcd.setCursor(0,2); // show position (column,row)
lcd.print(" ");
lcd.setCursor(0, 2); // show position (column,row)
lcd.print(id);
Serial.print(id);
Serial.print("\t");
// Start DATA LOGGER in LOOP for saving in CSV to SD CARD
File dataFile = SD.open("k_muscle.csv", FILE_WRITE); //limit "name" size = 8 characters
if (dataFile >= 0) // dataFile=1 has write , dataFile=0 has not file , limited 207 lines
{
dataFile.print(id);
dataFile.print(",");
int reading = digitalRead(IN_PIN0); // get input HIGH or LOW , it is mode of control RECORD DATA
if(reading == LOW ) // Press RED SW to small is LOW (0 volt) , Release to tall is HIGH (5 volts)
{
dataFile.close();
dataFile.print(id);
dataFile.print(",");
}
else {
Serial.println ("status_swith is HIGH you should a Press to LOW");
}
}
else {
Serial.println("error opening k_muscle.csv");
}
// Closed the DATA LOGGER in LOOP for saving in CSV to SD CARD
}
// Close the Set Patients ID , We applied A4 ANALOG PIN4
// Set Patients AGE , We applied A5 ANALOG PIN5 and adjust age with Volume 10K ohm
analogValue = analogRead(ANALOG_PIN);
int age = analogValue/10;
if(age <= 99) {
lcd.setCursor(3, 2); // show position (column,row)
lcd.print(" ");
lcd.setCursor(3, 2); // show position (column,row)
lcd.print(age);
Serial.print(age);
Serial.print("\t");
// Start DATA LOGGER in LOOP for saving in CSV to SD CARD
File dataFile = SD.open("k_muscle.csv", FILE_WRITE); //limit "name" size = 8 characters
if (dataFile >= 0) // dataFile=1 has write , dataFile=0 has not file , limited 207 lines
{
dataFile.print(age); //Endurance rpm shows into SD Card
dataFile.print(",");
//delay(50); // Reduces speed rate 50 mSec
int reading = digitalRead(IN_PIN0); // get input HIGH or LOW , it is mode of control RECORD DATA or YELLOW SWITCH
if(reading == LOW ) // Press RED SW to small is LOW (0 volt) , Release to tall is HIGH (5 volts)
{
dataFile.close();
dataFile.print(age);
dataFile.print(",");
}
else {
Serial.println ("status_swith is HIGH you should a Press to LOW");
}
}
else {
Serial.println("error opening k_muscle.csv");
}
// Closed the DATA LOGGER in LOOP for saving in CSV to SD CARD
}
// Close, We applied A5 ANALOG PIN5
//Set Set SEX type MALE / FEMALE for EXCEL or CSV file
pinMode (IN_PIN9, INPUT); // set pinMode digitalPin 9
int sex = digitalRead(IN_PIN9); // default (IN_PIN9) get CSV file
if(sex == LOW ) {
lcd.setCursor(6, 2);
lcd.print("MA");
Serial.print("MA");
Serial.print("\t");
// Start DATA LOGGER in LOOP for saving in CSV to SD CARD
File dataFile = SD.open("k_muscle.csv", FILE_WRITE); //limit "name" size = 8 characters
if (dataFile >= 0) // dataFile=1 has write , dataFile=0 has not file , limited 207 lines
{
dataFile.print("MA");
dataFile.print(",");
//delay(50); // Reduces speed rate 50 mSec
int reading = digitalRead(IN_PIN0); // get input HIGH or LOW , it is mode of control RECORD DATA
if(reading == LOW ) // Press RED SW to small is LOW (0 volt) , Release to tall is HIGH (5 volts)
{
dataFile.close();
dataFile.print("MA");
dataFile.print(",");
}
else {
Serial.println ("status_swith is HIGH you should a Press to LOW");
}
}
else {
Serial.println("error opening k_muscle.csv");
}
// Closed the DATA LOGGER in LOOP for saving in CSV to SD CARD
}
else {
lcd.setCursor(6, 2); // show position (column,row)
lcd.print("FE");
Serial.print("FE");
Serial.print("\t");
// Start DATA LOGGER in LOOP for saving in CSV to SD CARD
File dataFile = SD.open("k_muscle.csv", FILE_WRITE); //limit "name" size = 8 characters
if (dataFile >= 0) // dataFile=1 has write , dataFile=0 has not file , limited 207 lines
{
dataFile.print("FE");
dataFile.print(",");
// delay(50); // Reduces speed rate 50 mSec
int reading = digitalRead(IN_PIN0); // get input HIGH or LOW , it is mode of control RECORD DATA
if(reading == LOW ) // Press RED SW to small is LOW (0 volt) , Release to tall is HIGH (5 volts)
{
dataFile.close();
dataFile.print("FE"); //Endurance rpm shows into SD Card
dataFile.print(",");
}
else {
Serial.println ("status_swith is HIGH you should a Press to LOW");
}
}
else {
Serial.println("error opening k_muscle.csv");
}
// Closed the DATA LOGGER in LOOP for saving in CSV to SD CARD
}
//End of Set SEX type MALE / FEMALE
// Set Stimulation time or timer , We applied A3 ANALOG PIN3 and adjust Stimulate Level with Volume 10K ohms
analogValue3 = analogRead(ANALOG_PIN3);
int timer = analogValue3/100; // adjust Stimulation Level , values 0 to 10 (1000/100= 10 minutes)
if(timer <= 10) { // Fix LCD shows 0 to 10 minutes only
lcd.setCursor(13,3);
lcd.print(" ");
lcd.setCursor(13, 3);
lcd.print(timer);
int rtc = millis()/1150 ;
if(timer == 1 && rtc == 60)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
if(timer == 2 && rtc == 120)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
if(timer == 3 && rtc == 180)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
if(timer == 4 && rtc == 240)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
if(timer == 5 && rtc == 300)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
if(timer == 6 && rtc == 360)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
if(timer == 7 && rtc == 420)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
if(timer == 8 && rtc == 480)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
if(timer == 9 && rtc == 540)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
if(timer == 10 && rtc == 600)
{
pinMode(BUZZER, OUTPUT); // sets the digital pin 7 as output
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
digitalWrite(BUZZER,HIGH);
delay(50);
digitalWrite(BUZZER,LOW);
}
Serial.print(timer);
Serial.print("\t");
// Start DATA LOGGER in LOOP for saving in CSV to SD CARD
File dataFile = SD.open("k_muscle.csv", FILE_WRITE); //limit "name" size = 8 characters
if (dataFile >= 0) // dataFile=1 has write , dataFile=0 has not file , limited 207 lines
{
dataFile.print(timer);
dataFile.print(",");
//delay(50); // Reduces speed rate 50 mSec
int reading = digitalRead(IN_PIN0); // get input HIGH or LOW , it is mode of control RECORD DATA or YELLOW SWITCH
if(reading == LOW ) // Press RED SW to small is LOW (0 volt) , Release to tall is HIGH (5 volts)
{
dataFile.close();
dataFile.print(timer); d
dataFile.print(",");
}
else {
Serial.println ("status_swith is HIGH you should a Press to LOW");
}
}
else {
Serial.println("error opening k_muscle.csv");
}
// Closed the DATA LOGGER in LOOP for saving in CSV to SD CARD
}
// Close the Stimulation time or timer , We applied A3 ANALOG PIN3 and adjust Stimulate Level with Volume 10K ohms
// Set Stimulation Level or Vp , We applied A0 ANALOG PIN0 and adjust Stimulate Level with Volume 10K ohms
analogValue0 = analogRead(ANALOG_PIN0);
int level = analogValue0/50; // adjust Stimulation Level , values 0 to 10 (1000/50= 20 level)
if(level <= 20) { // Fix LCD shows 0 to 20 only
lcd.setCursor(9,2); // show position (column,row)
lcd.print(" ");
lcd.setCursor(9, 2); // show position (column,row)
lcd.print(level);
Serial.print(level);
Serial.print("\t");
// Start DATA LOGGER in LOOP for saving in CSV to SD CARD
File dataFile = SD.open("k_muscle.csv", FILE_WRITE); //limit "name" size = 8 characters
if (dataFile >= 0) // dataFile=1 has write , dataFile=0 has not file , limited 207 lines
{
dataFile.print(level);
dataFile.print(",");
//delay(50); // Reduces speed rate 50 mSec
int reading = digitalRead(IN_PIN0); // get input HIGH or LOW , it is mode of control RECORD DATA or YELLOW SWITCH
if(reading == LOW ) // Press RED SW to small is LOW (0 volt) , Release to tall is HIGH (5 volts)
{
dataFile.close();
dataFile.print(level); //Endurance rpm shows into SD Card
dataFile.print(",");
}
else {
Serial.println ("status_swith is HIGH you should a Press to LOW");
}
}
else {
Serial.println("error opening k_muscle.csv");
}
// Closed the DATA LOGGER in LOOP for saving in CSV to SD CARD
}
// Close the Stimulation Level or Vp , We applied A0 ANALOG PIN0 and adjust Stimulate Level with Volume 10K ohms
// Set Frequency or Fre , We applied A1 ANALOG PIN1 and adjust Frequency with Volume 10K ohms
analogValue1 = analogRead(ANALOG_PIN1);
int fre = analogValue1/10; // adjust Frequency, values 0 to 100 (1000/10= 100 )
if(fre <= 100) { // Fix LCD shows 0 to 50 only
lcd.setCursor(12,2); // show position (column,row)
lcd.print(" ");
lcd.setCursor(12, 2); // show position (column,row)
lcd.print(fre);
Serial.print(fre);
Serial.print("\t");
// Start DATA LOGGER in LOOP for saving in CSV to SD CARD
File dataFile = SD.open("k_muscle.csv", FILE_WRITE); //limit "name" size = 8 characters
if (dataFile >= 0) // dataFile=1 has write , dataFile=0 has not file , limited 207 lines
{
dataFile.print(fre);
dataFile.print(",");
//delay(50); // Reduces speed rate 50 mSec
int reading = digitalRead(IN_PIN0); // get input HIGH or LOW , it is mode of control RECORD DATA or YELLOW SWITCH
if(reading == LOW ) // Press RED SW to small is LOW (0 volt) , Release to tall is HIGH (5 volts)
{
dataFile.close();
dataFile.print(fre); //Endurance rpm shows into SD Card
dataFile.print(",");
}
else {
Serial.println ("status_swith is HIGH you should a Press to LOW");
}
}
else {
Serial.println("error opening k_muscle.csv");
}
// Closed the DATA LOGGER in LOOP for saving in CSV to SD CARD
}
// Close the Frequency or Fre , We applied A1 ANALOG PIN1 and adjust Frequency with Volume 10K ohms
// Set T-PAD Temperature , We applied A2 ANALOG PIN2 and adjust Frequency with Volume 10K ohms
analogValue2 = analogRead(ANALOG_PIN2);
int tmp = (analogValue2/12.5)+30; // adjust T-PAD Temperature, values 30 to 80 (1000/12.5= 80 )
if(tmp <= 80) { // Fix LCD shows 0 to 90 only
lcd.setCursor(17,2); // show position (column,row)
lcd.print(" ");
lcd.setCursor(17, 2); // show position (column,row)
lcd.print(tmp);
Serial.println(tmp);
// Serial.print("\t");
// Start DATA LOGGER in LOOP for saving in CSV to SD CARD
File dataFile = SD.open("k_muscle.csv", FILE_WRITE); //limit "name" size = 8 characters
if (dataFile >= 0) // dataFile=1 has write , dataFile=0 has not file , limited 207 lines
{
dataFile.print(tmp); //Endurance rpm shows into SD Card
dataFile.print(",");
//delay(50); // Reduces speed rate 50 mSec
int reading = digitalRead(IN_PIN0); // get input HIGH or LOW , it is mode of control RECORD DATA or YELLOW SWITCH
if(reading == LOW ) // Press RED SW to small is LOW (0 volt) , Release to tall is HIGH (5 volts)
{
dataFile.close();
dataFile.print(tmp);
dataFile.print(",");
}
else {
Serial.println ("status_swith is HIGH you should a Press to LOW");
}
}
else {
Serial.println("error opening k_muscle.csv");
}
// Closed the DATA LOGGER in LOOP for saving in CSV to SD CARD
}
// Close the Hot compress / T-PAD Temperature , We applied A2 ANALOG PIN2 and adjust Frequency with Volume 10K ohms
}
lcd.setCursor(0,3); // show unit of stimulate time (column,row)
lcd.print("Time(");
lcd.setCursor(8,3); // show unit of stimulate time (column,row)
lcd.print(")=");
int rtc = millis()/1150 ;
lcd.setCursor(5, 3);
lcd.print(rtc); // print the number of seconds since reset:
lcd.setCursor(12,3);
lcd.print(":");
if(rtc == 60 )
{
lcd.setCursor(10, 3);
lcd.print("1");
}
if(rtc == 120 )
{
lcd.setCursor(10, 3);
lcd.print("2");
}
if(rtc == 180)
{
lcd.setCursor(10, 3);
lcd.print("3");
}
if(rtc == 240)
{
lcd.setCursor(10, 3);
lcd.print("4");
}
if(rtc == 300)
{
lcd.setCursor(10, 3);
lcd.print("5");
}
if(rtc == 360)
{
lcd.setCursor(10, 3);
lcd.print("6");
}
if(rtc == 840)
{
lcd.setCursor(10, 3);
lcd.print("7");
}
if(rtc == 480)
{
lcd.setCursor(10, 3);
lcd.print("8");
}
if(rtc == 540)
{
lcd.setCursor(10, 3);
lcd.print("9");
}
if(rtc == 600)
{
lcd.setCursor(10, 3);
lcd.print("10");
}
else
{
}
}
ไม่มีความคิดเห็น:
แสดงความคิดเห็น