71. UART-Based LEDs Control

Back To All Submissions
Previous Submission
Next Submission

Solving Approach

Code - Arduino UNO 1

//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);
}

Arduino UNO 2-

//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);
}

Photo of Output

Screenshot of Serial Terminal 


 

Was this helpful?
Upvote
Downvote