Ich würde gern mit einem attiny eine Freq messen und via i2c abfragen Das schaut bei mir aktuell so aus und funktionert natürlich nicht, die gelesenen Werte sind immer null ;( Kann jemand sehen warum ?
1 | #include "main.h" |
2 | |
3 | #define I2C_SLAVE_ADDRESS 4 |
4 | #define LED_PIN PB3 |
5 | #define SENSOR PB1 |
6 | #define SCL PB2 |
7 | #define SDA PB0 |
8 | |
9 | volatile float SENSOR_time = 0; |
10 | volatile float SENSOR_time_last = 0; |
11 | int SENSOR_array[5] = {0,0,0,0,0};
|
12 | volatile bool sensorISRIsCounting = 0; |
13 | unsigned int senVal = 0; |
14 | |
15 | unsigned long previousMillis = 0; |
16 | unsigned int interval = 100; |
17 | |
18 | void readSENSOR() {
|
19 | if (SENSOR_time > 0 && sensorISRIsCounting > 0 ) {
|
20 | SENSOR_array[0] = SENSOR_array[1]; |
21 | SENSOR_array[1] = SENSOR_array[2]; |
22 | SENSOR_array[2] = SENSOR_array[3]; |
23 | SENSOR_array[3] = SENSOR_array[4]; |
24 | // interrupts bei einer volatile variable sperren !!! |
25 | noInterrupts(); |
26 | SENSOR_array[4] = 1000000/SENSOR_time; |
27 | interrupts(); |
28 | senVal = (int)(SENSOR_array[0] + SENSOR_array[1] + SENSOR_array[2] + SENSOR_array[3] + SENSOR_array[4]) / 5; |
29 | sensorISRIsCounting = 0; |
30 | } |
31 | } |
32 | |
33 | void requestEvent() {
|
34 | digitalWrite(LED_PIN, !digitalRead(LED_PIN)); |
35 | TinyWireS.send(senVal); |
36 | } |
37 | |
38 | void sensorISR() {
|
39 | sensorISRIsCounting = 1; |
40 | unsigned long m = micros(); |
41 | SENSOR_time = (m - SENSOR_time_last); |
42 | SENSOR_time_last = m; |
43 | } |
44 | |
45 | void setup() {
|
46 | TinyWireS.begin(I2C_SLAVE_ADDRESS); |
47 | TinyWireS.onRequest(requestEvent); |
48 | pinMode(LED_PIN, OUTPUT); |
49 | digitalWrite(LED_PIN, HIGH); |
50 | pinMode(SENSOR, INPUT); |
51 | attachInterrupt(SENSOR, sensorISR, FALLING); |
52 | } |
53 | |
54 | void loop() {
|
55 | unsigned long currentMillis = millis(); |
56 | if (currentMillis - previousMillis > interval) {
|
57 | previousMillis = currentMillis; |
58 | readSENSOR(); |
59 | } |
60 | TinyWireS_stop_check(); |
61 | } |