typedef struct pwmPins { int pin; unsigned long cyclus; unsigned long startCyclus; unsigned long toggle;} pwmPin;
struct pwmPin_t{ int pin; unsigned long cyclus; unsigned long startCyclus; unsigned long toggle; bool pinState;};pwmPin_t pwmObjects[] = { {3}, {5}};const byte NrPwmObjects = sizeof(pwmObjects)/sizeof(pwmObjects[0]);//ik gebruik vaak de macro//#define numberOf(x) (sizeof(x)/sizeof(x[0]))//dan kan je schrijven//const byte NrPwmObjects = numberOf(pwmObjects);
const byte pinMotor1 = 4;const byte pinMotor2 = 5;
unsigned long currentMicros = micros();
const byte pinPotmeter = 3;
if (speed < 0) {digitalWrite(pinMotor1, LOW);} else {digitalWrite(pinMotor1, HIGH);}
if (speed < 0) { digitalWrite(pinMotor1, LOW); } else { digitalWrite(pinMotor1, HIGH); }
getPotmeterSetting()
unsigned int freq = snelheid + 30;
pwmObjects[index].cyclus = 1.00 / freq * 1000000;
pwmObjects[index].cyclus = (1000000 + (freq / 2) ) / freq;
pwmObjects[index].toggle=pwmObjects[index].cyclus*snelheid/100;
Maar goede tips zijn altijd welkom, daar hoef je je niet voor te excuseren!
Kost het uitlezen van de pinState meer processor stappen? Dat is de reden dat ik vaak uitwijk naar een var.
Jouw berekening pwmObjects[index].cyclus = (1000000 + (freq / 2) ) / freq; levert een andere uitkomst. Het scheelt weliswaar niet veel (een half), maar waarom zou je het op die wijze doen?
Op jouw grafiek moet ik nog even studeren en het finetunen moet nog gebeuren. Ik heb iig al de freq berekening aangepast, omdat naar mijn zijn de freq te snel steeg. De formule is nu freq = 0.3 * snelheid + 30;
volatile byte in = 10;volatile byte out;unsigned long tic, toc;void setup(){ Serial.begin(115200); Serial.println(F("---Float---")); tic = micros(); for(in = 0; in <= 100; in++){ out = 0.3 * in + 30; } toc = micros(); Serial.print(F("Waarde: ")); Serial.println(out); Serial.print(F("tijd: ")); Serial.println(toc - tic); Serial.println(F("---Int---")); tic = micros(); for(in = 0; in <= 100; in++){ out = in / 3 + 30; } toc = micros(); Serial.print(F("Waarde: ")); Serial.println(out); Serial.print(F("tijd: ")); Serial.println(toc - tic);}void loop(){}
---Float---Waarde: 60tijd: 2472---Int---Waarde: 63tijd: 152