Я написал этот код, чтобы вращать сервопривод в выбранный промежуток времени, выбранный потенциометром, но сервопривод не вращается. Также разница во времени остается всегда нулевой, даже при изменении значения потенциометра.
#include <ESP8266WiFi.h>
#include <Ticker.h>
#include <Servo.h>
Servo servo;
Ticker blinker;
#define redLedPin 2 //D4
#define blueLedPin 16 //D0
#define whiteLedPin 5//D1
int potPin = A0;
int potVal;
int mapPotVal;
int count = 0;
int count1 = 0;
int fPrevTime;
int fFinTime;
int rPrevTime;
int rFinTime;
int fDiff;
int rDiff;
int test = 0;
int redLedState;
int blueLedState;
int whiteLedState;
void ICACHE_RAM_ATTR onTimerISR(){
timer1_write(1000);//10us
count1++;
}
void changeOfState(){
count++;
potVal = analogRead(potPin);
mapPotVal = map(potVal,0,1023,0,10);
if(mapPotVal <=2 && test == 0){
fPrevTime = count;
test = 1;
}
if(mapPotVal >= 8 && test == 1){
fFinTime = count;
test = 0;
}
if(mapPotVal <=2 && test == 1){
rFinTime = count;
test = 0;
}
if(mapPotVal >= 8 && test == 0){
rPrevTime = count;
test = 1;
}
if(fFinTime -fPrevTime >0){
fDiff = fFinTime -fPrevTime;
}
else {
fDiff = fPrevTime - fFinTime;
}
if(rFinTime -rPrevTime >0){
rDiff = rFinTime -rPrevTime;
}
else {
rDiff = rPrevTime - rFinTime;
}
}
void setup(){
//initialize ticker every 1 s
timer1_attachInterrupt(onTimerISR);
timer1_enable(TIM_DIV16, TIM_EDGE,TIM_SINGLE);
timer1_write(1000);
Serial.begin(115200);
servo.attach(4); //D2
servo.write(0);
delay(100);
pinMode(redLedPin,OUTPUT);
pinMode(blueLedPin,OUTPUT);
pinMode(whiteLedPin,OUTPUT);
pinMode(potPin,INPUT);
blinker.attach_ms(1,changeOfState);
}
void loop() {
Serial.print("count = ");
Serial.println(count);
Serial.print("\ncount1 = ");
Serial.println(count1);
Serial.print("fDiff = ");
Serial.println(fDiff);
Serial.print("\nrDiff = ");
Serial.println(rDiff);
Serial.print("Pot Map Val = ");
Serial.println(mapPotVal);
digitalWrite(redLedPin,HIGH);
for (int i =0;i=90;i++){
servo.write(i);
}
delay(fDiff);
digitalWrite(redLedPin,LOW);
for (int i =90;i=0;i--){
servo.write(i);
}
delay(2*fDiff);
}
Вывод, показывающий это
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x4010f000, len 1392, room 16
tail 0
chksum 0xd0
csum 0xd0
v3d128e5c
~ld
count = 0
count1 = 0
fDiff = 0
rDiff = 0
Pot Map Val = 0