Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- /*
- * File: main.c
- * Author: Umut KAZANÇ
- *
- * Created on 12 Nisan 2017 Çarşamba, 18:40
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <netdb.h>
- #include <netinet/in.h>
- #include <string.h>
- #include <arpa/inet.h> /* for sockaddr_in and inet_ntoa() */
- #include <wiringPi.h>
- #include <softPwm.h>
- #include <stdint.h>
- #include <unistd.h>
- //prg versiyon
- #define PrgVer "1.0.1"
- //pinler
- #define Motor1_1 0
- #define Motor1_2 1
- #define Motor2_1 2
- #define Motor2_2 3
- #define Motor1_E 4
- #define Motor2_E 5
- #define LedSag 21
- #define LedSol 22
- #define LedOnFar 23
- #define LedArkaFar 24
- #define LED1 25
- #define TRIG 13
- #define ECHO 12
- #define Servo1 11
- //komut str
- #define cmd_ileri "<ileri>"
- #define cmd_geri "<geri>"
- #define cmd_sag "<sag>"
- #define cmd_sol "<sol>"
- #define cmd_dur "<dur>"
- #define cmd_close "<close>"
- #define cmd_temp "<temp>"
- #define cmd_hiz "&hiz="
- #define cmd_servo1 "servo1="
- #define cmd_info "info=?"
- #define cmd_onfar "onfar=ok"
- #define HTTP_OK "HTTP/1.1 200 OK\r\n\r\n"
- #define ForntMinDist 25 //cm
- #define Servo1MaxVal 22 //servo motorum max pwm
- #define Servo1MinVal 5 //servo motorum min pwm
- #define DIST_KEY 0
- //tcp
- int sockfd, newsockfd, portno, clilen;
- char buffer[256];
- char TXbuffer[256];
- struct sockaddr_in serv_addr, cli_addr;
- int n;
- //temp
- char CPUtempfile[] = {"/sys/class/thermal/thermal_zone0/temp"};
- char DStempfile[] = {"/sys/devices/w1_bus_master1/28-041502394cff/w1_slave"};
- //değiskenler
- uint16_t CPUTemp=0;
- uint16_t DSTemp=0;
- char *ptr1;
- char *ptr2;
- uint8_t strsize;
- uint8_t MotorHiz=50;
- char HizStr[5];
- int FrontDist=0;
- uint8_t FrontDistAlert=0;
- uint8_t ileriEN=0;
- uint8_t geriEN=0;
- uint8_t sagEN=0;
- uint8_t solEN=0;
- uint8_t Servo1Val=50;
- char Servo1ValStr[5];
- uint8_t Servo1ValYed;
- uint16_t Servo1Delay;
- //prototip
- int getForntCM();
- uint16_t GetCPUTemp();
- uint16_t GetDSTemp();
- void MultiThreading_init(void);
- void LedToggle(void);
- void Gpio_init(void);
- void TCPserver_init(void);
- void Motor_ileri(void);
- void Motor_geri(void);
- void Motor_sag(void);
- void Motor_sol(void);
- void Motor_dur(void);
- void Servo1_Kontrol(void);
- void ServoShow(void);
- void OnFarToggle(void);
- int main(int argc, char** argv)
- {
- //init
- printf("\r\n------------------------------\r\n");
- printf("RC CAR Uygulamasi DEMO test...\r\n");
- wiringPiSetup();
- Gpio_init();
- MultiThreading_init();
- TCPserver_init();
- ServoShow();
- delay(50);
- //main while
- while(1)
- {
- //MultiThreading olduğu için main boş kalacak :)
- delay(250);
- }
- return (EXIT_SUCCESS);
- }
- ///////////////////MultiThreading/////////////////////
- PI_THREAD (TCPserver)
- {
- while(1)
- {
- if((newsockfd = accept(sockfd, (struct sockaddr *)&cli_addr, &clilen))>=0)
- {
- n = read( newsockfd,buffer,sizeof(buffer));
- buffer[n] = '\0';
- printf("\r\nGelen Data:(%d) %s\r\n",n,buffer);
- //------Gelen Komutların Pars Edilmesi---------
- if(strstr(buffer, cmd_info)!= NULL)
- {
- CPUTemp = GetCPUTemp();
- DSTemp = GetDSTemp();
- sprintf(TXbuffer,"%sINFO: Temp(uC:%5.3f°C, DS:%5.3f°C), DIST(%dcm), PrgVer(%s)\r\n",HTTP_OK,(float) CPUTemp / 1000,(float) DSTemp / 1000,FrontDist,PrgVer);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > INFO\r\n");
- }
- if(strstr(buffer, cmd_onfar)!= NULL)
- {
- OnFarToggle();
- sprintf(TXbuffer,"%sOn Far Toggle\r\n",HTTP_OK);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > On Far Toggle\r\n");
- }
- if(strstr(buffer, cmd_servo1)!= NULL)
- {
- Servo1_Kontrol();
- }
- if(strstr(buffer, cmd_hiz)!= NULL)
- {
- ptr1 = strstr(buffer, "&hiz=");
- ptr2 = strstr(buffer, " HTTP");
- ptr1 = ptr1 + 5;
- strsize = (ptr2 - ptr1);
- if(ptr1 != NULL && ptr2 != NULL && strsize < sizeof(HizStr))
- {
- memcpy(HizStr, ptr1, strsize);
- HizStr[strsize] = '\0';
- MotorHiz = atoi(HizStr);
- }
- }
- if(strstr(buffer, cmd_ileri)!= NULL)
- {
- if(FrontDist>ForntMinDist)
- {
- Motor_ileri();
- }
- else
- {
- sprintf(TXbuffer,"%sMesafeYetersiz(%dcm)\r\n",HTTP_OK,FrontDist);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > ileri (mesafe yetersiz)\r\n");
- }
- }
- if(strstr(buffer, cmd_geri)!= NULL)
- {
- Motor_geri();
- }
- if(strstr(buffer, cmd_sag)!= NULL)
- {
- Motor_sag();
- }
- if(strstr(buffer, cmd_sol)!= NULL)
- {
- Motor_sol();
- }
- if(strstr(buffer, cmd_dur)!= NULL)
- {
- Motor_dur();
- }
- //------------------------------------
- close(newsockfd);
- }
- delay(10);
- }
- close(sockfd);
- }
- PI_THREAD (FrontDistance)
- {
- (void)piHiPri (10) ; // Set this thread to be high priority
- while(1)
- {
- piLock (DIST_KEY) ;
- FrontDist = getForntCM();
- piUnlock (DIST_KEY) ;
- if((FrontDist<=ForntMinDist) && (FrontDistAlert==0))
- {
- FrontDistAlert=1;
- Motor_dur();
- }
- if(FrontDist>ForntMinDist)
- {
- FrontDistAlert=0;
- }
- delay(75);
- }
- }
- PI_THREAD (LEDflash)
- {
- while(1)
- {
- LedToggle();
- delay(250);
- }
- }
- void Servo1_Kontrol(void)
- {
- ptr1 = strstr(buffer, "servo1=");
- ptr2 = strstr(buffer, " HTTP");
- ptr1 = ptr1 + 7;
- strsize = (ptr2 - ptr1);
- if(ptr1 != NULL && ptr2 != NULL && strsize < sizeof(Servo1ValStr))
- {
- memcpy(Servo1ValStr, ptr1, strsize);
- Servo1ValStr[strsize] = '\0';
- Servo1ValYed = Servo1Val;
- Servo1Val = atoi(Servo1ValStr);
- if(Servo1Val>Servo1ValYed)
- {
- Servo1Delay = Servo1Val - Servo1ValYed;
- }
- else
- {
- Servo1Delay = Servo1ValYed - Servo1Val;
- }
- Servo1Delay = Servo1Delay * 100;
- if((Servo1Val>=5) && (Servo1Val<=22))
- {
- softPwmWrite (Servo1, Servo1Val);
- delay(Servo1Delay);
- softPwmWrite (Servo1, 0);
- sprintf(TXbuffer,"%sKamera Kontrol(%d)\r\n",HTTP_OK,Servo1Val);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > Kamera Kontrol\r\n");
- }
- else
- {
- sprintf(TXbuffer,"%sHatali deger...(%d)\r\n",HTTP_OK,Servo1Val);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > Kamera Kontrol > Hatali deger...\r\n");
- }
- }
- }
- void Motor_ileri(void)
- {
- digitalWrite (Motor1_1, HIGH);
- digitalWrite (Motor1_2, LOW);
- digitalWrite (Motor2_1, LOW);
- digitalWrite (Motor2_2, HIGH);
- softPwmWrite (Motor1_E, MotorHiz);
- softPwmWrite (Motor2_E, MotorHiz);
- sprintf(TXbuffer,"%sileri\r\n",HTTP_OK);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > ileri\r\n");
- }
- void Motor_geri(void)
- {
- digitalWrite (Motor1_1, LOW);
- digitalWrite (Motor1_2, HIGH);
- digitalWrite (Motor2_1, HIGH);
- digitalWrite (Motor2_2, LOW);
- softPwmWrite (Motor1_E, MotorHiz);
- softPwmWrite (Motor2_E, MotorHiz);
- digitalWrite (LedArkaFar, HIGH);
- sprintf(TXbuffer,"%sgeri\r\n",HTTP_OK);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > geri\r\n");
- }
- void Motor_sag(void)
- {
- digitalWrite (Motor1_1, LOW);
- digitalWrite (Motor1_2, LOW);
- digitalWrite (Motor2_1, LOW);
- digitalWrite (Motor2_2, HIGH);
- softPwmWrite (Motor1_E, 0);
- softPwmWrite (Motor2_E, MotorHiz);
- digitalWrite (LedSag, HIGH);
- sprintf(TXbuffer,"%ssag\r\n",HTTP_OK);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > sag\r\n");
- }
- void Motor_sol(void)
- {
- digitalWrite (Motor1_1, HIGH);
- digitalWrite (Motor1_2, LOW);
- digitalWrite (Motor2_1, LOW);
- digitalWrite (Motor2_2, LOW);
- softPwmWrite (Motor1_E, MotorHiz);
- softPwmWrite (Motor2_E, 0);
- digitalWrite (LedSol, HIGH);
- sprintf(TXbuffer,"%ssol\r\n",HTTP_OK);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > sol\r\n");
- }
- void Motor_dur(void)
- {
- digitalWrite (Motor1_1, LOW);
- digitalWrite (Motor1_2, LOW);
- digitalWrite (Motor2_1, LOW);
- digitalWrite (Motor2_2, LOW);
- softPwmWrite (Motor1_E, 0);
- softPwmWrite (Motor2_E, 0);
- digitalWrite (LedSag, LOW);
- digitalWrite (LedSol, LOW);
- digitalWrite (LedArkaFar, LOW);
- sprintf(TXbuffer,"%sdur\r\n",HTTP_OK);
- write(newsockfd,TXbuffer,strlen(TXbuffer));
- printf("Komut > dur\r\n");
- }
- /////////////////////////////////////////////////////
- void TCPserver_init(void)
- {
- sockfd = socket(AF_INET, SOCK_STREAM, 0);
- if (sockfd < 0)
- {
- perror("ERROR opening socket");
- exit(1);
- }
- bzero((char *) &serv_addr, sizeof(serv_addr));
- portno = 5001;
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_addr.s_addr = INADDR_ANY;
- serv_addr.sin_port = htons(portno);
- if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
- {
- perror("ERROR on binding");
- exit(1);
- }
- if(listen(sockfd,5)==0)
- {
- printf("TCP Server OK (%s:%d) ...\r\n",inet_ntoa(cli_addr.sin_addr),portno);
- }
- else
- {
- printf("TCP Server HATA ...\r\n");
- }
- clilen = sizeof(cli_addr);
- }
- void MultiThreading_init(void)
- {
- piThreadCreate (TCPserver);
- piThreadCreate (FrontDistance);
- piThreadCreate (LEDflash);
- printf("Multi Threading OK ...\r\n");
- }
- void Gpio_init(void)
- {
- //ledler
- pinMode (LED1, OUTPUT);
- pinMode (LedSag, OUTPUT);
- pinMode (LedSol, OUTPUT);
- pinMode (LedOnFar, OUTPUT);
- pinMode (LedArkaFar, OUTPUT);
- digitalWrite (LED1, LOW);
- digitalWrite (LedSag, LOW);
- digitalWrite (LedSol, LOW);
- digitalWrite (LedOnFar, LOW);
- digitalWrite (LedArkaFar, LOW);
- //motor pinler
- softPwmCreate (Motor1_E, 0, 100);
- softPwmCreate (Motor2_E, 0, 100);
- softPwmCreate (Servo1, 0, 1000);
- pinMode (Motor1_1, OUTPUT);
- pinMode (Motor1_2, OUTPUT);
- pinMode (Motor2_1, OUTPUT);
- pinMode (Motor2_2, OUTPUT);
- //motor pwm baslangic degerleri
- softPwmWrite (Motor1_E, 0);
- softPwmWrite (Motor2_E, 0);
- digitalWrite (Motor1_1, LOW);
- digitalWrite (Motor1_2, LOW);
- digitalWrite (Motor2_1, LOW);
- digitalWrite (Motor2_2, LOW);
- //Distance
- pinMode(TRIG, OUTPUT);
- pinMode(ECHO, INPUT);
- digitalWrite(TRIG, LOW);
- printf("Gpio OK ...\n");
- }
- void LedToggle(void)
- {
- //led1 flash
- if(digitalRead(LED1))
- {
- digitalWrite (LED1, LOW);
- }
- else
- {
- digitalWrite (LED1, HIGH);
- }
- }
- void OnFarToggle(void)
- {
- //led1 flash
- if(digitalRead(LedOnFar))
- {
- digitalWrite (LedOnFar, LOW);
- }
- else
- {
- digitalWrite (LedOnFar, HIGH);
- }
- }
- void ServoShow(void)
- {
- digitalWrite (LedSag, HIGH);
- digitalWrite (LedSol, HIGH);
- digitalWrite (LedOnFar, HIGH);
- digitalWrite (LedArkaFar, HIGH);
- softPwmWrite (Servo1, 12);
- delay(1500);
- softPwmWrite (Servo1, 22);
- delay(1500);
- softPwmWrite (Servo1, 17);
- delay(750);
- softPwmWrite (Servo1, 0);
- digitalWrite (LedSag, LOW);
- digitalWrite (LedSol, LOW);
- digitalWrite (LedOnFar, LOW);
- digitalWrite (LedArkaFar, LOW);
- }
- int getForntCM()
- {
- //Send trig pulse
- digitalWrite(TRIG, HIGH);
- delayMicroseconds(20);
- digitalWrite(TRIG, LOW);
- //Wait for echo start
- while(digitalRead(ECHO) == LOW);
- //Wait for echo end
- long startTime = micros();
- while(digitalRead(ECHO) == HIGH);
- long travelTime = micros() - startTime;
- //Get distance in cm
- int distance = travelTime / 58;
- return distance;
- }
- uint16_t GetCPUTemp()
- {
- FILE *fp;
- char filebuffer[100];
- if((fp=fopen(CPUtempfile,"r")) == NULL)
- {
- printf("Dosya açma hatası!\r\n(%s) Bulunamadı ...\r\n",CPUtempfile);
- exit(1);
- }
- fread(filebuffer, sizeof(filebuffer), 1, fp);
- fclose(fp);
- return atoi(filebuffer);
- }
- uint16_t GetDSTemp()
- {
- FILE *fp;
- char filebuffer[100];
- if((fp=fopen(DStempfile,"r")) == NULL)
- {
- printf("Dosya açma hatası!\r\n(%s) Bulunamadı ...\r\n",DStempfile);
- exit(1);
- }
- fread(filebuffer, sizeof(filebuffer), 1, fp);
- fclose(fp);
- ptr1 = strstr(filebuffer, "t=");
- ptr1 = ptr1 + 2;
- return atoi(ptr1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement