finalized commit for project

parent 79102fcb
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<targetSelectedWithDropDown>
<Target>
<type value="QUICK_BOOT_TARGET" />
<deviceKey>
<Key>
<type value="VIRTUAL_DEVICE_PATH" />
<value value="C:\Users\MY PC\.android\avd\Pixel_XL_API_22.avd" />
</Key>
</deviceKey>
</Target>
</targetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2021-10-13T08:54:25.046235500Z" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="GRADLE" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
<option name="resolveModulePerSourceSet" value="false" />
</GradleProjectSettings>
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="MavenRepo" />
<option name="name" value="MavenRepo" />
<option name="url" value="https://repo.maven.apache.org/maven2/" />
</remote-repository>
<remote-repository>
<option name="id" value="BintrayJCenter" />
<option name="name" value="BintrayJCenter" />
<option name="url" value="https://jcenter.bintray.com/" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.aircop"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation 'com.android.volley:volley:1.2.0'
}
\ No newline at end of file
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
\ No newline at end of file
package com.example.aircop;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.example.aircop", appContext.getPackageName());
}
}
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.aircop">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/aircop"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AirCop">
<activity android:name=".ChemicalSummary"></activity>
<activity android:name=".MainActivitySpeak" />
<activity android:name=".MainActivityChat" />
<activity android:name=".MainActivity2" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
\ No newline at end of file
package com.example.aircop;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class ChemicalSummary extends AppCompatActivity {
private TextView data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chemical_summary);
Bundle bundle = getIntent().getExtras();
String response = bundle.getString("response");
data = (TextView) findViewById(R.id.data);
data.setText(response);
}
}
\ No newline at end of file
package com.example.aircop;
public class Constant {
private Constant() {}
public static final String URL = "https://40cf-2402-4000-11ce-54f4-8146-1239-444b-42e7.ngrok.io/";
// public static final String URL = "https://2b8b-2402-4000-2381-b6fe-18d5-f9c4-6a64-17e8.ngrok.io/";
}
package com.example.aircop;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btnStart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = (Button) findViewById(R.id.startButton);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
startActivity(intent);
}
});
}
}
\ No newline at end of file
package com.example.aircop;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.RetryPolicy;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.util.ArrayList;
import java.util.Locale;
import static com.example.aircop.Constant.URL;
public class MainActivityChat extends AppCompatActivity {
Button sendButton;
TextToSpeech textToSpeech;
private ArrayList<String> sentimentArrayList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_chat);
textToSpeech = new TextToSpeech(getApplicationContext(),
new TextToSpeech.OnInitListener() {
@Override
public void onInit(int i) {
if(i == TextToSpeech.SUCCESS){
int lang = textToSpeech.setLanguage(Locale.ENGLISH);
}
}
});
ArrayList<String> bot = new ArrayList<>();
bot.add("Say hello!!!");
ArrayList<String> user = new ArrayList<>();
user.add("");
ListView list;
MyListAdapter adapter = new MyListAdapter(this, bot, user);
list = (ListView) findViewById(R.id.list);
list.setAdapter(adapter);
sendButton = (Button) findViewById(R.id.sendButton);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
EditText editText = (EditText) findViewById(R.id.message);
String message = editText.getText().toString();
editText.setText("");
editText.setHint("Type a message");
String url = URL;
url = url + "chat?message=" + message + "&user=user";
RequestQueue requestQueue = Volley.newRequestQueue(MainActivityChat.this);
System.out.println("Request: " + message);
StringRequest myReq = new StringRequest(Request.Method.GET,
url,
response -> {
System.out.println("Response: " + response);
user.add(message);
user.add("");
bot.add("");
String[] splitResponse = response.split("/");
System.out.println("Adding sentiment: " + splitResponse[1]);
sentimentArrayList.add(splitResponse[1]);
if(splitResponse[0].equalsIgnoreCase("Bye")){
String sentimentalMessage = getSentimentalMessage();
bot.add(sentimentalMessage + " See you, take care." + "Recommendation of location: " + splitResponse[2]
+ " and chemical: " + splitResponse[3]);
}
else
bot.add(splitResponse[0]);
ListView list1 = (ListView) findViewById(R.id.list);
MyListAdapter adapter = new MyListAdapter(MainActivityChat.this, bot, user);
list1 = (ListView) findViewById(R.id.list);
list1.setAdapter(adapter);
},
error -> {
System.out.println("Error: " + error);
});
myReq.setRetryPolicy(new RetryPolicy() {
@Override
public int getCurrentTimeout() {
return 50000;
}
@Override
public int getCurrentRetryCount() {
return 50000;
}
@Override
public void retry(VolleyError error) throws VolleyError {
}
});
requestQueue.add(myReq);
}
});
}
public String getSentimentalMessage(){
int neutral = 0;
int positive = 0;
int negative = 0;
for(String sentiment : sentimentArrayList){
System.out.println("sentiment: " + sentiment);
if(sentiment.equalsIgnoreCase("Neutral"))
negative++;
else if(sentiment.equalsIgnoreCase("Positive"))
positive++;
else
neutral++;
}
System.out.println("neutral: " + neutral);
System.out.println("positive: " + positive);
System.out.println("negative: " + negative);
if((neutral >= positive) && (neutral >= negative))
return "I feel this as a normal day, It is pleasant to meet you.";
else if((positive >= neutral) && (positive >= negative))
return "It is a very great day today.";
else
return "Always be happy, Everything will be alright soon.";
}
}
\ No newline at end of file
package com.example.aircop;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.speech.tts.TextToSpeech;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.RetryPolicy;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import java.util.ArrayList;
import java.util.Locale;
import static com.example.aircop.Constant.URL;
//Shan's part
public class MainActivitySpeak extends AppCompatActivity {
protected static final int RESULT_SPEECH = 1;
Button speakButton;
ArrayList<String> bot = new ArrayList<>();
ArrayList<String> user = new ArrayList<>();
ListView list;
TextToSpeech textToSpeech;
private ArrayList<String> sentimentArrayList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_speak);
textToSpeech = new TextToSpeech(getApplicationContext(),
new TextToSpeech.OnInitListener() {
@Override
public void onInit(int i) {
if(i == TextToSpeech.SUCCESS){
int lang = textToSpeech.setLanguage(Locale.ENGLISH);
}
}
});
bot.add("Say hello!!!");
user.add("");
MyListAdapter adapter = new MyListAdapter(this, bot, user);
list = (ListView) findViewById(R.id.list);
list.setAdapter(adapter);
speakButton = (Button) findViewById(R.id.speakButton);
speakButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US");
try{
startActivityForResult(intent, RESULT_SPEECH);
// text is not valid
}
catch (Exception e){
Toast.makeText(getApplicationContext(), "Your device doesn't support Speech to Text", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data){
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode){
case RESULT_SPEECH:
if(resultCode == RESULT_OK && data != null){
ArrayList<String> text = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
String message = text.get(0);
String url = URL;
url = url + "chat?message=" + message + "&user=user";
RequestQueue requestQueue = Volley.newRequestQueue(MainActivitySpeak.this);
System.out.println("Request: " + message);
StringRequest myReq = new StringRequest(Request.Method.GET,
url,
response -> {
System.out.println("Response: " + response);
user.add(message);
user.add("");
bot.add("");
String[] splitResponse = response.split("/");
System.out.println("Adding sentiment: " + splitResponse[1]);
sentimentArrayList.add(splitResponse[1]);
if(splitResponse[0].equalsIgnoreCase("Bye")){
String sentimentalMessage = getSentimentalMessage();
bot.add(sentimentalMessage + " See you, take care." + "Recommendation of location: " + splitResponse[2]
+ " and chemical: " + splitResponse[3]);
response = sentimentalMessage + " See you, take care." + "Recommendation of location: " + splitResponse[2]
+ " and chemical: " + splitResponse[3];
}
else{
bot.add(splitResponse[0]);
response = splitResponse[0];
}
ListView list1 = (ListView) findViewById(R.id.list);
MyListAdapter adapter = new MyListAdapter(MainActivitySpeak.this, bot, user);
list1 = (ListView) findViewById(R.id.list);
list1.setAdapter(adapter);
int speech=0;
speech = textToSpeech.speak(response, TextToSpeech.QUEUE_FLUSH, null);
},
error -> {
System.out.println("Error: " + error);
});
myReq.setRetryPolicy(new RetryPolicy() {
@Override
public int getCurrentTimeout() {
return 50000;
}
@Override
public int getCurrentRetryCount() {
return 50000;
}
@Override
public void retry(VolleyError error) throws VolleyError {
}
});
requestQueue.add(myReq);
}
}
}
public String getSentimentalMessage(){
int neutral = 0;
int positive = 0;
int negative = 0;
for(String sentiment : sentimentArrayList){
System.out.println("sentiment: " + sentiment);
if(sentiment.equalsIgnoreCase("Neutral"))
negative++;
else if(sentiment.equalsIgnoreCase("Positive"))
positive++;
else
neutral++;
}
System.out.println("neutral: " + neutral);
System.out.println("positive: " + positive);
System.out.println("negative: " + negative);
if((neutral >= positive) && (neutral >= negative))
return "I feel this as a normal day, It is pleasant to meet you.";
else if((positive >= neutral) && (positive >= negative))
return "It is a very great day today.";
else
return "Always be happy, Everything will be alright soon.";
}
}
\ No newline at end of file
package com.example.aircop;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
public class MyListAdapter extends ArrayAdapter<String> {
private final Activity context;
private final ArrayList<String> botChatList;
private final ArrayList<String> userChatList;
public MyListAdapter(Activity context, ArrayList<String> botChatList, ArrayList<String> userChatList) {
super(context, R.layout.mylist, botChatList);
// TODO Auto-generated constructor stub
this.context=context;
this.botChatList=botChatList;
this.userChatList=userChatList;
}
public View getView(int position, View view, ViewGroup parent) {
LayoutInflater inflater=context.getLayoutInflater();
View rowView=inflater.inflate(R.layout.mylist, null,true);
TextView botText = (TextView) rowView.findViewById(R.id.bot);
TextView userText = (TextView) rowView.findViewById(R.id.user);
if(botChatList.get(position).equals("") || botChatList.get(position) == null){
botText.setVisibility(View.GONE);
}
else{
userText.setVisibility(View.GONE);
}
botText.setText(botChatList.get(position));
userText.setText(userChatList.get(position));
return rowView;
};
}
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
<aapt:attr name="android:fillColor">
<gradient
android:endX="85.84757"
android:endY="92.4963"
android:startX="42.9492"
android:startY="49.59793"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>
\ No newline at end of file
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="2dp"
android:color="#03A9F4" />
<solid android:color="#BDDBE8" />
<corners
android:radius="3dp"
android:topRightRadius="10dp"
android:topLeftRadius="10dp"
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
/>
</shape>
\ No newline at end of file
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="2dp"
android:color="#3F51B5" />
<solid android:color="#BBC0DA" />
<corners
android:radius="3dp"
android:topRightRadius="10dp"
android:topLeftRadius="10dp"
android:bottomLeftRadius="10dp"
android:bottomRightRadius="10dp"
/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#3DDC84"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ChemicalSummary">
<TextView
android:id="@+id/chemicalText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Chemical Summary"
android:textColor="#2196F3"
android:textSize="40sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.496"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.045" />
<TextView
android:id="@+id/data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="Data"
android:textSize="20sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/chemicalText" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textColor="#2196F3"
android:textSize="50sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.496"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.045" />
<ImageView
android:id="@+id/imageView"
android:layout_width="247dp"
android:layout_height="221dp"
android:layout_marginBottom="180dp"
app:layout_constraintBottom_toTopOf="@+id/btnStart"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.0"
app:srcCompat="@drawable/aircop" />
<Button
android:id="@+id/startButton"
android:layout_width="wrap_content"
android:layout_height="48dp"
android:layout_marginBottom="16dp"
android:text="Start"
app:backgroundTint="#2196F3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity2">
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textColor="#2196F3"
android:textSize="50sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.496"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.045" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="338dp"
android:layout_height="288dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.493"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.46"
app:srcCompat="@drawable/srilanka" />
<Button
android:id="@+id/chatButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="Chat"
app:backgroundTint="#2196F3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.91"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/speakButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="Speak"
app:backgroundTint="#2196F3"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.086"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/colomboBtn"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="300dp"
android:text="Colombo"
app:backgroundTint="#2196F3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/kandyBtn"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginTop="348dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:text="Kandy"
app:backgroundTint="#2196F3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/galleBtn"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="204dp"
android:text="Galle"
app:backgroundTint="#2196F3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/malabeBtn"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginTop="252dp"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
android:text="Malabe"
app:backgroundTint="#2196F3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/nuwaraBtn"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="396dp"
android:text="Nuwareliya"
app:backgroundTint="#2196F3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/jaffnaBtn"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_marginTop="444dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:text="Jaffna"
app:backgroundTint="#2196F3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/message"
android:layout_alignParentTop="true"
android:layout_marginTop="0dp"
android:layout_marginBottom="5dp"
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"></ListView>
<Button
android:id="@+id/sendButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="15dp"
android:layout_marginRight="15dp"
android:layout_marginBottom="15dp"
android:text="Send"
app:backgroundTint="#2196F3" />
<EditText
android:id="@+id/message"
android:layout_width="277dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="15dp"
android:layout_marginLeft="15dp"
android:layout_marginBottom="14dp"
android:ems="10"
android:inputType="textPersonName"
android:hint="Type a message" />
</RelativeLayout>
\ No newline at end of file
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Shan's part-->
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/speakButton"
android:layout_marginBottom="5dp"
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"></ListView>
<Button
android:id="@+id/speakButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="15dp"
android:layout_marginLeft="15dp"
android:layout_marginBottom="15dp"
android:text="Click To Speak"
app:backgroundTint="#2196F3" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/bot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="15dp"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:background="@drawable/bg_rounded_bot"
android:padding="10dp"
android:text="Bot"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black" />
<TextView
android:id="@+id/user"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginLeft="15dp"
android:layout_marginTop="15dp"
android:layout_marginEnd="15dp"
android:layout_marginRight="15dp"
android:background="@drawable/bg_rounded_user"
android:padding="10dp"
android:text="User"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/black" />
</RelativeLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.AirCop" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_200</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">AirCop</string>
</resources>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.AirCop" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">#2196F3</item>
<item name="colorPrimaryVariant">@color/teal_200</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
</style>
</resources>
\ No newline at end of file
package com.example.aircop;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Example local unit test, which will execute on the development machine (host).
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
public class ExampleUnitTest {
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
}
\ No newline at end of file
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:4.2.1"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
mavenCentral()
jcenter() // Warning: this repository is going to shut down soon
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
\ No newline at end of file
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
# AndroidX package structure to make it clearer which packages are bundled with the
# Android operating system, and which are packaged with your app"s APK
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
\ No newline at end of file
#Thu Sep 09 08:04:03 IST 2021
distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
#!/usr/bin/env sh
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
fi
exec "$JAVACMD" "$@"
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
########################################### QUESTIONS AND SQL LOGICS START ###########################################
SAPNAKA'S QUESTIONS
What is the composition of chemicals in Colombo?
• Validate if there is record
• Shows data about today
SELECT `chemical`, `value` FROM `elements` WHERE `date` = '2021-08-31' AND `location` = 'colombo'
NLU DONE - SQL completed
################
################
################
What is the composition of chemicals in Colombo on 2021-08-31?
• Validate if there is record
• Validate date and show appropriate data
SELECT `chemical`, `value` FROM `elements` WHERE `date` = '2021-08-31' AND `location` = 'colombo'
NLU DONE - SQL completed
################
################
################
What is the composition level of CO2 in Colombo?
• Validate if there is record
• Shows data about today
SELECT `chemical`, `value` FROM `elements` WHERE `date` = '2021-08-30' AND `othername` LIKE '%carbon dioxide%' AND `location` = 'colombo'
NLU DONE - SQL completed
################
################
################
What is the composition of CO2 in Colombo on 2021-08-30?
• Validate if there is record
• Validate date and show appropriate data
SELECT `chemical`, `value` FROM `elements` WHERE `date` = '2021-08-30' AND `othername` LIKE '%carbon dioxide%' AND `location` = 'colombo'
NLU DONE - SQL completed
################
################
################
What is the summary of chemicals in Colombo?
• Validate if there is record
• Shows data about today
SELECT `location`, `summary` FROM `conditions` WHERE `date` = '2021-08-31' AND `location` = 'colombo'
NLU DONE - SQL completed
################
################
################
What is the summary of chemicals in Colombo on 2021-08-31?
• Validate if there is record
• Validate date and show appropriate data
SELECT `location`, `summary` FROM `conditions` WHERE `date` = '2021-08-31' AND `location` = 'colombo'
NLU DONE - SQL completed
################
################
################
Tell me the chemical summary of the whole map.
• Validate if there is record
• Shows data about today
SELECT `date`, `result` FROM `summary` WHERE `date` = '2021-08-31'
NLU DONE - SQL completed
################
################
################
Tell me the chemical summary of the whole map on 2021-08-31.
• Validate if there is record
• Validate date and show appropriate data
SELECT `date`, `result` FROM `summary` WHERE `date` = '2021-08-31'
NLU DONE - SQL completed
################
################
################
What is the effect of chemicals in Colombo?
• Validate if there is record
• Shows data about today
SELECT `chemical`, `effect` FROM `elements` WHERE `date` = '2021-08-31'
NLU DONE - SQL completed
################
################
################
What is the effect of chemicals in Colombo on 2021-08-31?
• Validate if there is record
• Validate date and show appropriate data
SELECT `chemical`, `effect` FROM `elements` WHERE `date` = '2021-08-31'
NLU DONE - SQL completed
################
################
################
What is the effect of CO2 in Colombo?
• Validate if there is record
• Shows data about today
SELECT `chemical`, `effect` FROM `elements` WHERE `date` = '2021-08-31' AND `othername` LIKE '%carbon dioxide%'
NLU DONE - SQL completed
################
################
################
What is the effect of CO2 in Colombo on 2021-08-31?
• Validate if there is record
• Validate date and show appropriate data
SELECT `chemical`, `effect` FROM `elements` WHERE `date` = '2021-08-31' AND `othername` LIKE '%carbon dioxide%'
NLU DONE - SQL completed
########################################### QUESTIONS AND SQL LOGICS END ###########################################
\ No newline at end of file
Can you tell me about this application?
SELECT `value` FROM support WHERE `key` = 'about'
DONE
How to use this application?
SELECT `value` FROM support WHERE `key` = 'use'
DONE
What are the main locations supported?
SELECT `value` FROM support WHERE `key` = 'location'
DONE
What are the main functions of this system?
SELECT `value` FROM support WHERE `key` = 'function'
DONE
\ No newline at end of file
# common start
# Configuration for Rasa NLU.
# https://rasa.com/docs/rasa/nlu/components/
language: en
pipeline:
# # No configuration for the NLU pipeline was provided. The following default pipeline was used to train your model.
# # If you'd like to customize it, uncomment and adjust the pipeline.
# # See https://rasa.com/docs/rasa/tuning-your-model for more information.
- name: WhitespaceTokenizer
- name: RegexFeaturizer
- name: CRFEntityExtractor
# - name: LexicalSyntacticFeaturizer
# analyzer: char_wb
# min_ngram: 1
# max_ngram: 4
- name: EntitySynonymMapper
- name: CountVectorsFeaturizer
- name: DIETClassifier
epochs: 100
constrain_similarities: true
# - name: ResponseSelector
# epochs: 100
# constrain_similarities: true
# - name: FallbackClassifier
# threshold: 0.3
# ambiguity_threshold: 0.1
# Configuration for Rasa Core.
# https://rasa.com/docs/rasa/core/policies/
policies:
# # No configuration for policies was provided. The following default policies were used to train your model.
# # If you'd like to customize them, uncomment and adjust the policies.
# # See https://rasa.com/docs/rasa/policies for more information.
# - name: MemoizationPolicy
# - name: RulePolicy
# - name: UnexpecTEDIntentPolicy
# max_history: 5
# epochs: 100
# - name: TEDPolicy
# max_history: 5
# epochs: 100
# constrain_similarities: true
# common end
\ No newline at end of file
# common start
# This file contains the credentials for the voice & chat platforms
# which your bot is using.
# https://rasa.com/docs/rasa/messaging-and-voice-channels
rest:
# # you don't need to provide anything here - this channel doesn't
# # require any credentials
#facebook:
# verify: "<verify>"
# secret: "<your secret>"
# page-access-token: "<your page access token>"
#slack:
# slack_token: "<your slack token>"
# slack_channel: "<the slack channel>"
# slack_signing_secret: "<your slack signing secret>"
#socketio:
# user_message_evt: <event name for user message>
# bot_message_evt: <event name for bot messages>
# session_persistence: <true/false>
#mattermost:
# url: "https://<mattermost instance>/api/v4"
# token: "<bot token>"
# webhook_url: "<callback URL>"
# This entry is needed if you are using Rasa X. The entry represents credentials
# for the Rasa X "channel", i.e. Talk to your bot and Share with guest testers.
rasa:
url: "http://localhost:5002/api"
# common end
\ No newline at end of file
# common start
version: "2.0"
rules:
- rule: Say goodbye anytime the user says goodbye
steps:
- intent: goodbye
- action: utter_goodbye
- rule: Say 'I am a bot' anytime the user challenges
steps:
- intent: bot_challenge
- action: utter_iamabot
# common end
\ No newline at end of file
# common start
version: "2.0"
stories:
- story: happy path
steps:
- intent: greet
- action: utter_greet
- intent: mood_great
- action: utter_happy
- story: sad path 1
steps:
- intent: greet
- action: utter_greet
- intent: mood_unhappy
- action: utter_cheer_up
- action: utter_did_that_help
- intent: affirm
- action: utter_happy
- story: sad path 2
steps:
- intent: greet
- action: utter_greet
- intent: mood_unhappy
- action: utter_cheer_up
- action: utter_did_that_help
- intent: deny
- action: utter_goodbye
# common end
# Sapnaka part start
- story: ask about chemical path 1
steps:
- intent: greet
- action: utter_greet
- intent: inform
entities:
- requirement: "composition"
- location: "Colombo"
- action: chemical_query_handler_1
- intent: mood_great
- action: utter_happy
- story: ask about chemical path 2
steps:
- intent: greet
- action: utter_greet
- intent: inform
entities:
- requirement: "composition"
- location: "Colombo"
- date: "2021-08-05"
- action: chemical_query_handler_2
- intent: mood_great
- action: utter_happy
- story: ask about chemical path 3
steps:
- intent: greet
- action: utter_greet
- intent: inform
entities:
- requirement: "composition"
- location: "Colombo"
- words: "co2"
- action: chemical_query_handler_3
- intent: mood_great
- action: utter_happy
- story: ask about chemical path 4
steps:
- intent: greet
- action: utter_greet
- intent: inform
entities:
- requirement: "composition"
- location: "Colombo"
- words: "co2"
- date: "2021-08-05"
- action: chemical_query_handler_4
- intent: mood_great
- action: utter_happy
# Sapnaka part end
# Shan part start
- story: support function path 1
steps:
- intent: greet
- action: utter_greet
- intent: inform
entities:
- help: "use"
- action: support_function_1
- intent: mood_great
- action: utter_happy
# Shan part end
\ No newline at end of file
# common start
version: "2.0"
intents:
- greet
- goodbye
- affirm
- deny
- mood_great
- mood_unhappy
- bot_challenge
- inform #Sapnaka, Shan
entities:
- requirement #Sapnaka
- location #Sapnaka
- words #Sapnaka
- date #Sapnaka
- help #Shan
actions:
- chemical_query_handler_1 #Sapnaka
- chemical_query_handler_2 #Sapnaka
- chemical_query_handler_3 #Sapnaka
- chemical_query_handler_4 #Sapnaka
- support_function_1 #Shan
responses:
utter_greet:
- text: "Hi I am the AIR-COP chatbot, how can I help you?"
utter_cheer_up:
- text: "Here is something to cheer you up:"
image: "https://i.imgur.com/nGF1K8f.jpg"
utter_did_that_help:
- text: "Did that help you?"
utter_happy:
- text: "Great, carry on!"
utter_goodbye:
- text: "Bye"
utter_iamabot:
- text: "I am a bot, powered by Rasa."
session_config:
session_expiration_time: 60
carry_over_slots_to_new_session: true
# common end
\ No newline at end of file
# common start
# This file contains the different endpoints your bot can use.
# Server where the models are pulled from.
# https://rasa.com/docs/rasa/model-storage#fetching-models-from-a-server
#models:
# url: http://my-server.com/models/default_core@latest
# wait_time_between_pulls: 10 # [optional](default: 100)
# Server which runs your custom actions.
# https://rasa.com/docs/rasa/custom-actions
action_endpoint:
url: "http://localhost:5055/webhook"
# Tracker store which is used to store the conversations.
# By default the conversations are stored in memory.
# https://rasa.com/docs/rasa/tracker-stores
#tracker_store:
# type: redis
# url: <host of the redis instance, e.g. localhost>
# port: <port of your redis instance, usually 6379>
# db: <number of your database within redis, e.g. 0>
# password: <password used for authentication>
# use_ssl: <whether or not the communication is encrypted, default false>
#tracker_store:
# type: mongod
# url: <url to your mongo instance, e.g. mongodb://localhost:27017>
# db: <name of the db within your mongo instance, e.g. rasa>
# username: <username used for authentication>
# password: <password used for authentication>
# Event broker which all conversation events should be streamed to.
# https://rasa.com/docs/rasa/event-brokers
#event_broker:
# url: localhost
# username: username
# password: password
# queue: queue
# common end
\ No newline at end of file
# common start
#### This file contains tests to evaluate that your bot behaves as expected.
#### If you want to learn more, please see the docs: https://rasa.com/docs/rasa/testing-your-assistant
stories:
- story: happy path 1
steps:
- user: |
hello there!
intent: greet
- action: utter_greet
- user: |
amazing
intent: mood_great
- action: utter_happy
- story: happy path 2
steps:
- user: |
hello there!
intent: greet
- action: utter_greet
- user: |
amazing
intent: mood_great
- action: utter_happy
- user: |
bye-bye!
intent: goodbye
- action: utter_goodbye
- story: sad path 1
steps:
- user: |
hello
intent: greet
- action: utter_greet
- user: |
not good
intent: mood_unhappy
- action: utter_cheer_up
- action: utter_did_that_help
- user: |
yes
intent: affirm
- action: utter_happy
- story: sad path 2
steps:
- user: |
hello
intent: greet
- action: utter_greet
- user: |
not good
intent: mood_unhappy
- action: utter_cheer_up
- action: utter_did_that_help
- user: |
not really
intent: deny
- action: utter_goodbye
- story: sad path 3
steps:
- user: |
hi
intent: greet
- action: utter_greet
- user: |
very terrible
intent: mood_unhappy
- action: utter_cheer_up
- action: utter_did_that_help
- user: |
no
intent: deny
- action: utter_goodbye
- story: say goodbye
steps:
- user: |
bye-bye!
intent: goodbye
- action: utter_goodbye
- story: bot challenge
steps:
- user: |
are you a bot?
intent: bot_challenge
- action: utter_iamabot
# common end
\ No newline at end of file
/*
SQLyog Community v13.1.6 (64 bit)
MySQL - 8.0.21 : Database - air_polution
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`air_polution` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
USE `air_polution`;
/*Table structure for table `conditions` */
DROP TABLE IF EXISTS `conditions`;
CREATE TABLE `conditions` (
`id` int NOT NULL AUTO_INCREMENT,
`location` varchar(50) DEFAULT NULL,
`date` date DEFAULT NULL,
`summary` varchar(5000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `conditions` */
insert into `conditions`(`id`,`location`,`date`,`summary`) values
(1,'Colombo','2021-09-09','Levels of the chemicals are normal'),
(2,'Malabe','2021-09-09','Levels of the chemicals are normal');
/*Table structure for table `elements` */
DROP TABLE IF EXISTS `elements`;
CREATE TABLE `elements` (
`id` int NOT NULL AUTO_INCREMENT,
`chemical` varchar(25) DEFAULT NULL,
`value` float DEFAULT NULL,
`location` varchar(50) DEFAULT NULL,
`date` date DEFAULT NULL,
`othername` varchar(255) DEFAULT NULL,
`effect` varchar(5000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `elements` */
insert into `elements`(`id`,`chemical`,`value`,`location`,`date`,`othername`,`effect`) values
(1,'NO2',25,'Colombo','2021-09-09','no2, nitrogen dioxide','it is normal'),
(2,'CO2',10,'Colombo','2021-09-09','co2, carbon Dioxide','it is normal'),
(4,'NO2',25,'Colombo','2021-09-05','co2, carbon Dioxide','it is normal'),
(5,'CO2',10,'Colombo','2021-09-05','co2, carbon Dioxide','it is normal');
/*Table structure for table `summary` */
DROP TABLE IF EXISTS `summary`;
CREATE TABLE `summary` (
`id` int NOT NULL AUTO_INCREMENT,
`result` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `summary` */
insert into `summary`(`id`,`result`,`date`) values
(1,'It is very dangerous due to very high smoke','2021-09-09');
/*Table structure for table `support` */
DROP TABLE IF EXISTS `support`;
CREATE TABLE `support` (
`id` int NOT NULL AUTO_INCREMENT,
`key` varchar(50) DEFAULT NULL,
`value` varchar(5000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
/*Data for the table `support` */
insert into `support`(`id`,`key`,`value`) values
(1,'about','This is the about description.'),
(2,'use','This is the use description.'),
(3,'location','Locations supported are Colombo, Jaffna'),
(4,'function','This is the function description.');
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
,0,1,2,3
0,NO2,25.0,Colombo,2021-10-13
1,CO2,10.0,Colombo,2021-10-13
2,NO2,25.0,Colombo,2021-10-13
3,CO2,10.0,Colombo,2021-10-13
{
"info": {
"_postman_id": "b6cdabc7-50b3-4c93-a602-26b6ef60171e",
"name": "sapnaka_and_shan_research",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "LOCAL-FLASK",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:3030/chat?message=hi",
"protocol": "http",
"host": [
"localhost"
],
"port": "3030",
"path": [
"chat"
],
"query": [
{
"key": "message",
"value": "hi"
}
]
}
},
"response": []
},
{
"name": "NGROK",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://18c5-2402-4000-2381-b6fe-9983-e31c-6f29-b85c.ngrok.io/chat?message=hi",
"protocol": "https",
"host": [
"18c5-2402-4000-2381-b6fe-9983-e31c-6f29-b85c",
"ngrok",
"io"
],
"path": [
"chat"
],
"query": [
{
"key": "message",
"value": "hi"
}
]
}
},
"response": []
},
{
"name": "flask-sentiment",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:3030/sentiment?data=I am very sad",
"protocol": "http",
"host": [
"localhost"
],
"port": "3030",
"path": [
"sentiment"
],
"query": [
{
"key": "data",
"value": "I am very sad"
}
]
}
},
"response": []
},
{
"name": "chemical by location",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:3030/chemical?location=Colombo",
"protocol": "http",
"host": [
"localhost"
],
"port": "3030",
"path": [
"chemical"
],
"query": [
{
"key": "location",
"value": "Colombo"
}
]
}
},
"response": []
},
{
"name": "create excel",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "http://localhost:3030/createExcel?startDate=2021-09-06&endDate=2021-09-10",
"protocol": "http",
"host": [
"localhost"
],
"port": "3030",
"path": [
"createExcel"
],
"query": [
{
"key": "startDate",
"value": "2021-09-06"
},
{
"key": "endDate",
"value": "2021-09-10"
}
]
}
},
"response": []
}
]
}
\ No newline at end of file
int smokeA0= A0;
int buzzer = 11;
float sensorValue;
void setup()
{
pinMode (buzzer, OUTPUT);
pinMode (smokeA0, INPUT);
Serial.begin(9600);
Serial.println("Gas sensor warming up!");
delay(2000);
noTone(buzzer);
}
void loop()
{
sensorValue= analogRead(smokeA0);
Serial.print("Methane(CH4)senor-:");
Serial.print(sensorValue);
if(sensorValue > 250)
{
Serial.print(" | Smoke detected!");
tone(buzzer,1000,200);
}
else {
noTone(buzzer);
}
Serial.println("");
delay(200);
}
const int gasPin=A0;
int buzzer = 11;
float sensorValue;
void setup() {
pinMode (buzzer, OUTPUT);
pinMode (gasPin, INPUT);
Serial.begin(9600);
Serial.println("Gas sensor warming up!");
delay(2000);
noTone(buzzer);
}
void loop() {
sensorValue= analogRead(gasPin);
Serial.print("Butane senor-:");
Serial.print(sensorValue);
if(sensorValue > 300)
{
Serial.print(" | Smoke detected!");
tone(buzzer,1000,200);
}
else {
noTone(buzzer);
}
Serial.println("");
delay(200);
}
const int AOUTpin=0;
const int DOUTpin=8;
const int ledPin=13;
int limit;
int value;
void setup() {
Serial.begin(115200);
pinMode(DOUTpin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop()
{
value=analogRead(AOUTpin);
limit=digitalRead(DOUTpin);
Serial.print("Carbon Monoxide(CO)Sensor: ");
Serial.println(value);
Serial.print("Limit: ");
Serial.print(limit);
delay(100);
if(limit == HIGH){
digitalWrite(ledPin, HIGH);
}
else{
digitalWrite(ledPin, LOW);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment