ช่วยแก้ไขโคดหน่อยคับ

กระทู้คำถาม
ผมเขียนโคด ควบคุมความเร็วมอเตอร์(IBT-2)ผมใช้คู่กับโมดูลนาฬิกา DS3231 ควบคุมการทำงานคับ
เริ่มติดปัญหา บรรทัด if(Start==1) จากบรรทัดล่างสุดขึ้นมา 12บรรทัดคับ

#include "Wire.h"
#include "SPI.h"  // not used here, but needed to prevent a RTClib compile error
#include "RTClib.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SH1106.h"
#include <LiquidCrystal_I2C.h>
DateTime Time;
RTC_DS3231 RTC;
LiquidCrystal_I2C lcd(0x27,20,4);
int Bfor=0;
int Bfor1=0;
int cnt=0;
int cnt1=0;
int tmleft;  //set timeleft 45 minute
int tmset=0;
int swup =-1;
boolean show =0;
int cancel =32;
boolean enterT=0;
boolean enterT1=0;
boolean enterBfor=0;
boolean enterBfor1=0;
int trig=0;
boolean Start=0;
boolean Start1=0;
int hr=0;
int mn=0;
int sc=0;
int dy=0;
int mt=0;
int yr=0;
//กำหนดเวลา//
int NOM1 = 0;
int NOM4 = HIGH;
int NOM6 = LOW;
int NOM7 = HIGH;
unsigned long NOM3 =0;
unsigned long NOM5 =0;
unsigned long NOM8 =0;
unsigned long NOM9 =0;
int buttonState = 0 ;
int buttonState1 = 0 ;
int buttonState2 = 0 ;
int buttonState3 = 0 ;
int buttonState4 = 0 ;
int SENSOR_PIN = A0;
int doo =0;

//===Pindef===
const int LEDsw1=38;
const int LEDsw2=39;
int up=8;
int down=9;
int enter=11;
int enter1=13;
int currentButtonState = LOW; // ค่าสถานะปัจจุบนของปุ่ม
int previousButtonState = LOW;        // ค่าสถานะของปุ่มกดครั้งที่แล้ว
bool isLedOn = false;
int currentButtonState1 = LOW; // ค่าสถานะปัจจุบนของปุ่ม
int previousButtonState1 = LOW;        // ค่าสถานะของปุ่มกดครั้งที่แล้ว
bool isLedOn1 = false;
int minut =0;
int timing =0;
  
//===motor==
int Mt1=30;
int Mt11=31;
int Mt2=42;
int Mt22=43;
int Mt1sw=11;
int Mt2sw=13 ;
int Mt1up=34;
int Mt2up=35;
int Mt1down=36;
int Mt2down=37;


void setup () {

  Serial.begin(9600);
  Wire.begin();
  RTC.begin();
  RTC.adjust(DateTime(__DATE__, __TIME__));

  pinMode(LEDsw1,OUTPUT);
  pinMode(LEDsw2,OUTPUT);
  pinMode(up,INPUT);
  pinMode(down,INPUT);
  pinMode(enter,INPUT);
  pinMode(enter1,INPUT);
  pinMode(Mt1sw,INPUT);
  pinMode(Mt2sw,INPUT);
  pinMode(Mt1,OUTPUT);
  pinMode(Mt11,OUTPUT);
  pinMode(Mt2,OUTPUT);
  pinMode(Mt22,OUTPUT);
  pinMode(Mt1up,INPUT);
  pinMode(Mt2up,INPUT);
   pinMode(Mt1down,INPUT);
  pinMode(Mt2down,INPUT);
   Serial.begin(9600);
   minut = SENSOR_PIN/3.1 ;
   timing = (minut*60)/330;

}

void loop () {
  
  int sensorValue = analogRead(SENSOR_PIN);
  if(digitalRead(up)==HIGH)
    tmset++;
    
  if(digitalRead(down)==HIGH)
    tmset--;
  if(digitalRead(Mt1sw)==HIGH)
  swup++;
  if(digitalRead(cancel)==HIGH)
    swup--;
    if((swup))
    {
      swup <1;
    }
    

  if((tmset<0)||(tmleft<0))
  {
    tmset=0;
    tmleft=0;
  }
  enterT=digitalRead(enter);  
  if((enterT==1)&&ร้องไห้enterBfor==0))
  {
    trig=sc;
    Start=!Start;  
  }
    enterT1=digitalRead(enter1);  
  if((enterT1==1)&&ร้องไห้enterBfor1==0))
  {
    trig=sc;
    Start1=!Start1;  
  }
  DateTime now = RTC.now();
    hr=now.hour();
    mn=now.minute();
    sc=now.second();
  
    Time = RTC.now();

  
  
   lcd.begin();
    lcd.home();
    lcd.setCursor(0,1);
    lcd.print("time");
    lcd.print('=');  
    lcd.print(Time.hour());
    lcd.print(':');
    lcd.print(Time.minute());
    lcd.print(':');
    lcd.print(Time.second());
    lcd.setCursor(0,0);
    lcd.print("Tset:");
    print2digits(tmset);
    lcd.print("|Tleft:");
    print2digits(tmleft);
    Serial.print("volum");
    Serial.print(sensorValue);
    Serial.print("motor");
    Serial.print(((33000/((sensorValue/3.1)*10))));
    
  if((sc==trig)&&ร้องไห้Bfor==sc-1)&&ร้องไห้Start==1))  // this function for trig counter after 1 minute
  {
      cnt++;
  }
  if((tmleft>=0)||(Start==1))
{
    tmleft=tmset-cnt;
    if(tmleft==0)
    {
      Start=0;
      tmleft=0;
      cnt=0;
    }
}
  Bfor=sc;
  enterBfor=enterT;


    if((sc==trig)&&ร้องไห้Bfor1==sc-1)&&ร้องไห้Start1==1))  // this function for trig counter after 1 minute
  {
      cnt1++;
  }
  if((tmleft>=0)||(Start1==1))
{
    tmleft=tmset-cnt1;
    if(tmleft==0)
    {
      Start1=0;
      tmleft=0;
      cnt1=0;
    }
}
Bfor1=sc;
enterBfor1=enterT1;


if(Start==1){
  
while(1){
  
  int sensorValue = analogRead(SENSOR_PIN);
     if (sensorValue < 512)
  {
    // reverse rotation
    int reversePWM = -(sensorValue - 511) / 2;
    analogWrite(Mt1, 0);
    analogWrite(Mt11, reversePWM);
  }
  else{
    // forward rotation
    int forwardPWM = (sensorValue - 512) / 2;
    analogWrite(Mt1, forwardPWM);
    analogWrite(Mt11, 0);}
    
  
}
คราวๆประมานนี้คับ แต่ประสบปัญหา โมดูลเวลามันหยุดคับ มันไม่เดินต่อ พอผมเอา while ออกเวลานับแต่ควบคุมความเร็วมอเตอร์ไม่ได้คับพอบิดน้อยไม่หมุนพอบิดสุดก็เริ่มทำงานเคยลองเอาโคดนาฬิกามาใส่ในwhile ก็เจอปัญหาเดิมๆคับนาฬิกาเดินแต่ควบคุมไม่ได้หรือเป็นเพราะมอเตอร์ผมเลือกรอบน้อยไปคับ ผมใช้มอเตอร์เกียร  12vdc 300RPM
แก้ไขข้อความเมื่อ
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่