solar and wind backup charging system...on those cloudy windless days

What wildbill was hinting at with the expression

else (volts = 14.5);

is that the = sign is an assignment operator and will set the variable volts to 14.5 what you wanted there was

else if (volts == 14.5)

or more likely

else if (volts >= 14.5)

Lead acid batteries are a mystery. I've read literally hundreds of articles on them and still come away confused. My recommendation is to charge them up to 14.5 and shut the charging off. Then keep an eye on the electrolyte level. If it goes down, lower the charge voltage and see what happens. I float my batteries at 13.4 to keep them charged and avoid rapid water loss. I still have to add water once in a while, but usually not for a couple of months. I learned that trick right here on this board. If your generator has a fuel gauge, you can leverage it to tell you the fuel level; if it doesn't, think about a float or something to tell you how much you have or maybe trip something when it reaches a certain point.

As for kicking in the generator, call one of the manufacturers and talk to them. They'll know the best point for you to stop discharging and kick in the generator. The deep discharge batteries will work pretty well down to 10.5 and recover nicely, but they take a while to charge so remember that. I love calling the manufacturers; they like to talk about their product and can usually save you a bunch of testing to figure it out yourself.

You can monitor the voltage output from the generator to make sure it is running and the alternator is doing it's job, but remember to do it safely. I recommend getting a cheap bell transformer, putting it across the line and using the stepped down and isolated voltage it will give you. Stick a bridge rectifier and voltage divider on the low voltage side to get a value the arduino can read and you have your monitor. The big reason for using the transformer is to make it safer if you have to check something in a rain storm !! Try to keep the line voltage way far away from the arduino. If you make a mistake there you'll get to order a new board or two.

The delay looks to me like it will work, but I recommend that you take a look at the timeAlarm library. I use this a LOT to time things because I don't have to hang the processor in a loop just waiting around. You can set a pin, set an timer for two seconds later and go do something else; the timer will expire and then you can do the next thing. I use this trick all over my house for various timed operations. You can also set an alarm to start the generator on Saturday at 10:00 AM and run for 15 minutes to make sure everything is ok. This way you can set up monitors for the test start and sound alarms if something doesn't work.

Lastly, think about a watchdog timer. As you get more sophisticated with the device, you may make a mistake in the code and have it hang up. Or, there may be a bug in some library you're using that will do the same thing. A watchdog will automatically reset the board and clean up various problems for you. It's in the wdt code and you can find information about it on the wiki or playground. I use the watchdog timer on every board I have running. I hate having them hang up. When you do real control applications, it's nice to have something watching out for you.

Have fun.