سلام
دارم یک برد آمپر متر با ماژول ACS712 -30A میسازم ( با آردوینو uno )
این ماژول هم جریان DC و هم جریان AC رو اندازه گیری میکنه
البته برنامه اندازه گیری جریان DC با اندازه گیری جریان AC متفاوته و بصورت عادی من با اپلود کردن هر کدوم از برنامه ها میتونم اونو اجرا کنم
برنامه جریان ac
برنامه جریان DC
میخوام یک کلید دو حالته اضافه کنم و هر موقع پایه 6 low شد برنامه dc رو اجرا و هر موقع پایه 7 low شد برنامه AC رو اجرا کنه
به چه صورت باید این دو برنامه رو در یک برنامه قرار بدهم ؟
من برنامه رو به صورت پایین نوشتم آیا درسته ؟
دلیل: ادغام دو پست برای جلوگیری از اسپم
و یک موضوع دیگر اینکه من از ماژول سون سگمنت 4 تایی استفاده میکنم و میخوام با 2 رقم اعشار بهم نشون بده
دارم یک برد آمپر متر با ماژول ACS712 -30A میسازم ( با آردوینو uno )
این ماژول هم جریان DC و هم جریان AC رو اندازه گیری میکنه
البته برنامه اندازه گیری جریان DC با اندازه گیری جریان AC متفاوته و بصورت عادی من با اپلود کردن هر کدوم از برنامه ها میتونم اونو اجرا کنم
برنامه جریان ac
برنامه جریان DC
میخوام یک کلید دو حالته اضافه کنم و هر موقع پایه 6 low شد برنامه dc رو اجرا و هر موقع پایه 7 low شد برنامه AC رو اجرا کنه
به چه صورت باید این دو برنامه رو در یک برنامه قرار بدهم ؟
من برنامه رو به صورت پایین نوشتم آیا درسته ؟
کد:
#include "SevenSegmentTM1637.h" const byte PIN_CLK = 4; // define CLK pin (any digital pin) const byte PIN_DIO = 5; // define DIO pin (any digital pin) SevenSegmentTM1637 display(PIN_CLK, PIN_DIO); const byte analogIn = A0; byte mVperAmp = 66; // use 100 for 20A Module and 66 for 30A Module int RawValue = 0; double Voltage = 0; double Amps = 0; byte button6State = 0; byte button7State = 0; double VRMS = 0; double AmpsRMS = 0; double VRMS = 0; double AmpsRMS = 0; void setup() { pinMode(6, INPUT); digitalWrite(6, HIGH); pinMode(7, INPUT); digitalWrite(7, HIGH); display.begin(); display.setBacklight(100); display.print("1234"); delay(500); } void loop() button6State = digitalRead(6); button7State = digitalRead(7); if (button6State == LOW) { DCamp(); } if ( button7State == LOW){ ACamp(); } void DCamp() { RawValue = analogRead(analogIn); Voltage = (RawValue / 1024.0) * 5000; // Gets you mV Amps = ((Voltage - 2500) / mVperAmp); display.print(Amps,2); delay(1000); loop() break; } void ACamp() { Voltage = getVPP(); VRMS = (Voltage / 2.0) *0.707; AmpsRMS = (VRMS * 1000) / mVperAmp; display.print(AmpsRMS,2); } float getVPP() { float result; int readValue; //value read from the sensor int maxValue = 0; // store max value here int minValue = 1023; // store min value here uint32_t start_time = millis(); while ((millis() - start_time) < 1000) //sample for 1 Sec { readValue = analogRead(sensorIn); // see if you have a new maxValue if (readValue > maxValue) { /*record the maximum sensor value*/ maxValue = readValue; } if (readValue < minValue) { /*record the maximum sensor value*/ minValue = readValue; } } // Subtract min from max result = ((maxValue - minValue) * 5.0) / 1023 .0; return result; }
و یک موضوع دیگر اینکه من از ماژول سون سگمنت 4 تایی استفاده میکنم و میخوام با 2 رقم اعشار بهم نشون بده
دیدگاه