Balon 22 kwietnia Start z Marek KO02NI |
Przygotowania pełną parą. Karol SQ5CPU (kiedyś uczeń naszej szkoły - w trakcie nauki zrobił licencję - teraz uczeń technikum elektronicznego i uczestnik projektu https://wstratosfere.pl/) pracuje nad kapsułą. Są już pierwsze wersje. Teraz się tworzy pólka na zasilanie oraz system odcinania - za pomocą serwa lub drutu oporowego (do wyboru). Kombinujemy tak - to jedna z wersji w trakcie konstruktywnej dyskusji. To na servo, ale przerobienie tego na odcinanie za pomocą drutu oporowego to pikuś. Pewnie da się inaczej, ale i tak mamy dobrą zabawę. #include <,Servo.h>, Servo myservo, String inputString = "", boolean stringComplete = false, // j.w. // podrabiany "main" zamiast setup i loop - oszczędza zmienne globalne i pozwala użyć własnej pętli główniej void setup() inputString.reserve(100), // warto mieć to wywołane jak najwcześniej, a co najmniej przed Serial.begin String nowy = "", // w podrabianym "main" nie musi już być globalne int poludnik = 0, // nieglobalne trzeba ręcznie inicializować myservo.attach(9), //Ustawiam serwo zeby głupio nie ruszyło myservo.write(6), Serial.begin(57600), while (stringComplete = true) // "własny" loop, żeby móc korzystać z "continue," noInterrupts(), // początek sekcji krytycznej (taki udawany mutex - tak jak https://pl.wikipedia.org/wiki/Sekcja_krytyczna) if (stringComplete) // dodatkowo można sprawdzić np. czy pobrane ma długość w oczekiwanym zakresie - jak zakłócenie gdzieś zgubi, albo dołoży znak, albo jak arduino włączy się w już w trakcie ramki może zdekodować się coś innego od długości geograficznej // Serial.println(inputString), sekcja krytyczna musi być jak najmniejsza i najszybsza - printowanie nie wchodzi w grę Jak już, to trzeba skopiować do nowego string'a i wyprintować za sekcją krytyczną for (int i = 39, i <, 44, i++) // jako stałe może dać w #define na początku nowy = nowy + inputString[i], else interrupts(), // koniec sekcji krytycznej continue, interrupts(), // koniec sekcji krytycznej Serial.println(nowy), poludnik = nowy.toInt(), Serial.println(poludnik), if (poludnik >,= 2110) // Może warto, żeby np. trzy razy pod rząd warunek był spełniony na wypadek jakiegoś dziwnego zakłócenia? //serwo wyciaga drucik z uchwytu albo dajemy tutaj polecanie smażenia sznurka przez drut oporowy myservo.write(70), // czyszczę string nowy = "", inputString = "", stringComplete = false, void loop() , // bo mamy już pętlę głowną w setup czyli nie trzeba już void serialEvent() while (Serial.available()) char inChar = (char) Serial.read(), // add it to the inputString: inputString += inChar, // input string powinien być pewnie buforem kołowym (kiedyś widziałem gotową bibliotekę, albo napisać prosty na szybko) jeśli nie to chociaż zrobić zabezpieczenie, żeby nie urusł w nieskończoność jak nie dostanie '/n' if ((inChar == '\n') || (inChar == '\r')) stringComplete = true, |