Question
Can someone convert these C++ codes (Arduino) into assembly language (Atmel Studio 7)? #include #include LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE); //TEMP SENSOR const int sensor=A1; // Assigning analog
Can someone convert these C++ codes (Arduino) into assembly language (Atmel Studio 7)?
#include
#include
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);
//TEMP SENSOR
const int sensor=A1; // Assigning analog pin A5 to variable 'sensor'
float tempc; //variable to store temperature in degree Celsius
float tempf; //variable to store temperature in Fahreinheit
float vout; //temporary variable to hold sensor reading
//FLOWRATE
byte statusLed = 13;
byte sensorInterrupt = 0; // 0 = digital pin 2
byte sensorPin = 2;
float calibrationFactor = 4.5;
volatile byte pulseCount;
float flowRate;
unsigned int flowMilliLitres;
unsigned long totalMilliLitres;
unsigned long oldTime;
void setup()
{
//temperature sensor
pinMode(sensor,INPUT); // Configuring sensor pin as input
Serial.begin(9600);
//lcd
lcd.begin(16,2);
lcd.setCursor(0,0); //column 0,row 0
lcd.print("MCTE 2332");
pinMode(13,OUTPUT);
pinMode(8,OUTPUT);
pinMode(10,OUTPUT);
//FLOWRATE
Serial.begin(38400);
pinMode(statusLed, OUTPUT);
digitalWrite(statusLed, HIGH); // We have an active-low LED attached
pinMode(sensorPin, INPUT);
digitalWrite(sensorPin, HIGH);
int pulseCount = 0;
int flowRate = 0.0;
int flowMilliLitres = 0;
int totalMilliLitres = 0;
int oldTime = 0;
// The Hall-effect sensor is connected to pin 2 which uses interrupt 0.
// Configured to trigger on a FALLING state change (transition from HIGH
// state to LOW state)
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
void loop()
{
//TEMP
vout=analogRead(sensor); //Reading the value from sensor
vout=(vout*500)/1023;
tempc=vout; // Storing value in Degree Celsius
tempf=(vout*1.8)+32; // Converting to Fahrenheit
Serial.print("in DegreeC=");
Serial.print("\t");
Serial.print(tempc);
Serial.print(" ");
Serial.print("in Fahrenheit=");
Serial.print("\t");
Serial.print(tempf);
Serial.println();
delay(500); //Delay of 1 second for ease of viewing
//FLOWRATE
if((millis() - oldTime) > 1000) // Only process counters once per second
{
// Disable the interrupt while calculating flow rate and sending the value to
// the host
detachInterrupt(sensorInterrupt);
// Because this loop may not complete in exactly 1 second intervals we calculate
// the number of milliseconds that have passed since the last execution and use
// that to scale the output. We also apply the calibrationFactor to scale the output
// based on the number of pulses per second per units of measure (litres/minute in
// this case) coming from the sensor.
flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
// Note the time this processing pass was executed. Note that because we've
// disabled interrupts the millis() function won't actually be incrementing right
// at this point, but it will still return the value it was set to just before
// interrupts went away.
oldTime = millis();
// Divide the flow rate in litres/minute by 60 to determine how many litres have
// passed through the sensor in this 1 second interval, then multiply by 1000 to
// convert to millilitres.
flowMilliLitres = (flowRate / 60) * 1000;
// Add the millilitres passed in this second to the cumulative total
totalMilliLitres += flowMilliLitres;
unsigned int frac;
// Print the flow rate for this second in litres / minute
Serial.print("Flow rate: ");
Serial.print(int(flowRate)); // Print the integer part of the variable
Serial.print("."); // Print the decimal point
// Determine the fractional part. The 10 multiplier gives us 1 decimal place.
frac = (flowRate - int(flowRate)) * 10;
Serial.print(frac, DEC) ; // Print the fractional part of the variable
Serial.print("L/min");
// Print the number of litres flowed in this second
Serial.print(" Current Liquid Flowing: "); // Output separator
Serial.print(flowMilliLitres);
Serial.print("mL/Sec");
// Print the cumulative total of litres flowed since starting
Serial.print(" Output Liquid Quantity: "); // Output separator
Serial.print(totalMilliLitres);
Serial.println("mL");
// Reset the pulse counter so we can start incrementing again
pulseCount = 0;
// Enable the interrupt again now that we've finished sending output
attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}
//LCD
lcd.setCursor(0,0);
lcd.print("FLOWRATE: ");
lcd.print(flowRate);
lcd.setCursor(0,1);
lcd.print("TEMP: ");
lcd.print(tempc);
lcd.print((char)223);
lcd.print("C");
//ORANGE LED
if(flowRate>0)
digitalWrite(10,HIGH);
else if (flowRate<=0)
digitalWrite(10,LOW);
//GREEN LED
if(tempc>25)
digitalWrite(8,HIGH);
else
digitalWrite(8,LOW);
//RED LED
if(digitalRead(10)==HIGH && digitalRead(8)==HIGH )
digitalWrite(13, HIGH);
else
digitalWrite(13, LOW);
}
void pulseCounter()
{
// Increment the pulse counter
pulseCount++;
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started