Ошибка 'rotation' was not declared in this scope

igor_sviridenko
Offline
Зарегистрирован: 20.03.2018

Доброго времени суток, у меня така проблема, при проверке кода появляется ошибка: 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");
}

 

b707
Offline
Зарегистрирован: 26.05.2017

и че? :) Компилятор прав. Покажите мне rotation в вашем скетче.

igor_sviridenko
Offline
Зарегистрирован: 20.03.2018

и че делать? я прост новичок, мне дали задания, а скетч скопировал на форуме http://cactus.io/hookups/weather/anemometer/davis/hookup-arduino-to-davis-anemometer-software

b707
Offline
Зарегистрирован: 26.05.2017

igor_sviridenko пишет:

и че делать? я прост новичок, мне дали задания, а скетч скопировал на форуме http://cactus.io/hookups/weather/anemometer/davis/hookup-arduino-to-davis-anemometer-software

дали задание - выполняй. Сам. Списывать нехорошо.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

igor_sviridenko пишет:

я прост новичок, мне дали задания, а скетч скопировал на форуме http://cactus.io/hookups/weather/anemometer/davis/hookup-arduino-to-davis-anemometer-software

батарейки не подошли....

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

igor_sviridenko пишет:

и че делать? я прост новичок, мне дали задания, а скетч скопировал на форуме http://cactus.io/hookups/weather/anemometer/davis/hookup-arduino-to-davis-anemometer-software

А что тут можно делать? Изучить матчасть и написать программу.

Или клянчить христа ради на том сайте, с которого тырили скетч. Авторы - народ отзывчивый, мож и подадут.

kalapanga
Offline
Зарегистрирован: 23.10.2016

igor_sviridenko, тут даже по комментариям в коде понятно, что и на что исправить нужно. А если Вы ни строчки в скетче не понимаете, то ... выше Вам всё написали.

b707
Offline
Зарегистрирован: 26.05.2017

kalapanga пишет:

igor_sviridenko, тут даже по комментариям в коде понятно, что и на что исправить нужно. А если Вы ни строчки в скетче не понимаете, то ... выше Вам всё написали.

похоже, что автор скетча специально внес эту ошибку, чтоб отвадить копипастеров...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

чтоб отвадить копипастеров...

Не всех, а только тупых.

Olej
Olej аватар
Offline
Зарегистрирован: 05.03.2018

igor_sviridenko пишет:

и че делать? я прост новичок, мне дали задания, а скетч скопировал 

отовитьсяЧто делать? Что делать? ... Готовиться в Красную Армию.

inspiritus
Offline
Зарегистрирован: 17.12.2012

если ты в 39 строке вместо

Timer1.attachInterrupt(isr_timer);

напишешь 

Timer1.attachInterrupt(timer);

он еще и на timer  начнет ругаться :)

кстати ты не тот ли самый novichok ?