Добре а как да направя така че примерно една програма си върви и натисна бутона и започни 2 програми паралелно да вървят.
Примерно имам един температурен сензор, 2Х7 сегментен дисплей, и RGB светодиод за да показва горе/долу цвят на градуса. И като се натисни бутона пак да си показва каква е температурата ама и да започне този ефект от горната програма вместо досегашното "цвят на градуса".
Опитах с тази програма ама като натисна бутона свети без да се смени цвета(стой на масив[0]) и промяна стоиностите на градусите.
#define A A5
#define B 3
#define C 4
#define D 5
#define E 6
#define F 7
#define G 8
// Pins driving common anodes
#define CA1 13
#define CA2 12
// Pins for A B C D E F G, in sequence
const int segs[7] = { A, B, C, D, E, F, G };
// Segments that make each number
const byte numbers[10] = {
0b1000000,//0
0b1111001,//1
0b0100100,//2
0b0110000,//3
0b0011001,//4
0b0010010,//5
0b0000010,//6
0b1111000,//7
0b0000000,//8
0b0010000 //9
};
//stoinostite na cvetovete
byte r[20]={ 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,128,198,255,255,255,255,255,255,255,255};
byte g[20]={ 0, 50,100,150,200,200,200,200,200,200,200,200,200,150,100, 50, 2, 0, 0, 0};
byte b[20]={200,200,200,200,200,150,100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 2, 50,100,150};
//efekta
byte effect(byte time){
for(byte i=0;i<20;i++){
return i;
delay(time);
}
}
//za miganeto na displeite
void lightDigit1(byte number){
digitalWrite(CA1, LOW);
digitalWrite(CA2, HIGH);
lightSegments(number);
}
//za miganeto na displeite
void lightDigit2(byte number){
digitalWrite(CA1, HIGH);
digitalWrite(CA2, LOW);
lightSegments(number);
}
//izkarva nujnoto 4islo
void lightSegments(byte number){
for (int i = 0; i < 7; i++) {
int bit = bitRead(number, i);
digitalWrite(segs[i], bit);
}
}
//nai vajnata 4ast na displeq
void seg(byte a, byte b){
unsigned long startTime = millis();
for (unsigned long elapsed=0; elapsed < 600; elapsed = millis() - startTime){
lightDigit1(numbers[a]);
delay(5);
lightDigit2(numbers[b]);
delay(5);
}
}
void setup()
{
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(CA1, OUTPUT);
pinMode(CA2, OUTPUT);
}
//main
void loop()
{
unsigned int val = analogRead(0); //temperaturniq sensor
byte temp = (5*val*100/1024); //preobrazuvaneto na temperatura
byte i;
if(analogRead(1)==0) //proverkata na butona
{
i =(temp/2)-1;
}else{
i = effect(100);
}
analogWrite(9,r[i]);
analogWrite(10,g[i]);
analogWrite(11,b[i]);
byte digit1, digit2; //tezi sa za da izkara ot dvycifreno 4islo 2 cifri
digit1 = temp % 10;
digit2 = temp - digit2;
digit2 = digit2 / 10;
seg(digit1,digit2);
}
Да отбележа от този код някои работи съм ги взел от интернет и някои леко са променени за да работи