詰みメモ
わからなくなったのでメモです。センサーの前に手をかざし最初の5秒で初期位置を設定します。設定位置から近づけば正回転、離れれば逆回転する。さらに設定位置から遠ざかれば回転速度が高くなるような制御を目指しましたがどうも安定しません。特に設定位置から離れた時の速度変化が安定しないので悩んどります。PWM信号が正しく算出されていない?プログラム上での問題だと思われますがよくわからずじまい…何かアドバイスが聞ければ幸いです。
とりあえず設定位置で正回転、逆回転の判断できるプログラムはできたので後回しにしようかとおもいます。
int LED =4; const int voutPin = 26; const int volt = 3.3; const int ANALOG_MAX = 4096; const int Threshold = 1500; const int Amotr1 = 17 ; const int Amotr2 = 16 ; const int stby = 32 ; float posi = 0 ; float n = 0 ; int x = 0 ; float voltage=0 ; void setup() { // put your setup code here, to run once: Serial.begin (115200); int reading =0; pinMode(LED,OUTPUT); ledcSetup (0,10000,8); ledcAttachPin(33,0); pinMode(Amotr1,OUTPUT); pinMode(Amotr2,OUTPUT); pinMode(stby,OUTPUT); ledcWrite (0,0) ; int voltage = 0 ; delay (1000); position(); } void loop() { int reading = analogRead(voutPin) ; float voltage = ((long)reading*volt*1000)/ANALOG_MAX ; Serial.print(voltage); Serial.println("mV"); if(voltage>posi){ front(); } if(voltage<posi){ back(); } } void position() { int n = 0; for(int i = 0; i < 100 ; i++){ int reading = analogRead(voutPin) ; float voltage = ((long)reading*volt*1000)/ANALOG_MAX ; n = n+ voltage ; delay (50); } Serial.println(n); posi = n/100; Serial.println(posi); } void front(){ digitalWrite (Amotr1,HIGH); digitalWrite (Amotr2,LOW); digitalWrite (stby,HIGH); int reading = analogRead(voutPin) ; float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;*/ float x = (255*(voltage-posi)/posi); Serial.print(voltage); Serial.println("mV"); Serial.print(posi); Serial.println("mV"); Serial.print(voltage-posi); Serial.println("mV"); Serial.print(x); Serial.println("Hz"); Serial.println("_________"); ledcWrite(0,x); delay (100); } void back(){ digitalWrite (Amotr1,LOW); digitalWrite (Amotr2,HIGH); digitalWrite (stby,HIGH); int reading = analogRead(voutPin) ; float voltage = ((long)reading*volt*1000)/ANALOG_MAX ;*/ x = (255*(posi-voltage)/posi); Serial.print(voltage); Serial.println("mV"); Serial.print(posi); Serial.println("mV"); Serial.print(voltage-posi); Serial.println("mV"); Serial.print(x); Serial.println("Hz"); Serial.println("_________"); ledcWrite(0,x); delay (100); }