Ошибка 'rotation' was not declared in this scope
- Войдите на сайт для отправки комментариев
Втр, 20/03/2018 - 16:52
Доброго времени суток, у меня така проблема, при проверке кода появляется ошибка: Davis_Wind_Speed_Direction.ino:32: error: 'rotation' was not declared in this scope
attachInterrupt(digitalPinToInterrupt(WindSensorPin), rotation, FALLING);
#include "TimerOne.h" // Timer Interrupt set to 2 second for read sensors
#include <math.h>
#define WindSensorPin (2) // The pin location of the anemometer sensor
#define WindVanePin (A4) // The pin the wind vane sensor is connected to
#define VaneOffset 0; // define the anemometer offset from magnetic north
int VaneValue; // raw analog value from wind vane
int Direction; // translated 0 - 360 direction
int CalDirection; // converted value with offset applied
int LastValue; // last direction value
volatile bool IsSampleRequired; // this is set true every 2.5s. Get wind speed
volatile unsigned int TimerCount; // used to determine 2.5sec timer count
volatile unsigned long Rotations; // cup rotation counter used in interrupt routine
volatile unsigned long ContactBounceTime; // Timer to avoid contact bounce in isr
float WindSpeed; // speed miles per hour
void setup() {
LastValue = 0;
IsSampleRequired = false;
TimerCount = 0;
Rotations = 0; // Set Rotations to 0 ready for calculations
Serial.begin(9600);
pinMode(WindSensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(WindSensorPin), rotation, FALLING);
Serial.println("Davis Anemometer Test");
Serial.println("Speed (MPH)\tKnots\tDirection\tStrength");
// Setup the timer interupt
Timer1.initialize(500000);// Timer interrupt every 2.5 seconds
Timer1.attachInterrupt(isr_timer);
}
void loop() {
getWindDirection();
// Only update the display if change greater than 5 degrees.
if (abs(CalDirection - LastValue) > 5) {
LastValue = CalDirection;
}
if (IsSampleRequired) {
// convert to mp/h using the formula V=P(2.25/T)
// V = P(2.25/2.5) = P * 0.9
WindSpeed = Rotations * 0.9;
Rotations = 0; // Reset count for next sample
IsSampleRequired = false;
Serial.print(WindSpeed); Serial.print("\t\t");
Serial.print(getKnots(WindSpeed)); Serial.print("\t");
Serial.print(CalDirection);
getHeading(CalDirection); Serial.print("\t\t");
getWindStrength(WindSpeed);
}
}
// isr handler for timer interrupt
void isr_timer() {
TimerCount++;
if (TimerCount == 6)
{
IsSampleRequired = true;
TimerCount = 0;
}
}
// This is the function that the interrupt calls to increment the rotation count
void isr_rotation() {
if ((millis() - ContactBounceTime) > 15 ) { // debounce the switch contact.
Rotations++;
ContactBounceTime = millis();
}
}
// Convert MPH to Knots
float getKnots(float speed) {
return speed * 0.868976;
}
// Get Wind Direction
void getWindDirection() {
VaneValue = analogRead(WindVanePin);
Direction = map(VaneValue, 0, 1023, 0, 359);
CalDirection = Direction + VaneOffset;
if (CalDirection > 360)
CalDirection = CalDirection - 360;
if (CalDirection < 0)
CalDirection = CalDirection + 360;
}
// Converts compass direction to heading
void getHeading(int direction) {
if (direction < 22)
Serial.print(" N");
else if (direction < 67)
Serial.print(" NE");
else if (direction < 112)
Serial.print(" E");
else if (direction < 157)
Serial.print(" SE");
else if (direction < 212)
Serial.print(" S");
else if (direction < 247)
Serial.print(" SW");
else if (direction < 292)
Serial.print(" W");
else if (direction < 337)
Serial.print(" NW");
else
Serial.print(" N");
}
// converts wind speed to wind strength
void getWindStrength(float speed) {
if (speed < 2)
Serial.println("Calm");
else if (speed >= 2 && speed < 4)
Serial.println("Light Air");
else if (speed >= 4 && speed < 8)
Serial.println("Light Breeze");
else if (speed >= 8 && speed < 13)
Serial.println("Gentle Breeze");
else if (speed >= 13 && speed < 18)
Serial.println("Moderate Breeze");
else if (speed >= 18 && speed < 25)
Serial.println("Fresh Breeze");
else if (speed >= 25 && speed < 31)
Serial.println("Strong Breeze");
else if (speed >= 31 && speed < 39)
Serial.println("Near Gale");
else
Serial.println("RUN");
}
и че? :) Компилятор прав. Покажите мне rotation в вашем скетче.
и че делать? я прост новичок, мне дали задания, а скетч скопировал на форуме http://cactus.io/hookups/weather/anemometer/davis/hookup-arduino-to-davis-anemometer-software
и че делать? я прост новичок, мне дали задания, а скетч скопировал на форуме http://cactus.io/hookups/weather/anemometer/davis/hookup-arduino-to-davis-anemometer-software
дали задание - выполняй. Сам. Списывать нехорошо.
я прост новичок, мне дали задания, а скетч скопировал на форуме http://cactus.io/hookups/weather/anemometer/davis/hookup-arduino-to-davis-anemometer-software
батарейки не подошли....
и че делать? я прост новичок, мне дали задания, а скетч скопировал на форуме http://cactus.io/hookups/weather/anemometer/davis/hookup-arduino-to-davis-anemometer-software
А что тут можно делать? Изучить матчасть и написать программу.
Или клянчить христа ради на том сайте, с которого тырили скетч. Авторы - народ отзывчивый, мож и подадут.
igor_sviridenko, тут даже по комментариям в коде понятно, что и на что исправить нужно. А если Вы ни строчки в скетче не понимаете, то ... выше Вам всё написали.
igor_sviridenko, тут даже по комментариям в коде понятно, что и на что исправить нужно. А если Вы ни строчки в скетче не понимаете, то ... выше Вам всё написали.
похоже, что автор скетча специально внес эту ошибку, чтоб отвадить копипастеров...
чтоб отвадить копипастеров...
Не всех, а только тупых.
и че делать? я прост новичок, мне дали задания, а скетч скопировал
отовитьсяЧто делать? Что делать? ... Готовиться в Красную Армию.
если ты в 39 строке вместо
Timer1.attachInterrupt(isr_timer);
напишешь
Timer1.attachInterrupt(timer);
он еще и на timer начнет ругаться :)
кстати ты не тот ли самый novichok ?