"exit status 1 'microsecondsToInches' was not declared in this scope" - arduino

I'm trying to Program a Ultrasonic Sensor for a small project where I'm trying to design a level sensor. This is for a beginner mechatronic course that I'm taking right now. But it keeps giving me this error in line 42, bellow the void loop, that says:
"exit status 1'microsecondsToInches' was not declared in this scope"
#include <LiquidCrystal.h>
const int rs = 13, en = 12, d4 = 11, d5 = 10, d6 = 9, d7 = 8;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int LED1 = 7;
int LED2 = 6;
int LED3 = 5;
int LED4 = 4;
int Bocina = 3;
const int echoPin = 2;
const int trigPin = 1;
void setup() {
pinMode (LED1, OUTPUT);
digitalWrite(LED1, LOW);
pinMode(LED2, OUTPUT);
digitalWrite(LED2, LOW);
pinMode(LED3, OUTPUT);
digitalWrite(LED3, LOW);
pinMode(LED4, OUTPUT);
digitalWrite(LED4, LOW);
pinMode(Bocina, OUTPUT);
lcd.begin(16, 2);
}
void loop() {
long duration;
long inches;
long cm;
lcd.clear();
pinMode(trigPin, OUTPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
//cm = ( duration / 29 ) / 2;
//inches = cm * 0.393701;
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
lcd.setCursor(5, 0);
lcd.print("Nivel:");
lcd.setCursor(0, 1);
lcd.print(inches);
lcd.print(" in");
}
if (inches >= 4) {
digitalWrite (LED1, HIGH);
digitalWrite (LED2, HIGH);
digitalWrite (LED3, HIGH);
digitalWrite (LED4, LOW);
}
else if (inches >= 3) {
digitalWrite (LED1, LOW);
digitalWrite (LED2, HIGH);
digitalWrite (LED3, HIGH);
digitalWrite (LED4, LOW);
}
else if (inches >= 2) {
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
digitalWrite (LED3, HIGH);
digitalWrite (LED4, LOW);
tone(3, 2000, 100);
delay(1000);
}
else if (inches >= 1) {
digitalWrite (LED1, LOW);
digitalWrite (LED2, LOW);
digitalWrite (LED3, LOW);
digitalWrite (LED4, HIGH);
tone(3, 2000);
}
}
long microsecondsToInches(long microseconds) {
return (microseconds / 74) / 2;
}
long microsecondsToCentimeters(long microseconds) {
return (microseconds / 29) / 2;
}
Can some explain me what's the problem here? And how to solve it?
Thanks in advance :)

Arduino didn't correctly generate the function prototypes, as you have a syntax error within the file.
You have an extra closing bracket }, right before you declare the microsecondsToInches function. Just remove it and you should be good to go
Also welcome to stack overflow!

Related

How to trigger function in arduino by using node-red?

can i trigger a function in arduino with node-red?
i tried to research it before and i couldn't find any
my arduino code is
int motor1 = 2;
int motor2 = 3;
int motor3 = 4;
int motor4 = 5;
int motor5 = 6;
int motor6 = 7;
int motor7 = 8;
int motor8 = 9;
void setup() {
pinMode(motor1, OUTPUT);
pinMode(motor2, OUTPUT);
pinMode(motor3, OUTPUT);
pinMode(motor4, OUTPUT);
pinMode(motor5, OUTPUT);
pinMode(motor6, OUTPUT);
pinMode(motor7, OUTPUT);
pinMode(motor8, OUTPUT);
}
void loop() {
yeetmotor1();
yeetmotor2();
yeetmotor3();
yeetmotor4();
}
void yeetmotor1(){
digitalWrite(motor1, HIGH);
digitalWrite(motor2, LOW);
delay(1000);
digitalWrite(motor1, LOW);
digitalWrite(motor2, LOW);
}
void yeetmotor2(){
digitalWrite(motor3, HIGH);
digitalWrite(motor4, LOW);
delay(1000);
digitalWrite(motor3, LOW);
digitalWrite(motor4, LOW);
}
void yeetmotor3(){
digitalWrite(motor5, HIGH);
digitalWrite(motor6, LOW);
delay(1000);
digitalWrite(motor5, LOW);
digitalWrite(motor6, LOW);
}
void yeetmotor4(){
digitalWrite(motor7, HIGH);
digitalWrite(motor8, LOW);
delay(1000);
digitalWrite(motor7, LOW);
digitalWrite(motor8, LOW);
}
If you have any clue for this please send help because i think it is possible to do it
Thank you for anying answering it

