#include <Arduino_FreeRTOS.h>
#include <queue.h>
//USTAWIENIE PODSTAWOWYCH CZESTOTLIWOSCI SWIECENIA DIOD
int LEDRFreq = 100;
int LEDGFreq = 100;
int LEDBFreq = 100;
//DEKLARACAJ KOLEJKI
QueueHandle_t kolejka;
void setup() {
//TWORZENIE KOLEJKI
kolejka = xQueueCreate(3, sizeof(char[10]));
Serial.begin(9600);
// TWORZENIE ZADAN
xTaskCreate(TaskBlink1, "Blink1", 128, NULL, 2, NULL);
xTaskCreate(TaskBlink2, "Blink2", 128, NULL, 2, NULL);
xTaskCreate(TaskBlink3, "Blink3", 128, NULL, 2, NULL);
xTaskCreate(OdbierzKolejke, "OdbierzKolejke", 128, NULL, 1, NULL);
xTaskCreate(TaskAnalogRead, "AnalogRead", 128, NULL, 1, NULL);
}
void loop()
{
}
// ZADANIA
//ZADANIE DO MIGANIA DIODA
void TaskBlink1(void *pvParameters)
{
(void) pvParameters;
pinMode(LED_BUILTIN, OUTPUT);
for(;;)
{
//POCZATKOWO UZYWALEM SEMAFOROW, JEDNAKZE Z NICH ZREZYGNOWALEM
//xSemaphoreTake(mutex, portMAX_DELAY);
digitalWrite(13, HIGH); // ZMIANA TRYBU NA HIGH
vTaskDelay( LEDRFreq / portTICK_PERIOD_MS ); // delay
digitalWrite(13, LOW);
//xSemaphoreGive(mutex);
vTaskDelay( LEDRFreq / portTICK_PERIOD_MS );
}
}
void TaskBlink2(void *pvParameters)
{
(void) pvParameters;
pinMode(LED_BUILTIN, OUTPUT);
for(;;)
{
//POCZATKOWO UZYWALEM SEMAFOROW, JEDNAKZE Z NICH ZREZYGNOWALEM
//xSemaphoreTake(mutex, portMAX_DELAY);
digitalWrite(12, HIGH);
vTaskDelay( LEDGFreq / portTICK_PERIOD_MS );
digitalWrite(12, LOW);
//xSemaphoreGive(mutex);
vTaskDelay( LEDGFreq / portTICK_PERIOD_MS );
}
}
void TaskBlink3(void *pvParameters)
{
(void) pvParameters;
pinMode(LED_BUILTIN, OUTPUT);
for(;;)
{
//POCZATKOWO UZYWALEM SEMAFOROW, JEDNAKZE Z NICH ZREZYGNOWALEM
//xSemaphoreTake(mutex, portMAX_DELAY);
digitalWrite(11, HIGH);
vTaskDelay( LEDBFreq / portTICK_PERIOD_MS );
digitalWrite(11, LOW);
//xSemaphoreGive(mutex);
vTaskDelay( LEDBFreq / portTICK_PERIOD_MS );
}
}
//ZADANIE DO ODCZYTYWANIA WARTOSCI Z ANALOGOWYCH PORTOW POTENCJOMETRU
void TaskAnalogRead( void *pvParameters __attribute__((unused)) )
{
char buf[10];
for (;;)
{
// wczytanie wartosci z potencjometrow
int sensorValue1 = analogRead(A0);
int sensorValue2 = analogRead(A1);
int sensorValue3 = analogRead(A5);
// ZMIANA CZESTOTLIWOSCI MIGANIA DIOD ( POD WARUNKIEM, ZE NIE JEST ROWNA 0)
if(sensorValue1 != 0){
LEDRFreq = sensorValue1;
}
if(sensorValue2 != 0){
LEDGFreq = sensorValue2;
}
if(sensorValue3 != 0){
LEDBFreq = sensorValue3;
}
//PRZESLANIE WARTOSCI KOLEJKA
sprintf(buf, "R! %d", LEDRFreq);
xQueueSend(kolejka, &buf, 100);
//Serial.println(buf);
sprintf(buf, "G! %d", LEDGFreq);
xQueueSend(kolejka, &buf, 100);
//Serial.println(buf);
sprintf(buf, "B! %d", LEDBFreq);
xQueueSend(kolejka, &buf, 100);
//Serial.println(buf);
vTaskDelay(100);
}
vTaskDelay(5);
}
//ODBIERANIE WARTOSCI PRZEZ KOLEJKE I WYPISANIE ICH W KONSOLI.
void OdbierzKolejke(void *pvParameters){
char myBuf[10];
while(1){
if(kolejka != 0){
if(xQueueReceive( kolejka, &myBuf, 100));
Serial.println(myBuf);
}
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
led1:A
led1:C
r1:1
r1:2
led2:A
led2:C
r2:1
r2:2
led3:A
led3:C
r3:1
r3:2
pot1:GND
pot1:SIG
pot1:VCC
pot2:GND
pot2:SIG
pot2:VCC
pot3:GND
pot3:SIG
pot3:VCC