Skip to content
Snippets Groups Projects
Commit 074231d7 authored by 이장원's avatar 이장원
Browse files

led

parent 3e01f08d
Branches
No related tags found
No related merge requests found
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <pthread.h>
extern void *led_blue_task(void *);
extern void *led_orange_task(void *);
#include "led.h"
void *led_blue_task(void *arg)
{
printf("led blue task start\n");
int i, count = 0;
pinMode(4, OUTPUT);
for (i = 0; i < (int)arg; i++, count++)
{
digitalWrite(4, HIGH);
printf("blue ON\n");
delay(2000);
digitalWrite(4, LOW);
printf("blue OFF\n");
delay(2000);
}
printf("led blue task end\n");
pthread_exit((void *)count);
}
File added
#include "led.h"
void *led_main_task();
int main(int argc, char *argv[])
{
int i, task_mode = 0, task_repeat;
pthread_t red, blue, orange;
void *main_result = NULL, *blue_result = NULL, *orange_result = NULL;
if(argc != 1 && argc != 3)
{
printf("Usage : %s GPIO_NO\n", argv[0]);
exit(1);
}
if (argc == 3)
{
task_mode = atoi(argv[1]);
task_repeat = atoi(argv[2]);
}
for (i = 0; argv[i]; i++)
{
printf("%s ", argv[i]);
}
printf("\n");
wiringPiSetup();
if (task_mode == 0)
{
pthread_create(&red, NULL, led_main_task, NULL);
pthread_join(red, &main_result);
printf("led red blinked %d times\n", (int)main_result);
}
else if (task_mode == 1)
{
pthread_create(&red, NULL, led_main_task, NULL);
pthread_create(&blue, NULL, led_blue_task, (void *)task_repeat);
pthread_join(red, &main_result);
printf("led red blinked %d times\n", (int)main_result);
pthread_join(blue, &blue_result);
printf("led blue blinked %d times\n", (int)blue_result);
}
else if (task_mode == 2)
{
pthread_create(&red, NULL, led_main_task, NULL);
pthread_create(&orange, NULL, led_orange_task, (void *)task_repeat);
pthread_join(red, &main_result);
printf("led red blinked %d times\n", (int)main_result);
pthread_join(orange, &orange_result);
printf("led orange blinked %d times\n", (int)orange_result);
}
else if (task_mode == 3)
{
pthread_create(&red, NULL, led_main_task, NULL);
pthread_create(&blue, NULL, led_blue_task, (void *)task_repeat);
pthread_create(&orange, NULL, led_orange_task, (void *)task_repeat);
pthread_join(red, &main_result);
printf("led red blinked %d times\n", (int)main_result);
pthread_join(blue, &blue_result);
printf("led blue blinked %d times\n", (int)blue_result);
pthread_join(orange, &orange_result);
printf("led orange blinked %d times\n", (int)orange_result);
}
return 0;
}
void *led_main_task()
{
printf("led main task start\n");
int i, count = 0;
pinMode(1, OUTPUT);
for (i = 0; i < 10; i++, count++)
{
digitalWrite(1, HIGH);
printf("red ON\n");
delay(1000);
digitalWrite(1, LOW);
printf("red OFF\n");
delay(1000);
}
printf("led main task end\n");
pthread_exit((void *)count);
}
./led_main
led main task start
red ON
red OFF
red ON
red OFF
red ON
red OFF
red ON
red OFF
red ON
red OFF
red ON
red OFF
red ON
red OFF
red ON
red OFF
red ON
red OFF
red ON
red OFF
led main task end
led red blinked 10 times
./led_main 1 5
led main task start
red ON
led blue task start
blue ON
red OFF
blue OFF
red ON
red OFF
blue ON
red ON
red OFF
blue OFF
red ON
red OFF
blue ON
red ON
red OFF
blue OFF
red ON
red OFF
blue ON
red ON
red OFF
blue OFF
red ON
red OFF
blue ON
red ON
red OFF
blue OFF
red ON
red OFF
led blue task end
led main task end
led red blinked 10 times
led blue blinked 5 times
./led_main 2 3
led main task start
red ON
led orange task start
orange ON
red OFF
red ON
orange OFF
red OFF
red ON
red OFF
orange ON
red ON
red OFF
red ON
orange OFF
red OFF
red ON
red OFF
orange ON
red ON
red OFF
red ON
orange OFF
red OFF
red ON
red OFF
led orange task end
red ON
red OFF
led main task end
led red blinked 10 times
led orange blinked 3 times
./led_main 3 3
led main task start
red ON
led orange task start
orange ON
led blue task start
blue ON
red OFF
red ON
blue OFF
orange OFF
red OFF
blue ON
red ON
red OFF
orange ON
blue OFF
red ON
red OFF
blue ON
red ON
orange OFF
red OFF
blue OFF
red ON
red OFF
orange ON
led blue task end
red ON
red OFF
red ON
orange OFF
red OFF
red ON
red OFF
led orange task end
red ON
red OFF
led main task end
led red blinked 10 times
led blue blinked 3 times
led orange blinked 3 times
#include "led.h"
void *led_orange_task(void *arg)
{
printf("led orange task start\n");
int i, count = 0;
pinMode(5, OUTPUT);
for (i = 0; i < (int)arg; i++, count++)
{
digitalWrite(5, HIGH);
printf("orange ON\n");
delay(3000);
digitalWrite(5, LOW);
printf("orange OFF\n");
delay(3000);
}
printf("led orange task end\n");
pthread_exit((void *)count);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment