13-03-2019, 20:18
ciekawe czy nie będzie to 1Wire
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą.
Ocena wątku:
Czujnik kierunku wiatru - nieznany protokół
|
// Ustaw pin do odczytu
const int kierunekWiatruPin = 2;
// deklaracja zmiennych:
int PWM[15];
int compass[3];
const char* kierunek;
void setup() {
Serial.begin(115200);
pinMode(kierunekWiatruPin, INPUT);
attachInterrupt(digitalPinToInterrupt(kierunekWiatruPin), kierunekWiatru, RISING);
}
void loop(){
}
void kierunekWiatru(){
if(pulseIn(kierunekWiatruPin, HIGH) > 1000){
for (byte k=0; k<15; k++) {
PWM[k] = pulseIn(kierunekWiatruPin, HIGH);
}
if(PWM[3] > 400 and PWM[3] < 600) compass[0] = 1; else compass[0] = 0;
if(PWM[4] > 400 and PWM[4] < 600) compass[1] = 1; else compass[1] = 0;
if(PWM[5] > 400 and PWM[5] < 600) compass[2] = 1; else compass[2] = 0;
if(PWM[6] > 400 and PWM[6] < 600) compass[3] = 1; else compass[3] = 0;
if(compass[0] == 1 and compass[1] == 1 and compass[2] == 1 and compass[3] == 1) kierunek = "N";
if(compass[0] == 1 and compass[1] == 1 and compass[2] == 1 and compass[3] == 0) kierunek = "NNE";
if(compass[0] == 1 and compass[1] == 1 and compass[2] == 0 and compass[3] == 0) kierunek = "NE";
if(compass[0] == 1 and compass[1] == 1 and compass[2] == 0 and compass[3] == 1) kierunek = "ENE";
if(compass[0] == 1 and compass[1] == 0 and compass[2] == 1 and compass[3] == 1) kierunek = "E";
if(compass[0] == 1 and compass[1] == 0 and compass[2] == 1 and compass[3] == 0) kierunek = "ESE";
if(compass[0] == 1 and compass[1] == 0 and compass[2] == 0 and compass[3] == 1) kierunek = "SE";
if(compass[0] == 1 and compass[1] == 0 and compass[2] == 0 and compass[3] == 0) kierunek = "SSE";
if(compass[0] == 0 and compass[1] == 1 and compass[2] == 1 and compass[3] == 1) kierunek = "S";
if(compass[0] == 0 and compass[1] == 1 and compass[2] == 1 and compass[3] == 0) kierunek = "SSW";
if(compass[0] == 0 and compass[1] == 1 and compass[2] == 0 and compass[3] == 1) kierunek = "SW";
if(compass[0] == 0 and compass[1] == 1 and compass[2] == 0 and compass[3] == 0) kierunek = "WSW";
if(compass[0] == 0 and compass[1] == 0 and compass[2] == 1 and compass[3] == 1) kierunek = "W";
if(compass[0] == 0 and compass[1] == 0 and compass[2] == 1 and compass[3] == 0) kierunek = "WNW";
if(compass[0] == 0 and compass[1] == 0 and compass[2] == 0 and compass[3] == 1) kierunek = "NW";
if(compass[0] == 0 and compass[1] == 0 and compass[2] == 0 and compass[3] == 0) kierunek = "NNW";
Serial.println(kierunek);
}
}