From f7ca6a1c7cd0c091bcec145d898070b4def076bf Mon Sep 17 00:00:00 2001
From: 201221016Kim Haeram <bbusy087@ajou.ac.kr>
Date: Sun, 15 Dec 2019 01:27:50 -1000
Subject: [PATCH] final

---
 app.c | 385 ----------------------------------------------------------
 1 file changed, 385 deletions(-)
 delete mode 100644 app.c

diff --git a/app.c b/app.c
deleted file mode 100644
index 727fc82..0000000
--- a/app.c
+++ /dev/null
@@ -1,385 +0,0 @@
-#include <stdio.h>
-#include <pthread.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <wiringPi.h>
-#include <wiringPiSPI.h>
-
-#include <fcntl.h> 
-#include <string.h>
-#include <stdint.h>
-#include <sys/ioctl.h> 
-#include <sys/types.h> 
-#include <sys/sysmacros.h>  
-#include <linux/spi/spidev.h>
-
-#define LOADCELL_MAJOR_NUMBER	502
-#define LOADCELL_MINOR_NUMBER	100
-#define LOADCELL_DEV_PATH_NAME		"/dev/loadcell_dev"
-#define LOADCELL_THRESHOLD		10000
-
-#define LED_PED_GREEN	18
-#define LED_CAR_RED		23
-#define LED_CAR_YELLOW	24
-#define LED_CAR_GREEN	25
-
-#define HS_TRIG	2
-#define HS_ECHO	3
-
-#define HS_MAX	1400
-#define HS_MIN	50
-#define HS_WAIT_THRESHOLD	10
-#define HS_INCOME_THRESHOLD	30
-#define TERM_COMING	1
-
-#define SPI_DEV0_PATH	"/dev/spidev0.0"
-#define SPI_CHANNEL	0
-#define SPI_SPEED	1000000
-#define SPI_DELAY	0
-#define SPI_BPW		8
-#define ADC_CHANNEL	0
-#define WATER_THRESHOLD 300
-
-#define MAIN_WAITTIME	3
-
-int isPedestrianComing = 0;
-long weight = -1;
-double distance = -1;
-int adc_value = -1;
-long tare = -1;
-
-void *hs_read(void *data){
-	printf("hs_read() called\n");
-	while(1){
-		digitalWrite(HS_TRIG, HIGH);
-		delayMicroseconds(10);
-		digitalWrite(HS_TRIG, LOW);
-		unsigned int echoStart = millis();
-		while(digitalRead(HS_ECHO) == LOW && millis()-echoStart < 1000) {
-			// do nothing
-		}
-		if (millis()-echoStart < 1000) {
-		// Mark start
-		unsigned int start = micros();
-		while(digitalRead(HS_ECHO) == HIGH) {
-			// do nothing
-		}
-		// Mark end
-		unsigned int end = micros();
-		unsigned int delta = end-start;
-		
-		if(delta < HS_MAX && delta > HS_MIN){
-			distance = 34029 * delta / 2000000.0;	
-			//printf("Distance: %f\n", distance);
-		}
-		else distance = -1;
-		}
-	}
-    
-}
-
-void *water_read(void *data){
-	unsigned char buffer[3];
-	struct spi_ioc_transfer spi;
-	int spiFds = *(int *)data;
-	
-	buffer[0] = 1;
-	buffer[1] = (8 + ADC_CHANNEL) << 4;
-	buffer[2] = 0;
-	memset(&spi, 0, sizeof(spi));
-	spi.tx_buf = (unsigned long)buffer;
-	spi.rx_buf = (unsigned long)buffer;
-	spi.len = 3;
-	spi.delay_usecs = (uint16_t) SPI_DELAY;
-	spi.speed_hz = (uint16_t) SPI_SPEED;
-	spi.bits_per_word = (uint8_t) SPI_BPW;
-	
-	while (1) {
-		ioctl(spiFds, SPI_IOC_MESSAGE(1), &spi);
-		adc_value = ((buffer[1] & 3) << 8) + buffer[2];
-		delay(100);
-	}
-}
-
-void *incoming_validate(void *data){
-	double buf1 = 0;
-	double buf2 = 0;
-	double buf3 = 0;
-	//printf("thread opened\n");
-	while(distance<0){
-		//printf("distance not ready\n");
-		sleep(1);
-	}
-	
-	buf1 = distance;
-	sleep(TERM_COMING);
-	
-	while(distance<0){
-		//printf("distance not ready\n");
-		sleep(1);
-	}
-	buf2 = distance;
-	sleep(TERM_COMING);
-	while(TRUE){
-		while(distance<0){
-			isPedestrianComing = FALSE;
-			//printf("distance not ready\n");
-			sleep(1);
-		}
-		buf3 = distance;
-		if(buf3 < HS_INCOME_THRESHOLD
-			& ((isPedestrianComing == TRUE)
-			|| (buf2 - buf1 < 0
-			&& buf3 - buf2 < 0))){
-				isPedestrianComing = TRUE;
-				//printf("%2.1f %2.1f %2.1f true\n",buf1,buf2,buf3);
-		}
-		else{
-				isPedestrianComing = FALSE;
-				//printf("%2.1f %2.1f %2.1f false\n",buf1,buf2,buf3);
-		}
-		sleep(TERM_COMING);
-		
-		while(distance<0){
-			isPedestrianComing = FALSE;
-			//printf("distance not ready\n");
-			sleep(1);
-		}
-		buf1 = distance;
-		if(buf1 < HS_INCOME_THRESHOLD
-			& ((isPedestrianComing == TRUE)
-			|| (buf3 - buf2 < 0
-			&& buf1 - buf3 < 0))){
-				isPedestrianComing = TRUE;
-				//printf("%2.1f %2.1f %2.1f true\n",buf2,buf3,buf1);
-		}
-		else{
-				isPedestrianComing = FALSE;
-				//printf("%2.1f %2.1f %2.1f false\n",buf2,buf3,buf1);
-		}
-		sleep(TERM_COMING);
-		
-		while(distance<0){
-			isPedestrianComing = FALSE;
-			//printf("distance not ready\n");
-			sleep(1);
-		}
-		buf2 = distance;
-		if(buf2 < HS_INCOME_THRESHOLD
-			& ((isPedestrianComing == TRUE)
-			|| (buf1 - buf3 < 0
-			&& buf2 - buf1 < 0))){
-				isPedestrianComing = TRUE;
-				//printf("%2.1f %2.1f %2.1f true\n",buf3,buf1,buf2);
-		}
-		else{
-				isPedestrianComing = FALSE;
-				//printf("%2.1f %2.1f %2.1f false\n",buf3,buf1,buf2);
-		}
-		sleep(TERM_COMING);
-	}
-}
-/*
-void *weight_read(void *data){
-	int loadcell_fd = *(int*)data;
-	int i, test;
-	long buffer[1];
-	long sample[5];
-	long avg;
-	
-	while(1){
-		*buffer = -1;
-		while(*buffer < 3000 || *buffer >= 200000){
-			usleep(100);
-			read(loadcell_fd,buffer,4);
-		}
-		
-	}
-	
-	test = 0;
-	while(test<5){
-		test = 0;
-		avg=0;
-		for(i=0;i<5;i++){
-			read(loadcell_fd,buffer,4);
-			while(*buffer < 0 || *buffer >= 0x7fffff){
-				usleep(100000);
-				read(loadcell_fd,buffer,4);
-			}
-			//printf("%ld ",*buffer);
-			sample[i] = *buffer;
-			avg += sample[i];
-		}
-		avg /= 5;
-		for(i=0;i<5;i++){
-			if((sample[i] - avg) < (avg*0.1) 
-				&& (sample[i] - avg) > -(avg*0.1)){
-				test++;
-				//printf("test+ ");
-			}
-			//else printf("test- ");
-		}
-		//printf("avg: %ld \n",avg);
-	}
-	tare = avg;
-	
-	while(1){
-		test = 0;
-		avg = 0;
-		for(i=0;i<3;i++){
-			read(loadcell_fd,buffer,4);
-			while(*buffer < 0 || *buffer >= 0x7fffff){
-				usleep(100000);
-				read(loadcell_fd,buffer,4);
-			}
-			sample[i] = *buffer;
-			avg += sample[i];
-		}
-		avg /= 3;
-		//printf("avg: %ld / ",avg);
-		for(i=0;i<3;i++){
-			if((sample[i] - avg) < (avg*0.1) 
-				&& (sample[i] - avg) > -(avg*0.1)){
-				test++;
-				//printf("%ld+ ",sample[i]);
-			}
-			//else printf("%ld- ",sample[i]);
-		}
-		//printf("\n");
-		if(test == 3){
-			weight = avg - tare;
-			//printf("weighted : %ld",weight);
-		}
-		sleep(1);
-	}
-}
-*/
-
-int main(void){
-	pthread_t waterThread, hsReadThread, incomeCheckThread, weightThread;	
-	//setbuf(stdout, NULL);
-	
-	int rc = wiringPiSetupGpio();
-	if (rc != 0) {
-		printf("Failed to wiringPiSetupGpio()\n");
-		return 0;
-	}
-	
-	// setup trafficlight
-	pinMode(LED_PED_GREEN, OUTPUT);
-	pinMode(LED_CAR_RED, OUTPUT);
-	pinMode(LED_CAR_YELLOW, OUTPUT);
-	pinMode(LED_CAR_GREEN, OUTPUT);
-/*
-	// setup weight
-	int loadcell_dev = open(LOADCELL_DEV_PATH_NAME, O_RDWR < 0);
-	if(loadcell_dev < 0){
-		printf("Failed to open loadcell device\n");
-		return -1;
-	}
-	if(pthread_create(&weightThread, NULL, weight_read, (void *)&loadcell_dev) < 0){
-		perror("thread create error: ");
-		exit(0);
-	}
-	
-	// waiting tare
-	printf("init weight tare, plz wait..\n");
-	while(1){
-		if(tare>0) break;
-	}
-	printf("tare init done: %ld\n",tare);
-	*/
-	
-	// setup water
-	int waterdev = open(SPI_DEV0_PATH, O_RDWR < 0);
-	if(waterdev < 0){
-		printf("Failed to open water device\n");
-		return -1;
-	}
-	
-	if(pthread_create(&waterThread, NULL, water_read, (void *)&waterdev) < 0){
-		perror("thread create error: ");
-		exit(0);
-	}
-	
-	// setup hs
-	pinMode(HS_TRIG, OUTPUT);
-	pinMode(HS_ECHO, INPUT);
-	digitalWrite(HS_TRIG, LOW);
-	if(pthread_create(&hsReadThread, NULL, hs_read, (void *)NULL) < 0){
-		perror("thread create error: ");
-		exit(0);
-	}
-	
-	if(pthread_create(&incomeCheckThread, NULL, incoming_validate, (void *)NULL) < 0){
-		perror("thread create error: ");
-		exit(0);
-	}
-	
-	int yellowTime;
-	int pedestrianTime;
-	int extendCount;
-	
-	while(1){	
-		digitalWrite(LED_PED_GREEN,LOW);	// pedestrian = red
-		digitalWrite(LED_CAR_RED,LOW);
-		digitalWrite(LED_CAR_YELLOW,LOW);
-		digitalWrite(LED_CAR_GREEN,HIGH);	// car = green
-		
-		while(distance<0){
-			printf("waiting pedestrian now..\n");
-			sleep(MAIN_WAITTIME);
-		}
-		if(distance < HS_WAIT_THRESHOLD){
-			printf("pedestrian accepted. validating now..\n");
-			sleep(MAIN_WAITTIME);
-			if(distance < HS_WAIT_THRESHOLD && distance != -1){
-				// pedestrian waited enough, give him signal
-				printf("pedestrian validated. turn on yellow\n");
-				if(adc_value > WATER_THRESHOLD){
-					// road is slippy, long yellow light time
-					yellowTime = MAIN_WAITTIME *2;
-				}
-				else{
-					yellowTime = MAIN_WAITTIME;
-				}
-
-				digitalWrite(LED_CAR_YELLOW,HIGH);
-				digitalWrite(LED_CAR_GREEN,LOW); // car = yellow
-				printf("yellow-> sleep %d\n",yellowTime);
-				sleep(yellowTime);
-				
-				digitalWrite(LED_PED_GREEN,HIGH); // pedestrian = green
-				digitalWrite(LED_CAR_RED,HIGH);
-				digitalWrite(LED_CAR_YELLOW,LOW);  // car = red
-				pedestrianTime = MAIN_WAITTIME *5;
-				extendCount = 0;
-				while(pedestrianTime > 0){
-					sleep(MAIN_WAITTIME);
-					pedestrianTime -= MAIN_WAITTIME;
-					if(weight < LOADCELL_THRESHOLD
-						&& isPedestrianComing == TRUE
-						&& extendCount < 3){
-						// car is NOT waiting, pedestrian coming.
-						pedestrianTime += MAIN_WAITTIME;
-						extendCount++;
-						printf("pedestrian ++, pedestrian = %d\n", pedestrianTime);
-					}
-					else{
-						printf("pedestrian --, pedestrian = %d\n", pedestrianTime);
-					}
-				}
-			}
-			else{
-				printf("pedestrian declined, move to first step..\n");
-			}
-		}
-	}
-
-	
-	digitalWrite(LED_PED_GREEN,LOW);
-	digitalWrite(LED_CAR_RED,LOW);
-	digitalWrite(LED_CAR_GREEN,LOW);
-	
-	return 0;
-}
-- 
GitLab