Answered step by step
Verified Expert Solution
Link Copied!
Question
1 Approved Answer

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

blur-text-image
Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image_2

Step: 3

blur-text-image_3

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Advances In Spatial And Temporal Databases 11th International Symposium Sstd 2009 Aalborg Denmark July 8 10 2009 Proceedings Lncs 5644

Authors: Nikos Mamoulis ,Thomas Seidl ,Kristian Torp ,Ira Assent

2009th Edition

3642029817, 978-3642029813

More Books

Students explore these related Databases questions

Question

Conduct a needs assessment. page 269

Answered: 3 weeks ago