Stap 4: Software - gedeelte van de Arduino
OK! Nu dat je klaar bent alle met de hardware, laten we overgaan op de software.De Arduino wordt gebruikt als een interface in dit project. Het laat de servo's en de IR-sensor gemakkelijk te communiceren met de computer met behulp van eenvoudige commando's.
Hoewel dit een "eenvoudige" operatie, zijn er enkele kritieke gebieden die moeten worden aangepakt. Een van die zaken die ik liep in een veel was communicatie wordt gesynchroniseerd. In principe tegen de tijd dat de microprocessor was klaar om te lezen van de opdracht, heeft de computer niet afgerond verzendt. Een eenvoudige oplossing hiervoor is het toewijzen van een "opdracht klaar"-teken. Ik koos voor een puntkomma als mijn terminator.
Om ervoor te zorgen dat de opdrachten in een seriële aspect dat zal het stoppen van de computer probeert te lezen van een temperatuur, terwijl de IR-sensor in beweging was zijn, moet ik een antwoord-methode. Een oplossing die, common voor communicatie, heet ACK's worden beheerd, of erkenning. Laten we zeggen dat we uitvoeren "p120;" (pan te 120deg), wij willen de computer te wachten op de microprocessor te zeggen "AP120;" ack pan (120). Zodra de ACK is ontvangen kan het programma blijven een temperatuur of de volgende reeks opdrachten ophalen.
Een ander ingewikkeld deel is het lezen van de IR-gegevens van de seriële poort op de sensor. Om te kunnen de gegevens lezen moeten we iets genaamd "bit-bang". Dit impliceert de oprichting van een interrupt aan de dalende rand van de klok om te lezen van de bits op de data lijn. Elke "uitbarsting" van gegevens die afkomstig zijn in bevat een kop en enkele gegevens die moeten worden gedecodeerd.
Het lezen van het PDF-bestand voor de module (http://www.metrisinst.com/item_management/assets/files/TN9_UserManual_009.pdf ) van de ZyTemp op pagina kunt 13 u de volgorde van de gegevens voor elk van de uitbarstingen van gegevens. In plaats van het doorbrengen van wat tijd op dit, besloten heb ik om te doen een snelle zoektocht en vond dat iemand anders schreef dit al voor de arduino (zij deed een precieze kookplaat temperatuur controller). De bron wordt beschreven in de code voor verwijzing en krediet voor de ideeën.
All-in-alle code van de Arduino, wanneer samengesteld, neemt 7982 bytes ruimte.
Opdrachten om te weten (alle opdrachten moeten eindigen met een ';':
p < n >; #pan tot < n > deg
t < n >; #tilt tot < n > deg
r; #read de IR-sensor-object
een; #read de IR sensor ambient temp
Gebruik deze om aan te passen van beschermingszones (niet toestaan een pan/tilt opdracht om te werken als out of bounds - sommige servo's ze selfs kauwen zal omhoog als ze proberen verder te gaan dan een max)
u < n >; #set bovenste servo grens (bescherming) standaard is 145 deg
l < n >; # lager servo grens (bescherming) standaard instellen is 35 deg