Light Detection – разпознаване на светлина
Публикувано от Ivelin Pavlov в Arduino Код, Код на 09 април 2012г.
Програма на Ардуино, за разпознаване на светлина -Когато се закрие светлината или стане тъмно – постепенно лампичката светва.
При светлина отново постепенно загасва лампичката.
По този начин може да направите вечна светлина за вашата стая, с минимални разходи за ток.
/* 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 (разпознавател)
Публикувано от Ivelin Pavlov в Arduino Код, Код на 09 април 2012г.
Програма на Ардуино, чрез която при показване на бяло свети една лампичка, а при черно – втора.
Може да се използва като основа за по-големи проекти, като например за Преследвач на линия (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
Публикувано от Ivelin Pavlov в Prolog Код, Код на 06 април 2012г.
Генератор без повторения на всички числа 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).
Задача на Пролог – генератори
Публикувано от Ivelin Pavlov в Prolog Код, Код на 06 април 2012г.
Дефиниция на ПРОЛОГ на предикат 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 – Брой на кратни елементи в списък, сума на по-малки елементи в списък
Публикувано от Ivelin Pavlov в Prolog Код, Код на 06 април 2012г.
Дефиниция на ПРОЛОГ на предикат 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.