Skocz do zawartości

michallus97

Użytkownicy
  • Zawartość

    1
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O michallus97

  • Ranga
    1/10

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Siedlce
  • Zainteresowania
    Informatyka, robotyka, elektronika, nowoczesne technologie
  1. Zadanie 6.3 i 6.4 Trochę rozwinąłem to zadanie dodając regulację skrajnych wychyleń serwa w celu dopasowania do różnych tarcz. Autokalibracja i regulacja wychylenia jest możliwa w trybie konfiguracyjnym (patrz kod). Niestety, z racji braku kondensatorów (po weekendzie czeka mnie wycieczka do sklepu) nie mogłem dać na serwo zasilania z gniazda Vin, więc podpiąłem je pod gniazdo 5V. Do zasilania wykorzystałem zasilacz impulsowy 12V 2A. Wklejam kod i zdjęcie układu poniżej. Czekam na wszelkie opinie i rady, gdyż jestem nowy w elektronice i każda pomoc się przyda /* This program is used to measure current level of light and write it to the servomechanism, which is used as a simulation of analog gauge. The program includes the configuration mode with autocalibration. USE CONFIGURATION MODE BEFORE FIRST USE! */ #include <Servo.h> //includes servo library #define potPin A1 //potentiometer pin #define lightPin A0 //photoresistor pin #define switchPin 9 //tact-switch pin #define servoPin 10 //servo controller pin Servo servo; //servo initialisation void setup() { pinMode(switchPin, INPUT_PULLUP); //sets switch pin to pull up mode servo.attach(servoPin); //attaches servo pin to object Serial.begin(9600); //initialisation of serial monitor } int minValue = 0; //minimum value of rotation int maxValue = 180; //maximum value of rotation int rotationValue = 0; //current rotation value int previousValue = 0; //previous rotation value int maxReadValue = 1023; //maximum read value of light in current environment void loop() { //CONFIGURATION MODE if (digitalRead(switchPin) == LOW) //if button pushed go into configuration mode { delay(300); //eliminates bouncing on button //ADJUST MINIMUM VALUE while (digitalRead(switchPin) == HIGH) //loop until the button is pushed { rotationValue = analogRead(potPin); //reads potentiometer value rotationValue = map(rotationValue, 0, 1023, 180, 90); //maps value to fit the rotation servo.write(rotationValue); //writes the rotation to servo to show current setting delay(100); //delay for smoother effect } delay(300); //eliminates bouncing on button minValue = rotationValue; //sets chosen value as minimum rotation value //ADJUST MAXIMUM VALUE while (digitalRead(switchPin) == HIGH) { rotationValue = analogRead(potPin); //reads potentiometer value rotationValue = map(rotationValue, 0, 1023, 0, 90); //maps value to fit the rotation servo.write(rotationValue); //writes the rotation to servo to show current setting delay(100); //delay for smoother effect } delay(300); //eliminates bouncing on button maxValue = rotationValue; //sets chosen value as maximum rotation value rotationValue = 90; //AUTOCALIBRATION Serial.println("Light measurement started"); for(int i = 0; i < 50; i++) //loop lasts for 5s -> 50 * 100ms = 5000 ms = 5s { maxReadValue = analogRead(lightPin); //reads value from photoresistor delay(100); //delay for smoother effect } Serial.println("Light measurement finished"); maxReadValue *= 2; //doubles maximum read value if(maxReadValue > 1023) //if the value is over the maximum supported value { maxReadValue = 1023; //sets value to maximum supported value } } //NORMAL MODE else { int lightValue = analogRead(lightPin); //reads current photoresistor value rotationValue = map(lightValue, 0, maxReadValue, minValue, maxValue); //maps value for rotation if (abs(rotationValue - previousValue) > 5) //if the difference of values is bigger than 5 degrees { servo.write(rotationValue); //writes current rotation value to servo previousValue = rotationValue; //sets current value as previous value delay(100); //delay for smoother effect } Serial.println(lightValue); //sends current light value to terminal delay(100); //delay for smoother effect } } __________ Komentarz dodany przez: Treker
×
×
  • Utwórz nowe...