//Microcontroller 1 code: tx: POT rx: LED_toggle
#include <SoftwareSerial.h>
#define led 7
#define pot A0
SoftwareSerial mySerial(10,11);
uint8_t adcval, byte_val;
int state = 0;
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(pot,INPUT);
pinMode(led,OUTPUT);
digitalWrite(led,state);
}
void loop() {
byte_val = mySerial.read();
if(byte_val == 0x0A){
state = !state;
digitalWrite(led,state);
}
adcval = (uint8_t)(analogRead(pot) >> 2); //Convert ADC value into 8 bit by removing lowest 2 bits and assigned as 8 bit integer.
mySerial.write(adcval);
delay(100);
}//Microcontroller 2 code tx: button pressed rx: led pwm cycle.
#include <SoftwareSerial.h>
#define led 3
#define but 2
SoftwareSerial mySerial(10,11);
uint8_t txbyte = 0x00;
uint8_t adcval;
unsigned long lastInterruptTime = 0;
//Set interrupt when the button is pressed.
void sent_but_pressed() {
unsigned long currentTime = millis();
if (currentTime - lastInterruptTime > 200) { // 200 ms debounce
txbyte = 0x0A;
mySerial.write(txbyte);
}
lastInterruptTime = currentTime;
}
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
pinMode(but, INPUT_PULLUP);
pinMode(led, OUTPUT);
attachInterrupt(digitalPinToInterrupt(2), sent_but_pressed, FALLING);
}
void loop() {
//Read 8 bit digital value and assigned it to PWM.
adcval = mySerial.read();
analogWrite(led,adcval>>2);
delay(100);
}