#include <WiFi.h>
#include <ThingSpeak.h>
#include <stdio.h>

char ssid[] = "Wokwi-GUEST";
char pass[] = ""; 

WiFiClient client;
unsigned long myChannelNumber = 2500466;
const char * myWriteAPIKey = "25LUPA7MGIROSXOK";

int statusCode;
int fieldnum[] = {1,2,3,4};
int ledPin[] = {12,13,25,26};
int inputPin[] ={15,2,4,5};
int val[] = {0,0,0,0};
int pirState[]= {LOW,LOW,LOW,LOW}; 
void setup() 
{
  for(int i=0;i<4;i++)
  {
  pinMode(ledPin[i], OUTPUT);      // declare LED as output
  pinMode(inputPin[i], INPUT);
  }
Serial.begin(115200);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client);

}

void loop() {
connectToCloud();
computeData(fieldnum,ledPin,inputPin);
delay(100);
}
void connectToCloud()
{
if(WiFi.status() != WL_CONNECTED) 
{
Serial.print("Attempting to connect");
while(WiFi.status() != WL_CONNECTED)
 {
WiFi.begin(ssid, pass);
for(int i=0;i<5;i++) 
{
Serial.print(".");
delay(1000);
}
}
Serial.println("\nConnected.");
}
}
void computeData(int fieldnum[] , int ledPin[] , int inputPin[])
{
  //pinMode(ledPin, OUTPUT);      // declare LED as output
  //pinMode(inputPin, INPUT); 
 for(int i=0;i<4;i++)
 {
    val[i] = digitalRead(inputPin[i]);  // read input value
      if (val[i] == HIGH) {            // check if the input is HIGH
        digitalWrite(ledPin[i], HIGH);  // turn LED ON
        if (pirState[i] == LOW) {
          // we have just turned on
          Serial.println("Motion detected!");
          // We only want to print on the output change, not state
          pirState[i] = HIGH;
            //writeData(fieldnum ,HIGH);
        }
      } else {
        digitalWrite(ledPin[i], LOW); // turn LED OFF
        if (pirState[i] == HIGH) {
          // we have just turned of
          Serial.println("Motion ended!");
          // We only want to print on the output change, not state
          pirState[i] = LOW;
          //writeData(fieldnum , LOW);
        }
      }
 }

  for(int i=0;i<4;i++)
 {
    ThingSpeak.setField(fieldnum[i] , pirState[i]);
 }
    statusCode = ThingSpeak.writeFields(myChannelNumber,myWriteAPIKey);
    if(statusCode == 200) //successful writing code
    Serial.println("Channel update successful.");
    else
    Serial.println("Problem Writing data. HTTP error code :" +
    String(statusCode));
    delay(10000);
}