Sitter med ett gruppprojekt i skolan och funderar på vilket som är snabbast eller effektivaste sättet att hantera flyttal/float på ATMega328.
Sitter i Arduino IDE för detta.
Det "vanliga sättet"
float bananer = 0.00;
alternativet
uint16_t bananer = 0; och använda 1000tal till dessa det skall göra om till ett decimaltal på 3 siffror, man tappar säkert en del i precision att göra så här.
Men det skall mätas vindhastighet så nhaaa, 12,35 eller 12,38 är skit samma i detta fall.
I Ardu IDE Så är detta program 4KB.... iom alla floatar och float är trögt att räkna.
Ser ett fel nu tror jag, windData är uint8_t och sedan float, hade bekymmer med att jag inte fick ut decimalerna ett tag.
Dessutom är windData upp till 324 inte ens tyskland superinflation får in det i ett 8b variabel.
Visst skulle jag kunna stånga mig i genom detta i C men vet inte om det är värt det när det skall ADC omvandlas ett värde och skicka detta oftare 1/sek,
denna data skickas senare till en RPi/Python som sköter resten med utdata på skärm/konsol just nu.
Kod: Markera allt
int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 8; // select the pin for the LED
uint16_t sensorValue = 0; // variable to store the value coming from the sensor
uint8_t windData = 0;
float outputWindData = 0.0;
uint16_t sensorData = 0;
void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
//Seriekommunikation för väderdata. TEMPORÄR FÖR ATT SENARE ANPASSAS.
Serial.begin(9600);
}
void loop() {
// read the value from the sensor: ANEMOMETERN
sensorData = analogRead(sensorPin);
sensorValue = constrain(sensorData, 200, 750);
// stop the program for <sensorValue> milliseconds:
//delay(sensorValue);
//Serial.println(sensorValue);
float windData = map(sensorValue, 200, 750, 0, 342);
float outputWindData = float(windData/10);
digitalWrite(ledPin,HIGH);
Serial.print(outputWindData);
Serial.println(" m/S");
delay(125);
digitalWrite(ledPin,LOW);
delay(125);
}