A simple problem with arduino UNO about optimizing code

It this a really simple code about turning on an off some LEDs, but I want it not to be so repetititve
I've tried to make a loop, but i couldn't get it, I did my best, but I'm really bad at this :(( pls need someone's jelp
`
#define LED 2
#define LED2 3
#define LED3 4
#define LED4 5
#define LED5 6
void setup()
{
pinMode(LED, OUTPUT);
pinMode (LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
}
void loop()
{
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED2, HIGH);
delay(500);
digitalWrite(LED3, HIGH);
delay(250);
digitalWrite(LED4, HIGH);
delay(125);
digitalWrite(LED5, HIGH);
delay(500);
digitalWrite(LED, LOW);
delay(1000);
digitalWrite(LED2, LOW);
delay(500);
digitalWrite(LED3, LOW);
delay(250);
digitalWrite(LED4, LOW);
delay(125);
digitalWrite(LED5, LOW);
delay(500);
}`
I'll rewrite what Oleg Mazurov said in the comment:
#define NUMBER_OF_LEDS 5
static const uint8_t a_led[NUMBER_OF_LEDS] = {2, 3, 4, 5, 6};
static const uint16_t a_delay[NUMBER_OF_LEDS] = {1000, 500, 250, 125, 500};
void setup() {
for (int i = 0; i < NUMBER_OF_LEDS; i++) {
pinMode(a_led[i], OUTPUT);
}
}
void loop() {
for (int i = 0; i < NUMBER_OF_LEDS; i++) {
digitalWrite(a_led[i], !digitalRead(a_led[i]));
delay(a_delay[i]);
}
}

Issue with Arduino code running Motors with H Bridge and Arduino according to the written code

So i have an issue in which when I run my code with my ultrasonic sensors, and h bridge with motors one motor spins at all times and the other spins every 6 seconds for 2 seconds but i don't know why. Any help?
Here is the code:
int in1 = 2;
int in2 = 3;
int in3 = 4;
int in4 = 5;
int in5 = 6;
int in6 = 7;
int trig = 8;
int echol = 9;
int echor = 12;
int echof = 11;
long df, tf, dr, tr, dl, tl;
void setup() {
Serial.begin(9600);
}
void loop() {
pinMode (in1, OUTPUT);
pinMode (in2, OUTPUT);
pinMode (in3, OUTPUT);
pinMode (in4, OUTPUT);
pinMode (in5, OUTPUT);
pinMode (in6, OUTPUT);
pinMode (trig, OUTPUT);
pinMode (echol, INPUT);
pinMode (echor, INPUT);
pinMode (echof, INPUT);
forward();
digitalWrite (trig, HIGH);
delay (0.01);
tf = pulseIn (echof, HIGH);
digitalWrite (trig, LOW);
df = tf * 0.03156;
if (df < 1.5){
digitalWrite (trig, HIGH);
delay (0.01);
tr = pulseIn (echor, HIGH);
tl = pulseIn (echol, HIGH);
digitalWrite (trig, LOW);
dr = tr * 0.03156;
dl = tl * 0.03156;
if (dr > dl) {
right();
delay (5000);
forward();
}
else {
left();
delay (5000);
forward();
}
}
}
void forward(){
digitalWrite (in1, HIGH);
digitalWrite (in2, LOW);
digitalWrite (in3, HIGH);
digitalWrite (in4, LOW);
digitalWrite (in5, HIGH);
digitalWrite (in6, LOW);
}
void backward(){
digitalWrite (in1, LOW);
digitalWrite (in2, HIGH);
digitalWrite (in3, LOW);
digitalWrite (in4, HIGH);
digitalWrite (in5, LOW);
digitalWrite (in6, HIGH);
}
void left(){
digitalWrite (in1, LOW);
digitalWrite (in2, LOW);
digitalWrite (in3, HIGH);
digitalWrite (in4, LOW);
digitalWrite (in5, HIGH);
digitalWrite (in6, LOW);
}
void right(){
digitalWrite (in1, HIGH);
digitalWrite (in2, LOW);
digitalWrite (in3, LOW);
digitalWrite (in4, LOW);
digitalWrite (in5, HIGH);
digitalWrite (in6, LOW);
}
Not sure of everything that is wrong, but multiplying a long by tl * 0.03156 and storing the value in a long is probably not doing what you intend. You should use floating-point values to contain the results of that sort of calculation.
First of all, you should move your pin setup in Setup(), there is no need to reinitialize pin i/o setup on every loop.
void Setup()
{
Serial.begin(9600);
pinMode (in1, OUTPUT);
pinMode (in2, OUTPUT);
pinMode (in3, OUTPUT);
pinMode (in4, OUTPUT);
pinMode (in5, OUTPUT);
pinMode (in6, OUTPUT);
pinMode (trig, OUTPUT);
pinMode (echol, INPUT);
pinMode (echor, INPUT);
pinMode (echof, INPUT);
}
From what I know about the H-Bridge module, they usually have 3 inputs per motor, of which only ONE should be on at a time. I could not find any correlation to that effect ion your code.... This is a constraint, so you should organize your code around it. It would make it easier to read and debug. There is no debugger on the Arduino, so organizing code does help a lot. And if you need more help, it will sure be a lot easier for others to understand what you code does.
void MotorA(int dir)
{
// dir = 0 = STOP, +1 = Forward, -1 = Reverse
digitalWrite(in1, dir > 0);
digitalWrite(in2, dir == 0); // You gave no details on the module
digitalWrite(in3, dir < 0); // you have. the actual logic may differ...
}
void MotorB(int dir)
{
// dir = 0 = STOP, +1 = Forward, -1 = Reverse
digitalWrite(in4, dir > 0);
digitalWrite(in5, dir == 0);
digitalWrite(in6, dir < 0);
}
void Stop()
{
MotorA(0);
MotorB(0);
}
void Forward()
{
MotorA(+1);
MotorB(+1);
}
void Reverse()
{
MotorA(-1);
MotorB(-1);
}
void Left()
{
MotorA(+1);
MotorB(-1);
}
void Right()
{
MotorA(-1);
MotorB(+1);
}
May I also suggest you start with a simpler loop to start with, until you have the motors running? Add one feature at a time. This will help you get your project up and ready much faster in the end.
void Loop()
{
Forward()
delay(5000);
Stop()
delay(1000);
Reverse();
delay(1000);
// ---
}

