/************************************* MICRODEV.GR SENSOR BOARD - ARDUINO MEGA 2560 (C) PANOS PAPAZOGLOU 2023 **************************************/ #include #include #include "DHT.h" #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF /************************************* Digital PINS **************************************/ #define HALL 23 #define echo 15 #define trig 14 #define DHTPIN 29 #define DHTTYPE DHT11 #define PIR 31 #define IRAV 33 #define BUZ 51 #define IR 37 /************************************* RGB LED PWM PINS **************************************/ #define G 44 #define R 45 #define B 46 DHT dht(DHTPIN, DHTTYPE); MCUFRIEND_kbv tft; /************************************* ANALOG SENSOR PINS POT-A: 6 POT-B: 7 POT-C: 8 JOY-Y: 9 JOY-X: 10 LM35: 11 LDR: 12 A.TMP 13 SND: 14 NC: 15 (not connected) **************************************/ int apin[]={6,7,8,9,10,11,12,13,14,15}; String sensor[]={"POT-A:", "POT-B:", "POT-C:","JOY-Y:", "JOY-X:", "LM35:", "LDR:", "A.TMP:", "SND:", "NC:"}; int dpin[]={23, 29,31,37,44,45, 46, 51}; int Rv=255, Gv=255, Bv=255; void setup() { Serial.begin(9600); dht.begin(); uint16_t ID=tft.readID(); tft.begin(ID); tft.fillScreen(BLACK); mytext("Analog Sensors", 3,10,0,YELLOW); init_allpins(); digitalWrite(BUZ,HIGH); delay(100); digitalWrite(BUZ,LOW); } void loop() { //Serial.println(""); ///Serial.println("Analog"); Serial.println("======="); int y=30; String metrTEXT=""; /************************************* Analog Sensors **************************************/ for(int i=0;i<10;i++) { int a=analogRead(apin[i]); //metrTEXT=metrTEXT+String(a)+"/"; tft.fillRect(10,y,250,17,RED); mytext(sensor[i],3,10,y,WHITE); //Serial.print(sensor[i]); /************************************* POT-A **************************************/ if (i==0) { Rv=map(a,0,1023,0,255); metrTEXT=metrTEXT+String(Rv)+"/"; mytext(String(a), 3,130,y,CYAN); //Serial.print(" (");Serial.print(Rv);Serial.print(") "); } else /************************************* POT-B **************************************/ if (i==1) { Gv=map(a,0,1023,0,255); metrTEXT=metrTEXT+String(Gv)+"/"; mytext(String(a), 3,130,y,CYAN); //Serial.print(" (");Serial.print(Gv);Serial.print(") "); } else /************************************* POT-C **************************************/ if (i==2) { Bv=map(a,0,1023,0,255); metrTEXT=metrTEXT+String(Bv)+"/"; mytext(String(a), 3,130,y,CYAN); //Serial.print(" (");Serial.print(Bv);Serial.print(") "); } /************************************* LM35 **************************************/ else if (i==5) { metrTEXT=metrTEXT+String(a)+"/"; float t=(a*4.88)/10; //metrTEXT=metrTEXT+String(t)+"/"; mytext(String(t), 3,130,y,YELLOW); ///Serial.print(t); mytext("'C",3,225,y,GREEN); //Serial.print("'C, "); } else /************************************* Analog TEMP (thermistor) **************************************/ if (i==7) { metrTEXT=metrTEXT+String(a)+"/"; double fenya=((double)a/1023)*5; double r=(5-fenya)/fenya*4700; double atemp=( 1/(log(r/10000) /3950 + 1/(25+273.15))-273.15); mytext(String(atemp), 3,130,y,YELLOW); //metrTEXT=metrTEXT+String(atemp)+"/"; //Serial.print(atemp); mytext("'C",3,225,y,GREEN); //Serial.print("'C, "); } else //for any other analog sensor { mytext(String(a), 3,130,y,CYAN); metrTEXT=metrTEXT+String(a)+"/"; } //Serial.print(a); y+=25; //Serial.print("//"); update_rgb(); } mytext("Digital Sensors",3,10,y,YELLOW); /************************************* DIGITAL PINS-SENSORS **************************************/ /************************************* DHT11 Temp/Humi **************************************/ y+=25; float h = dht.readHumidity(); float t = dht.readTemperature(); metrTEXT=metrTEXT+String(int(t*100))+"/"; metrTEXT=metrTEXT+String(int(h*100))+"/"; String txt="h:"+String(h)+"/t:"+String(t); //Serial.print(txt); //DHT11 TEMP tft.fillRect(10,y,250,17,RED); mytext("D.TEMP:",3,10,y,WHITE); mytext(String(t), 3,130,y,YELLOW); mytext("'C",3,225,y,GREEN); /************************************* DHT11 Humidity **************************************/ y+=25; tft.fillRect(10,y,250,17,RED); mytext("D.HUMI:",3,10,y,WHITE); mytext(String(h), 3,130,y,YELLOW); mytext("%",3,225,y,GREEN); /************************************* PIR **************************************/ y+=25; int pir=digitalRead(PIR); metrTEXT=metrTEXT+String(pir)+"/"; tft.fillRect(10,y,250,17,RED); mytext("PIR:",3,10,y,WHITE); mytext(String(pir), 3,130,y,YELLOW); txt="//PIR:"+String(pir); ///Serial.print(txt); /************************************* HC-SR04 **************************************/ float dist=read_sr04(); metrTEXT=metrTEXT+String(int(dist*100))+"/"; y+=25; tft.fillRect(10,y,250,17,RED); mytext("HC-SR04:",3,10,y,WHITE); mytext(String(dist), 3,130,y,YELLOW); mytext("cm",3,225,y,GREEN); txt="//SR04:"+String(dist); //Serial.print(txt); /************************************* RED Value **************************************/ y+=25; tft.fillRect(10,y,250,17,RED); mytext("Red:",3,10,y,WHITE); mytext(String(Rv), 3,130,y,YELLOW); txt="//R:"+String(Rv); //Serial.print(txt); /************************************* GREEN Value **************************************/ y+=25; tft.fillRect(10,y,250,17,GREEN); mytext("Green:",3,10,y,BLACK); mytext(String(Gv), 3,130,y,BLACK); txt="/G:"+String(Gv); //Serial.print(txt); /************************************* BLUE Value **************************************/ y+=25; tft.fillRect(10,y,250,17,BLUE); mytext("Blue:",3,10,y,WHITE); mytext(String(Bv), 3,130,y,YELLOW); txt="/B:"+String(Bv); //Serial.print(txt); Serial.println(metrTEXT); //print on screen/send to Processing delay(50); } /**************************************************************** Display text on TFT screen *****************************************************************/ void mytext(String text, int textsize, int x, int y, int color) { tft.setTextSize(2); tft.setTextColor(color); tft.setCursor(x,y); tft.print(text); } /************************************* Initialize analog/digital pins **************************************/ void init_allpins() { for(int i=0;i<10;i++) pinMode(i,INPUT); for(int i=0;i<14;i++) pinMode(i,OUTPUT); pinMode(echo,INPUT); //RGB LED for(int i=44;i<=46;i++) pinMode(i,OUTPUT); //BUZZER pinMode(BUZ,OUTPUT); pinMode(PIR,INPUT); pinMode(IR,INPUT); pinMode(HALL,INPUT); } /********************************** Update RGB LED ***********************************/ void update_rgb() { analogWrite(G,255-Gv); analogWrite(B,255-Bv); analogWrite(R,255-Rv); } /************************************** Calculate Distance in cm (HC-SR04) ***************************************/ float read_sr04() { digitalWrite(trig,LOW); delayMicroseconds(2); digitalWrite(trig,HIGH); delayMicroseconds(10); digitalWrite(trig,LOW); delayMicroseconds(2); long distance = pulseIn(echo, HIGH); return (0.034*distance/2); }