Salve a tutti,
cerco aiuto per mettere sotto interrupt una ricezione di un segnale rf
,
perchè qualcosa ho provato con la libreria mstimer2
ma mi fa perdere dei tempi su un'altra parte del programma ovvero dove miscela i colori rgb.
aspetto che qualcuno mi aiuti,
grazie in anticipo
Ciao, ti faccio una domanda.
Se tu parli con un tuo amico meccanico davanti ad una birra in un pub e gli dici "La mia macchina non parte: cosa può essere?", come fa il povero dannato a darti una risposta?
E' una parafrasi per farti comprendere che senza codice, senza che tu ci dica cosa e come hai fatto il circuito, senza ulteriori informazioni è veramente complesso poterti dare un aiuto.
L'unica cosa che ti posso consigliare è questa pagina sul playground che ti fa comprendere come funzionano gli interrupt: SleepCode e questa dove ho imparato molto a proposito degli interrupt su uCHobby
#include <MsTimer2.h>
#include <EEPROM.h>
#include <HT12E.h>
HT12E remote(4, B11111110);
unsigned int valor;
int r=0;
int g=0;
int b=0;
byte redPwr = 0;
byte greenPwr = 0;
byte bluePwr = 0;
byte redNew = random(255);
byte greenNew = random(255);
byte blueNew = random(255);
byte a=0;
byte stby=0;
void rgb(int r, int g, int b) {
analogWrite(6,r);
analogWrite(9,g);
analogWrite(10,b);
}
void brgb(int r, int g, int b, int time) {
int i;
for(i=0;i<10;i++) {
analogWrite(6,r);
analogWrite(9,g);
analogWrite(10,b);
delay(time);
analogWrite(6,0); analogWrite(9,0); analogWrite(10,0);
delay(time);
}
}
void setup() {
MsTimer2::set(100, flash);
MsTimer2::start();
stby = EEPROM.read(2);
a = EEPROM.read(1);
}
void flash() {
valor = remote.read();
if(valor == 16 && stby ==0)
{a = a+=1; EEPROM.write(1, a); }
if(valor == 18 && stby ==0)
{a = a--; EEPROM.write(1, a); }
if(valor == 20)
{stby=0; EEPROM.write(2, stby);}
if(valor == 22)
{stby=1; EEPROM.write(2, stby);}
}
void loop() {
if(a > 14) {a = 0;}
if(stby ==1){rgb(0,0,0);}
if(a == 0 && stby ==0){rgb(156,185,255);} //color 0 Cool White
if(a == 1 && stby ==0){rgb(255,144,33);} //color 1 Warm White
if(a == 2 && stby ==0){rgb(255,0,255); } //color 2 Glicine
if(a == 3 && stby ==0){rgb(255,0,60);} //color 3 Fuxia
if(a == 4 && stby ==0){rgb(255,0,0);} //color 4 Rosso
if(a == 5 && stby ==0){rgb(255,74,0);} //color 5 Arancio
if(a == 6 && stby ==0){rgb(255,255,0);} //color 6 giallo
if(a == 7 && stby ==0){rgb(0,255,0);} //color 9 Green
if(a == 8 && stby ==0){rgb(0,255,70);} //color 6 Acqua
if(a == 9 && stby ==0){rgb(0,255,255);} //color 7 Cyano
if(a == 10 && stby ==0){rgb(0,0,255);} //color 10 Blue
if(a == 11 && stby ==0){
brgb(0,255,0,10);
delay(20);
while(true){
for(int i = 0; i < 256; i++) {rgb(255,i,0); if(valor < 23){ break; } delay(10); }
for(int i = 0; i < 256; i++) {rgb(255-i,255,0); if(valor < 23){ break; } delay(10); }
for(int i = 0; i < 256; i++) {rgb(0,255,i); if(valor < 23){ break; } delay(10); }
for(int i = 0; i < 256; i++) {rgb(0,255-i,255); if(valor < 23){ break; } delay(10); }
for(int i = 0; i < 256; i++) {rgb(i,0,255); if(valor < 23){ break; } delay(10); }
for(int i = 0; i < 256; i++) {rgb(255,0,255-i); if(valor < 23){ break; } delay(10); }
if(valor < 23){ break; }}} //Sequenza_1 Vel.1(30 sec)
if(a == 12 && stby ==0){
brgb(0,0,255,10);
delay(20);
while(true){
for(int i = 0; i < 256; i++) {rgb(255,i,0); if(valor < 23){ break; } delay(20); }
for(int i = 0; i < 256; i++) {rgb(255-i,255,0); if(valor < 23){ break; } delay(20); }
for(int i = 0; i < 256; i++) {rgb(0,255,i); if(valor < 23){ break; } delay(20); }
for(int i = 0; i < 256; i++) {rgb(0,255-i,255); if(valor < 23){ break; } delay(20); }
for(int i = 0; i < 256; i++) {rgb(i,0,255); if(valor < 23){ break; } delay(20); }
for(int i = 0; i < 256; i++) {rgb(255,0,255-i); if(valor < 23){ break; } delay(20); }
if(valor < 23){ break; }}} //Sequenza_1 Vel.2(60 sec)
if(a == 13 && stby ==0){
if (redPwr > redNew) {
redPwr--;
}
if (redPwr < redNew) {
redPwr++;
}
if (greenPwr > greenNew) {
greenPwr--;
}
if (greenPwr < greenNew) {
greenPwr++;
}
if (bluePwr > blueNew) {
bluePwr--;
}
if (bluePwr < blueNew) {
bluePwr++;
}
// If all Pwr match New get new colors
if (redPwr == redNew) {
if (greenPwr == greenNew) {
if (bluePwr == blueNew) {
redNew = random(254);
greenNew = random(254);
blueNew = random(254);
}
}
}
rgb(redPwr,greenPwr,bluePwr);
delay(20);
}
if(a == 14 && stby ==0){
rgb(random(255),random(255),random(255));
for(int i = 0; i < 256; i++) {if(valor < 23){ break; } delay(5); }
}
}
il ricevitore rf è collegato a arduino attraverso il digital 4
e questo è il link della libreria,
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1213063480
spero che qualcuno mi possa aiutare
e grazie sempre in anticipo.