كود دائرة المستقبل
#include <VirtualWire.h>
//pin map, RX and pwm analogOutupts to PNP transistors
#define RX 3
#define pwmledRED 5
#define pwmledGREEN 6
#define pwmledBLUE 11
//arrays of data for build the final message
char datarraycharred [(sizeof(int)*4+1)];
char datarraychargreen[(sizeof(int)*4+1)];
char datarraycharblue [(sizeof(int)*4+1)];
char datarraymodo [(sizeof(int)*4+1)];
char datarrayclear [(sizeof(int)*4+1)]={"FFFF"};//tricky thing to reorder the data
char datatotal [(sizeof(int)*4+1)*4+4];
int datared =0;
int datagreen =0;
int datablue =0;
int bandera=0;
int i=0,j=0,index=0;
int indexchill=0;
int datamodo=3;//initialice with idle state all LED turned off
int ired=0,igreen=0,iblue=0;
void setup() {
Serial.begin(9600);
// VirtualWire
// Initialise the IO and ISR
// Required for DR3100
vw_set_rx_pin(RX); //Config pin as RX
vw_set_ptt_inverted(true);
// Bits per sec
vw_setup(2000);
// Start the receiver PLL running
vw_rx_start();
pinMode(pwmledRED,OUTPUT); //trt--->leds outuput
pinMode(pwmledGREEN,OUTPUT);
pinMode(pwmledBLUE,OUTPUT);
}
void loop(){
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
// Non-blocking
if (vw_get_message(buf, &buflen))
{
int i;
// Message with a good checksum received, dump it.
for (i = 0; i < buflen; i++)
{
// Fill Sensor1CharMsg Char array with corresponding
// chars from buffer.
datatotal[i] = char(buf[i]);
}
datatotal[buflen] = '\0';
// Convert Sensor1CharMsg Char array to TRUE integer, not the direct ASCII equivalent shit
chartointconvert();
}
if(datamodo==0)// chill wabing colour mode
modochill();
//write outupts
analogWrite(pwmledRED,datared);
analogWrite(pwmledGREEN,datagreen);
analogWrite(pwmledBLUE,datablue);
// DEBUG
Serial.print(datatotal);
Serial.print(" ");
Serial.print(datarraymodo);
Serial.print(" ");
Serial.print(datarraycharred);
Serial.print(" ");
Serial.print(datarraychargreen);
Serial.print(" ");
Serial.print(datarraycharblue);
Serial.print(" ");
Serial.print(datamodo);
Serial.print(" ");
Serial.print(datared);
Serial.print(" ");
Serial.print(datagreen);
Serial.print(" ");
Serial.println(datablue);
delay(50);
}
void chartointconvert(){
bandera=0;
strcpy (datarraymodo,datarrayclear);
strcpy (datarraycharred,datarrayclear);
strcpy (datarraychargreen,datarrayclear);
strcpy (datarraycharblue,datarrayclear);
index=0;
for(i=0;datatotal[i]!='a';i++)
{
datarraymodo[index]=datatotal[i];
index++;
}
i++;
j=i;
index=0;
for(i=j;datatotal[i]!='a';i++)
{
datarraycharred[index]=datatotal[i];
index++;
}
i++;
j=i;
index=0;
for(i=j;datatotal[i]!='a';i++)
{
datarraychargreen[index]=datatotal[i];
index++;
}
i++;
j=i;
index=0;
for(i=j;datatotal[i]!='a';i++)
{
datarraycharblue[index]=datatotal[i];
index++;
}
////arranging the char array
//WE NEED TRUE INTEGER DATA
for(i=0;i<4;i++)
{
if (datarraymodo[3]=='F')
{
datarraymodo[3]=datarraymodo[2];
datarraymodo[2]=datarraymodo[1];
datarraymodo[1]=datarraymodo[0];
datarraymodo[0]='0';
}
}
for(i=0;i<4;i++)
{
if (datarraycharred[3]=='F')
{
datarraycharred[3]=datarraycharred[2];
datarraycharred[2]=datarraycharred[1];
datarraycharred[1]=datarraycharred[0];
datarraycharred[0]='0';
}
}
for(i=0;i<4;i++)
{
if (datarraychargreen[3]=='F')
{
datarraychargreen[3]=datarraychargreen[2];
datarraychargreen[2]=datarraychargreen[1];
datarraychargreen[1]=datarraychargreen[0];
datarraychargreen[0]='0';
}
}
for(i=0;i<4;i++)
{
if (datarraycharblue[3]=='F')
{
datarraycharblue[3]=datarraycharblue[2];
datarraycharblue[2]=datarraycharblue[1];
datarraycharblue[1]=datarraycharblue[0];
datarraycharblue[0]='0';
}
}
datamodo = atoi(datarraymodo);
if(datamodo!=0)
{
datared = atoi(datarraycharred);
datagreen = atoi(datarraychargreen);
datablue = atoi(datarraycharblue);
datared=map(datared,0,1023,0,255);
datagreen=map(datagreen,0,1023,0,255);
datablue=map(datablue,0,1023,0,255);
}
}
void modochill()
{
//when first time on chill mode, set random numbers
if(indexchill==0){
datared=random(170, 255);
datagreen=random(85, 170);
datablue=random(0, 85);
indexchill=1;
}
//after first time just wave the values
if(datared>=250)
{ired=1;}
if(datared<=3)
{ired=0;}
if(ired==0)
{datared=datared+3;}
if(ired==1)
{datared=datared-3;}
if(datagreen>=240)
{igreen=1;}
if(datagreen<=3)
{igreen=0;}
if(igreen==0)
{datagreen=datagreen+3;}
if(igreen==1)
{datagreen=datagreen-3;}
if(datablue>=240)
{iblue=1;}
if(datablue<=3)
{iblue=0;}
if(iblue==0)
{datablue=datablue+3;}
if(iblue==1)
{datablue=datablue-3;}
}

