Light Detection – разпознаване на светлина

Програма на Ардуино, за разпознаване на светлина -Когато се закрие светлината или стане тъмно – постепенно лампичката светва.
При светлина отново постепенно загасва лампичката.

По този начин може да направите вечна светлина за вашата стая, с минимални разходи за ток.

/*
Ot Ivelin
Svetlinen detektor 
Kogato stane tymno ili se zakrie svetlinata
postepenno se svetla lampata ili zagasva
Chasti:
1. 2 rezistor 220
2. rezistor 10k
2. senzor za razpoznavane na svetlina
*/
int ledPin = 10;
int sensPin = 5;

//nastoika za svetlinata
int minimumLight = 860;

int lastVal = 0;
int lightVal = 0;

void setup() {
  pinMode(sensPin,INPUT);
  pinMode(ledPin,OUTPUT);
  Serial.begin(9600);
}
void loop() {
   int lightMode = analogRead(sensPin);
   Serial.println(lightMode);
   if(lightMode>minimumLight) {
     lightVal -=1;
   } else {
     lightVal += 1;
   }
   if(lightVal<0) lightVal = 0;
   else if(lightVal>255) lightVal = 255;
   analogWrite(ledPin,lightVal);
   delay(50);
}

Няма коментари

Black & White (разпознавател)

Програма на Ардуино, чрез която при показване на бяло свети една лампичка, а при черно – втора.
Може да се използва като основа за по-големи проекти, като например за Преследвач на линия (Line follower).

/*
Ot Ivelin
Prosta programa za razpoznavane na Cherno i Bqlo.
Chasti:
1. 2 rezistora 220
2. 1 rezistor 10k
3. Switch (Buton)
*/
int ledPin1 = 10;
int ledPin2 = 11;
int sensPin = 5;

//nastroikite sa na zatymnena staq
int minimumBlackDetection = 300;
int maximumBlackDetection = 500;
int minimumWhiteDetection = 500;
int maximumWhiteDetection = 1023;

int lastVal = 0;
int lightVal = 0;

void setup() {
  pinMode(sensPin,INPUT);
  pinMode(ledPin1,OUTPUT);
  pinMode(ledPin2,OUTPUT);
  Serial.begin(9600);
}
void loop() {
   int lightMode = analogRead(sensPin);
   if(lightMode > minimumBlackDetection && lightMode < maximumBlackDetection) {
     digitalWrite(ledPin1,HIGH);
   } else {
     digitalWrite(ledPin1,LOW);
   }
   if(lightMode > minimumWhiteDetection && lightMode < maximumWhiteDetection) {
     digitalWrite(ledPin2,HIGH);
   } else {
     digitalWrite(ledPin2,LOW);
   }
   Serial.println(lightMode);
   delay(50);
}

Няма коментари

Генератор за Prolog

Генератор без повторения на всички числа z, които се представят във вида z = x^y за x,y > 1 естествени числа.

div_while_possible(X, X):-!.
div_while_possible(Z, X):-Z mod X =:= 0, Z1 is Z // X, div_while_possible(Z1, X).

Да се напише генератор gen_list(+M,+N,-L) на всички строго растящи редици от естествени числа от M до N включително. Допуска се и празната редица. Задачата има поне три различни по идея решения.
Упътване: подсписъци на списък, използване на between, рекурсивно свеждане към задачата за M+1 и N.

int(0).
int(X):-int(Y), X is Y + 1.

between(X, Y, X):- X =< Y.
between(X, Y, Z):- X < Y, X1 is X + 1, between(X1, Y, Z).

is_xy(Z):-Z1 is Z - 1, between(2, Z1, X), div_while_possible(Z, X), !.

gen_xy(Z):-int(Z), is_xy(Z).

Предикат find_list(+M,+N,-L), който намира списък от всички строго растящи редици от естествени числа от M до N включително. Допуска се и празната редица. Задачата има поне две различни по идея решения. Упътване: последователно пораждане на всички редици, рекурсивно свеждане към задачата за M+1 и N.

add_x(_, [], []):-!.
add_x(X, [H|T], [[X|H]|T1]):-add_x(X, T, T1).

find_list(X, X, [[], [X]]):-!.
find_list(X, Y, R):- add_x(X, L, L1), append(L1, L, R).

Няма коментари

Задача на Пролог – генератори

Дефиниция на ПРОЛОГ на предикат p(X,Y,N), който по дадени естествени числа X,Y връща в N:
Вариант А
броят на числата, които делят X, но не делят Y
Вариант Б
броят на общите делители на X и Y
б) Да се напише генератор без повторения на множеството
Вариант А
{ (x,y) | x>=1, y>=1 и броят на числата, който делят X, но не делят Y е точно Y }
Вариант Б
{ (x,y) | x>=y и броят на общите делители на X и Y е точно 5 }
Време за работа – 2 часа.

int(0).
int(X):-int(Y), X is Y + 1.

between(X, Y, X):- X =< Y.
between(X, Y, Z):- X < Y, X1 is X + 1, between(X1, Y, Z).

ph(X, X, _, 0):-!.
ph(X, _, D, 0):- D > X, !.
ph(X, Y, D, N):- D =< X, X mod D =:= 0, Y mod D =\= 0, !, D1 is D + 1, ph(X, Y, D1, N1), N is N1 + 1.
ph(X, Y, D, N):- D =< X, D1 is D + 1, ph(X, Y, D1, N).

zad2_p(X, Y, N):- ph(X, Y, 2, N).

zad2_gen_xy([X, Y]):-int(X), between(1, X, Y), zad2_p(X, Y, Y).
?-zad2_p(17,12,X),write(X).

Няма коментари

Prolog – Брой на кратни елементи в списък, сума на по-малки елементи в списък

Дефиниция на ПРОЛОГ на предикат p(X,L,N), който по даден списък от естествени числа L и естествено число X връща в числото N:

броят на тези елементи на L, които са кратни на X

p(X,[],0).
p(X,[Y|L],N):-Y mod X =:= 0, p(X,L,N1), N is N1+1.
p(X,[Y|L],N):-Y mod X > 0, p(X,L,N).
%?-p(4,[1,4,6,16,9,4],X),write(X),nl.
сумата на тези елементи на L, които са <= X
p(X,[],0).
p(X,[Y|L],N):-Y =< X, p(X,L,N1), N is N1+Y.
p(X,[Y|L],N):-Y > X, p(X,L,N).
?-p(12,[1,4,6,16,9,4],X),write(X),nl.

Няма коментари

  • Страница 7 от 9
  • <
  • 1
  • ...
  • 5
  • 6
  • 7
  • 8
  • ...
  • 9
  • >