Apart from what IoT_hobbyist and Robin2 say, you need in this kind of thing to manage the start conditions, for safety and practical reasons.
As it stands, the servo attaches at 90 degrees because you're not telling it to do otherwise. Then the first 'O' tells it to move down for a second before going up for 15 then down to finish.
But after that, it's already down for the next cycle, since each cycle ends with it down.
What's special about the first cycle that it goes down from 90? You could perhaps (not knowing the actual application) do a Servo1.move(0) before the Servo1.attach() so it always starts at 0.
Then each cycle needn't explicitly start with a Servo1.write(0) since it's already there, and it just needs to wait a second before heading upwards. (Presumably there's a reason for that second before going up? Perhaps it's for safety to get people to stand clear?)
I'd go for a state machine* approach like this, with a variable called say state:
- Start with state = 0, say "idle" for human readability, with servo attached at 0 (ie down, unless there was a compelling reason to have started it at 90?), and continuously reading serial for a 'O'. You would have a variable called say stayUpFor, initialised 0 in idle.
- If it gets a 'O' make state =1 (say "standClear" for humans) and start a millis() based timer for the first second where it waits lowered (assuming that's actually a need, perhaps safety). Add 15000 to stayUpFor, which is then 15000 since this is the first time we got a 'O'. Continuously read Serial, and if you get a 'O', add 15000 to stayUpFor, assuming commands could be arriving in this state? When the 1 second timer expires, set state = 2 ("raised" say, for humans)
- On arrival in state=2, raise the servo and start a new millis() based timer. Continuously read Serial, and if you get a 'O', add 15000 to stayUpFor . Check the elapsed time in this state against stayUpFor (which would be increasing by new arrivals of 'O' if any), and when it expires, lower the servo and set state=0.
- (Arrival back at state=0 sets stayUpFor back to 0, so the next 'O' is a first 'O' for a new cycle)
- Rinse and repeat
(*Don't be put off by the phrase "state machine" and its state variable.... it's really just a variable that keeps track of where we are in the process, and if state=x do stuff and set state to y or z or wherever it's supposed to go next, if it's z do otherStuff. (Although it's common to use switch...case instead of an "if" spaghetti.)