when i send multiple values using IR transmission....its not receiving properly....the values are toggling.....please help...to solve this problem......
the code is like this
Code 1:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 8;
int buttonState = 0;
char num1='0';
char op='+';
//dirt cheap wireless RX
void setup()
{
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);
// Print a message to the LCD.
//lcd.print("hello, world!");
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
// Clear Timer on Compare Match (CTC) Mode
bitWrite(TCCR1A, WGM10, 0);
bitWrite(TCCR1A, WGM11, 0);
bitWrite(TCCR1B, WGM12, 1);
bitWrite(TCCR1B, WGM13, 0);
// Toggle OC1A and OC1B on Compare Match.
bitWrite(TCCR1A, COM1A0, 1);
bitWrite(TCCR1A, COM1A1, 0);
bitWrite(TCCR1A, COM1B0, 1);
bitWrite(TCCR1A, COM1B1, 0);
// No prescaling
bitWrite(TCCR1B, CS10, 1);
bitWrite(TCCR1B, CS11, 0);
bitWrite(TCCR1B, CS12, 0);
OCR1A = 210;
OCR1B = 210;
Serial.begin(2400);
pinMode(13, OUTPUT);
lcd.print("2nd Module");
}
void loop()
{
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
if(buttonState==HIGH)
{
switch(op)
{
case '+':op='-';break;
case '-':op='*';break;
case '*':op='/';break;
case '/':op='+';break;
}
}
// if incoming serial
if (Serial.available())
{
//readSerial();
num1=Serial.read();
digitalWrite(13, HIGH);
}
else
{
digitalWrite(13, LOW);
}
lcd.setCursor(8,1);
lcd.print(num1);
lcd.setCursor(0,1);
lcd.print(op);
Serial.print(num1,BYTE);
delay(100);
Serial.print(op,BYTE);
delay(100);
//Serial.flush();
//delay(10);
}
Code 2:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 8;
int buttonState = 0;
char num1='0';
char op='+';
char num2='0',charsum='0';
int intnum1=0,intnum2=0,sum=0;
int atoi(char);
//dirt cheap wireless RX
void setup()
{
// set up the LCD's number of rows and columns:
lcd.begin(16, 2);
// Print a message to the LCD.
//lcd.print("hello, world!");
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
// Clear Timer on Compare Match (CTC) Mode
bitWrite(TCCR1A, WGM10, 0);
bitWrite(TCCR1A, WGM11, 0);
bitWrite(TCCR1B, WGM12, 1);
bitWrite(TCCR1B, WGM13, 0);
// Toggle OC1A and OC1B on Compare Match.
bitWrite(TCCR1A, COM1A0, 1);
bitWrite(TCCR1A, COM1A1, 0);
bitWrite(TCCR1A, COM1B0, 1);
bitWrite(TCCR1A, COM1B1, 0);
// No prescaling
bitWrite(TCCR1B, CS10, 1);
bitWrite(TCCR1B, CS11, 0);
bitWrite(TCCR1B, CS12, 0);
OCR1A = 210;
OCR1B = 210;
Serial.begin(2400);
pinMode(13, OUTPUT);
lcd.print("3rd Module");
}
void loop()
{
// read the state of the pushbutton value:
// if incoming serial
if (Serial.available())
{
//readSerial();
num1=Serial.read();
delay(100);
op=Serial.read();
delay(100);
//digitalWrite(13, HIGH);
intnum1=atoi(num1);
}
buttonState = digitalRead(buttonPin);
if(buttonState==HIGH)
{
switch(num2)
{
case '0':num2='1';break;
case '1':num2='2';break;
case '2':num2='3';break;
case '3':num2='4';break;
case '4':num2='5';break;
case '5':num2='6';break;
case '6':num2='7';break;
case '7':num2='8';break;
case '8':num2='9';break;
case '9':num2='0';break;
}
intnum2=atoi(num2);
}
/*else
{
digitalWrite(13, LOW);
}*/
switch(op)
{
case '+':sum=intnum1+intnum2;break;
case '-':sum=intnum1-intnum2;break;
case '*':sum=intnum1*intnum2;break;
case '/':sum=intnum1/intnum2;break;
}
lcd.setCursor(12,1);
lcd.print(num1);
lcd.setCursor(8,1);
lcd.print(num2);
lcd.setCursor(0,1);
lcd.print(op);
//charsum=itoa(sum);
Serial.print(sum,BYTE);
delay(100);
lcd.setCursor(12,0);
lcd.print(sum);
//Serial.flush();
//delay(10);
}
int atoi(char x)
{
int y;
switch(x)
{
case '0':y=0;break;
case '1':y=1;break;
case '2':y=2;break;
case '3':y=3;break;
case '4':y=4;break;
case '5':y=5;break;
case '6':y=6;break;
case '7':y=7;break;
case '8':y=8;break;
case '9':y=9;break;
}
return y;
}