Process: https://oss.adm.ntu.edu.sg/jtiong002/multimodal-update/
/* Processing sketch to read time and input to weather API to retrieve UV index and send index category data to arduino */ import http.requests.*; import processing.serial.*; //serial lib Serial myPort; // Create object from Serial class String day, month, year, hour, minute, second; float lat; float lon; int val; public void setup() { size(400, 400); frameRate(0.5); myPort = new Serial(this, "COM3", 9600); } public void draw() { int d = day(); // Values from 1 - 31 int m = month(); // Values from 1 - 12 int y = year(); // 2003, 2004, 2005, etc. String day = nf(d, 2); String month = nf(m, 2); String year = nf(y, 4); int h = hour(); // Values from 0 - 23 String hour = nf(h, 2); GetRequest get = new GetRequest("https://api.data.gov.sg/v1/environment/uv-index?date_time="+ year +"-"+ month + "-" + day + "T" + hour + ":00:00"); get.send(); //println("Reponse Content: " + get.getContent()); //println("Reponse Content-Length Header: " + get.getHeader("Content-Length")); String result = get.getContent(); //int resultLength = int(get.getHeader("Content-Length")); String value = result.substring(116, 118); // Returns value result int[] valueSolo = int(split(value, ',')); //remove comma val = valueSolo[0]; println(valueSolo[0], val); while (val > 0 ) { if (val == 1 || val == 2) { //1 and 2 myPort.write(1); } if (val >= 3 || val <= 5) { //3 to 5 inclusive myPort.write(2); } if (val == 6 || val == 7) { // 6 and 7 myPort.write(3); } if (val >= 8 || val <= 10) { //8 to 10 inclusive myPort.write(4); } if (val >= 11) { myPort.write(5); } } }
/* arduino listening to processing for UVI category and pulsing servo motor */ #include <Servo.h> # define PIN 9 Servo myservo; int val; int angle = 0; int level; void setup() { myservo.attach(PIN); myservo.write(angle); Serial.begin(9600); } void loop() { // if there's any serial available, read it: while (Serial.available() > 0) { val = int(Serial.read()); Serial.println(val); if (val == 1) { //LOW UVI level = 18; myservo.write(level); delay(700); myservo.write(0); } if (val == 2) { //MEDIUM UVI level = 36; myservo.write(level); delay(1000); myservo.write(0); } if (val == 3) { //HIGH UVI level = 54; myservo.write(level); delay(1000); myservo.write(0); } if (val == 4) { //VERY HIGH UVI level = 72; myservo.write(level); delay(700); myservo.write(0); } if (val == 5) { //EXREMELY HIGH UVI level = 90; myservo.write(level); delay(500); myservo.write(0); } else { myservo.write(0); } } }