I'm looking for an experienced Arduino programmer to help me with a particular task. The primary aim is to write specific pieces of code that integrate an LCD screen and a SIM800L GSM module with my Arduino project. I want you to create a script for Arduino Uno R3 that with a 16x02 LCD screen with I2C bus will put ">/" at the beginning, there will also be three buttons: one in the middle, one on the right and one on the left. The one on the left will not do anything for the moment, the one in the middle will ensure that when you press it once, a "0" will appear right after ">/", if you press it once more, the "0" will be removed " and in its place a "1" will appear, if you press it once more, the "1" will be removed again and a "2" will be put in its place, and so on until you reach "9". After the "9" there will be a "*", after the "*" there will be a "+", after the "+" there will be a "#", and finally, after the "#" there will be a "0" again, and the cycle will repeat. To change the number or character you have to press the center button for less than a second, and to select the character you definitely have to press it for less than a second. As soon as more than a second passes, it will be selected even if you have not released the button. When the character is selected, it will stay as it is, but if you press the center button again a "0" will appear, which again if you press the button again becomes a "1" and so on. Additionally, I want it to blink every 500 milliseconds when you are selecting a number or character, that is, it should be on for 500 milliseconds, off for 500 milliseconds, and so on until you select it definitively. Only the number or character you are selecting should flash, not all of the text. Finally, the right button will do the following: if you press it for less than a second, it will delete only the last character you entered except ">/", but if you press it for a second or more, it will delete all numbers or characters except the ">/". If you write another number or character and there is no more space on the line where you are writing, the cursor will be placed on the next line (That is, as soon as you add a number or character and it leaves the first line, it will be moved to the second line). And if you also fill out the second line, it simply won't let you write more until you delete a number or character, but nothing should ever leave the screen. That was just where you write the phone number, now comes the part where we use the SIM800L module. Do you remember that before the left button did nothing? Well, what it will do is that by pressing it you can answer and make calls (the number will be called right after the ">/"). And do you remember that the right button was only to delete characters? Well now with it you can also reject or hang up calls. Finally, when calling someone, everything will be removed from the screen (including the ">/") and it will say "Calling...", and when the person you are calling answers, it will say "Online", and on the next line display the minutes and seconds elapsed from when the person you are calling answered until they hung up, like this: xx:xx, and when the call ends say "Call ended" until the "Beep, beep, beep" that sounds when you end a call. When they are calling you, it will say "(number of the person calling you) is calling you...". The number of the person who is calling you will be in quotes, and the ellipsis will have an animation, that is, each dot will gradually appear every second (the first second there will be no dot, the next second there will be a dot, and when it reaches three dots and pass another second, the animation will repeat. Turn on the LCD backlight and try to optimize, refactor and organize the code as much as possible, and eliminate all kinds of comments. Ideal skills for this job would be prior experience with Arduino programming, particularly with LCD screen interfacing and GSM module integration. Familiarity with coding for telecommunication protocols will also be a tremendous asset.