How to add the Interrupt(); function to arduino code

For a small school project I am building a simulation of a traffic light system, based on three directions. What makes the system special is it can detect vehicles waiting in front of the traffic light. When a vehicle is detected, the given direction will get a green light. To do so I make use of a Hall Effect sensor.
Right now I am stuck on the following problem; the Arduino stops detecting the state of the sensor while giving a certain direction a green light. I already have read about the Interrupt() function to do certain tasks simultaneously but didn't manage to implement it in my code.
Hope you guys know a way to do so!
int sensorPin3 = 2;
int sensorPin2 = 3;
int sensorPin1 = 4;
int g1 = 11;
int y1 = 12;
int r1 = 13;
int g2 = 8;
int y2 = 9;
int r2 = 10;
int g3 = 5;
int y3 = 6;
int r3 = 7;
int counter = 0;
boolean sensorState1 = false;
boolean sensorState2 = false;
boolean sensorState3 = false;
void setup()
{
// setup serial - diagnostics - port
Serial.begin(9600);
pinMode(sensorPin1, INPUT);
pinMode(sensorPin2, INPUT);
pinMode(sensorPin3, INPUT);
digitalWrite(sensorPin1, HIGH);
digitalWrite(sensorPin2, HIGH);
digitalWrite(sensorPin3, HIGH);
pinMode(g1, OUTPUT);
pinMode(y1, OUTPUT);
pinMode(r1, OUTPUT);
pinMode(g2, OUTPUT);
pinMode(y2, OUTPUT);
pinMode(r2, OUTPUT);
pinMode(g3, OUTPUT);
pinMode(y3, OUTPUT);
pinMode(r3, OUTPUT);
}
void loop()
{
digitalWrite (r1, HIGH);
digitalWrite (r2, HIGH);
digitalWrite (r3, HIGH);
if(magnetPresent(sensorPin1) && !sensorState1)
{
sensorState1 = true;
}
else if(!magnetPresent(sensorPin1) && sensorState1)
{
if(sensorState1 = false);
Serial.println("detect1");
richting1();
}
if(magnetPresent(sensorPin2) && !sensorState2)
{
sensorState2 = true;
}
else if(!magnetPresent(sensorPin2) && sensorState2)
{
if (sensorState2 = false);
Serial.println("detect2");
richting2();
}
if(magnetPresent(sensorPin3) && !sensorState3)
{
sensorState3 = true;
}
else if(!magnetPresent(sensorPin3) && sensorState3)
{
if (sensorState3 = false);
Serial.println("detect3");
richting3();
}
}
void printMessage(String message){
counter++;
Serial.print(counter);
Serial.print(" ");
Serial.println(message);
}
boolean magnetPresent(int pin){
return digitalRead(pin) == LOW;
}
void richting1()
{
digitalWrite (r1, HIGH);
digitalWrite (r2, HIGH);
digitalWrite (r3, HIGH);
delay(2000);
digitalWrite (r1, LOW);
digitalWrite (r2, HIGH);
digitalWrite (r3, HIGH);
digitalWrite (g1, HIGH);
delay(10000);
digitalWrite (y1, HIGH);
digitalWrite (r2, HIGH);
digitalWrite (r3, HIGH);
digitalWrite (g1, LOW);
delay(2000);
digitalWrite (y1, LOW);
digitalWrite (r1, HIGH);
}
void richting2()
{
digitalWrite (r1, HIGH);
digitalWrite (r2, HIGH);
digitalWrite (r3, HIGH);
delay(2000);
digitalWrite (r2, LOW);
digitalWrite (r1, HIGH);
digitalWrite (r3, HIGH);
digitalWrite (g2, HIGH);
delay(10000);
digitalWrite (y2, HIGH);
digitalWrite (r1, HIGH);
digitalWrite (r3, HIGH);
digitalWrite (g2, LOW);
delay(2000);
digitalWrite (y2, LOW);
digitalWrite (r2, HIGH);
}
void richting3()
{
digitalWrite (r1, HIGH);
digitalWrite (r2, HIGH);
digitalWrite (r3, HIGH);
delay(2000);
digitalWrite (r3, LOW);
digitalWrite (y3, LOW);
digitalWrite (r1, HIGH);
digitalWrite (r2, HIGH);
digitalWrite (g3, HIGH);
delay(10000);
digitalWrite (y3, HIGH);
digitalWrite (r1, HIGH);
digitalWrite (r2, HIGH);
digitalWrite (g3, LOW);
delay(2000);
digitalWrite (y3, LOW);
digitalWrite (r3, HIGH);
}
#NickGammon made a great posts about interrupts and how to use them. It is more then complete so here is the link:
https://arduino.stackexchange.com/questions/30968/how-do-interrupts-work-on-the-arduino-uno-and-similar-boards
This is just a little opinion, but for traffic light codes, I found it a little simpler to make something like a custom delay. Take a look at this code and you'll hopefully understand it. Again, this was one of my school project in which I've used a template so you might see some useless crap in it!
/* This program acts like a pedestrian light. If the button is pressed, a light will turn on for a certain moment to let the person pass.
By : Dat HA
Date : 16/09/27
*/
//****************************** VARIABLES ******************************
const int leds[4][12] = //declaring leds - RED, YELLOW, GREEN
{
//R,Y,G,
{5, 6, 7}, //north
{8, 9, 10}, //east
{11, 12, 13}, //south
{2, 3, 4} //west
};
/* Sensors: sensorNumber - itemInArray - sensorDescription - pinDescription
1 - 0 - pushbutton
2 - 1 - photocell
3 - 2 - potentiometer
4 - 3 - distance - distanceEcho
5 - 4 - distance - distanceTrigger
6 - 5 - pushbutton (2)
7 - 6 - servo
*/
const int sensors[] = {A2, A7, A6, A4, A5, A3, A0}; //pin for each sensor
//****************************** SETUP ******************************
const int analogPins[6] = {A0, A1, A2, A3, A4, A5}; //for quick pinMode, distanceTrigger we be redeclared as an output is it is an analog input pin
void setup() {
for (int i = 2; i < 14; i++) //declaring digital pins as output for leds
{
pinMode(i, OUTPUT);
}
for (int i = 0; i < 6; i++) //declaring analog inputs
{
pinMode(analogPins[i], INPUT);
}
pinMode(sensors[4], OUTPUT); //declaring trigger pin as an output
}
//****************************** MAIN LOOP ******************************
int green = 5000;
int yellow = 3000;
int aa = 0;
void loop() {
//north, south
digitalWrite(leds[0][0], LOW); //red light off
digitalWrite(leds[2][0], LOW);
digitalWrite(leds[0][2], HIGH); //green light on
digitalWrite(leds[2][2], HIGH);
wait(green);
digitalWrite(leds[0][2], LOW); //green light off
digitalWrite(leds[2][2], LOW);
digitalWrite(leds[0][1], HIGH); //yellow light on
digitalWrite(leds[2][1], HIGH);
wait(yellow);
digitalWrite(leds[0][1], LOW); //yellow light off
digitalWrite(leds[2][1], LOW);
digitalWrite(leds[0][0], HIGH); //red light on
digitalWrite(leds[2][0], HIGH);
delay(100);
if (aa == 1)
{
flash();
}
//*************** SWITCHING SIDES ***************
digitalWrite(leds[1][0], LOW); //red light off
digitalWrite(leds[3][0], LOW);
digitalWrite(leds[1][2], HIGH); //green light on
digitalWrite(leds[3][2], HIGH);
wait(green);
digitalWrite(leds[1][2], LOW); //green light off
digitalWrite(leds[3][2], LOW);
digitalWrite(leds[1][1], HIGH); //yellow light on
digitalWrite(leds[3][1], HIGH);
wait(yellow);
digitalWrite(leds[1][1], LOW); //yellow light off
digitalWrite(leds[3][1], LOW);
digitalWrite(leds[1][0], HIGH); //red light on
digitalWrite(leds[3][0], HIGH);
delay(100);
if (aa == 1)
{
flash();
}
}
//****************************** FUNCTIONS ******************************
/* Usable functions list:
LEDS functions - do something to the leds
ledClear() turn all leds off
ledRedOn() turn all red leds on
ledYelOn() turn all yellow leds on
ledGreOn() turn all green leds on
SENSORS functions - they will return the apropriate value
pushButton() values: 0,1
photocell() values: 0-1023
potentiometer() values: 0-1023
distance() values: 0-200
*/
void ledClear() //turn off all leds
{
for (int i = 2; i < 14; i++)
{
digitalWrite(i, LOW); //turning leds off
}
}
void ledRedOn()
{
for (int i = 0; i < 4; i++)
{
digitalWrite(leds[i][0], HIGH); //turning red leds on
}
}
void ledRedOff()
{
for (int i = 0; i < 4; i++)
{
digitalWrite(leds[i][0], LOW); //turning red leds on
}
}
void ledYelOn()
{
for (int i = 0; i < 4; i++)
{
digitalWrite(leds[i][1], HIGH); //turning yellow leds on
}
}
void ledGreOn()
{
for (int i = 0; i < 4; i++)
{
digitalWrite(leds[i][2], HIGH); //turning green leds on
}
}
int pushButton() // sensor 1
{
int x = digitalRead(sensors[0]);
return x; //returning digital value of pushbutton which is either 0 or 1
}
void flash() //flash the red led
{
for (int i = 0; i < 12; i++)
{
ledGreOn();
ledRedOn(); //on
delay(200); //wait
ledRedOff(); //off
delay(200); //wait
}
ledClear();
aa = 0;
}
int wait(int x) //see if the wire is disconnected and if so, flash the red led
{
int i = 0;
unsigned long currentMillis = millis(); //current time
while (millis() - currentMillis <= x) //delay
{
if (digitalRead(A2) == HIGH) //if wire disconnected
{
aa = 1;
}
}
}

HC-SR04 inaccurate readings

I don't know how I get inaccurate readings from HC-SR04 when I tried to observe its data.
I think I uploaded the program right and perfectly connected the wires to my arduino board (no loose connections/insulations/ etc.) and I think I provided enough power supply, 9v to my arduino uno board.
const int Trigger = 9;
const int Echo = 8;
long durationg, inches;
void setup()
{
pinMode(Trigger, OUTPUT);
pinMode(Echo, INPUT);
Serial.begin (9600);
}
void loop()
{
digitalWrite(Trigger, LOW);
delay(2);
digitalWrite(Trigger, HIGH);
delay(5);
digitalWrite(Trigger, LOW);
duration = pulseIn(Echo, HIGH);
inches = duration / 72 / 2;
Serial.print(inches);
Serial.print("in ,");
Serial.println();
delay(25);
}
Try this code:
const int trigPin = 7;
const int echoPin = 4;
long duration, distance;
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if (distance < 150) {
Serial.print(distance);
Serial.println(" cm");
}
if (distance > 150) {
Serial.println("OUT OF RANGE");
}
delay(20);
}

Resources