source: trunk/Arduino/GSM/arduinoGSMFACT_beta_01/arduinoGSMFACT_beta_01.ino@ 20112

Last change on this file since 20112 was 17969, checked in by dneise, 10 years ago
adding libraries folder, with LSM303 lib, this takes precedence over any locally installed LSM303 library, e.g. in HOME/arduino-1.0.6/libraries.
File size: 5.3 KB
Line 
1/*
2
3 Arduino for FACT
4
5 Gareth Hughes 2013-10-30
6
7 Using: Arduino Ethernet
8 GSM Overlay
9 LSM303: Magnetic field and accelerometer
10 YL-38: Light Sensor
11
12 Function: Will reply to an SMS stating the position, movement and light level.
13 If lighlevel gets above a certain threshold will send a warning SMS every 1 min.
14
15*/
16
17#include <SPI.h>
18#include <Ethernet.h>
19
20// include libraries
21#include <GSM.h>
22#include <Wire.h>
23#include <LSM303.h>
24
25//ETH
26//byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xB5, 0xE3 };
27//byte ip[] = { 192, 33, 103, 241 };
28//LA PALMA
29byte mac[] = { 0xFA, 0xC7, 0xBB, 0xFF, 0x33, 0x33 };
30byte ip[] = { 10, 0, 100, 202 };
31
32EthernetServer server = EthernetServer(23);
33EthernetClient client;
34//boolean sentHeader = false;
35bool sentHeader = false;
36
37// PIN Number for the SIM
38//#define PINNUMBER "0839"
39#define PINNUMBER ""
40//#define PINNUMBER "7143"
41#define NUMLEN 15
42
43// initialize the library instances
44GSM gsmAccess;
45GSM_SMS sms;
46LSM303 compass;
47
48char message[18]; // Array to hold SMS message
49char senderNumber[NUMLEN]; // Array to hold the number a SMS is retreived from
50
51//unsigned int counter = 0; // loop counter
52int heading = -9999; // Continual heading reading
53//int heading2 = -9999; // Continual heading reading
54float pitch = -9999.; // Pitch relative to horizon
55int iLight = 9999; // light level
56int iDiff = -9999; // difference in degrees
57char c;
58
59void setup()
60{
61
62
63 //begin the ethernet connections
64 //Ethernet.begin(mac, ip, dnserver, gatew, smask); // this is to begin (ethz) ethernet
65 Ethernet.begin(mac, ip);
66 server.begin();
67
68 // initialize serial communications and wait for port to open:
69 //Serial.begin(9600);
70
71 // Start the Wire communication
72 Wire.begin();
73
74 // Initialize the Compass
75 compass.init();
76 compass.enableDefault();
77
78 // Calibration values. Use the Calibrate example program to get the values for your compass.
79// ETH Calibration values
80// compass.m_min.x = -700; compass.m_min.y = -695; compass.m_min.z = -635;
81// compass.m_max.x = +293; compass.m_max.y = +551; compass.m_max.z = 606;
82// La Palma calibration values
83 compass.m_min.x = -389; compass.m_min.y = -423; compass.m_min.z = -420;
84 compass.m_max.x = +510; compass.m_max.y = +420; compass.m_max.z = +315;
85
86 // connection state
87 boolean notConnected = true;
88
89 // Start GSM connection
90 while(notConnected)
91 {
92 if(gsmAccess.begin(PINNUMBER)==GSM_READY)
93 notConnected = false;
94 else
95 {
96 delay(1000);
97 }
98 }
99
100 // use pin 9 to mean parked!
101 //pinMode(9, OUTPUT);
102
103}
104
105void loop()
106{
107
108 // If there are any SMSs available()
109 if (sms.available())
110 {
111
112 // Get remote number
113 sms.remoteNumber(senderNumber, NUMLEN);
114
115 //if( sms.peek()=='#' )
116 //{
117 //sms.flush();
118 //} else if( sms.peek()=='P' || sms.peek()=='p' )
119 //} else
120 if( sms.peek()=='P' )
121 {
122
123//Serial.println("I P");
124
125 // Generate message
126 generateMessage();
127 // reply to the message
128 sendSMS();
129
130 }
131
132 // flush sms memory
133 sms.flush();
134
135 }
136
137 // listen for incoming clients, and process qequest.
138 checkForClient();
139
140 // Main loop
141 delay(1000);
142
143
144}
145
146// Send the message.
147// iType = 0: Sends reply to an SMS with the heading, movement and light level
148// iType = 1: Sends an alert to predefined number warning that the light has gone above threshold
149void sendSMS()
150{
151
152 sms.beginSMS(senderNumber);
153 sms.print(message);
154 sms.endSMS();
155
156}
157
158void checkForClient()
159{
160
161 EthernetClient client = server.available();
162
163 if( client )
164 {
165
166 // an http request ends with a blank line
167 boolean currentLineIsBlank = true;
168
169 while( client.connected() )
170 {
171 if( client.available() )
172 {
173
174 if(!sentHeader)
175 {
176 printHelp();
177 sentHeader = true;
178 }
179
180 c = client.read();
181
182 switch( c )
183 {
184
185 case 'q':
186 sentHeader = false;
187 delay(1); // give the web browser time to receive the data
188 client.stop(); // close the connection:
189 break;
190 case 'h':
191 printHelp();
192 break;
193 case 'd':
194 generateMessage();
195 server.println(message);
196 break;
197// case 'p':
198// digitalWrite(9, HIGH);
199// server.println("Park");
200// break;
201 }
202
203 }
204 }
205
206 }
207
208}
209
210// errr Print the Help Stuff
211void printHelp()
212{
213
214 server.println();
215 //server.println("FACT GSM");
216 //server.println("h help");
217 server.println("q quit");
218 server.println();
219 server.println("d direction");
220// server.println("p Park Tel");
221 server.println();
222
223}
224
225// Get the pointing difference
226void getDiff()
227{
228
229 compass.read();
230 heading = compass.heading((LSM303::vector<int>){0,-1,0}) - 90 - 24;
231 if( heading < 0 ) heading = heading + 360;
232 //server.println(heading);
233
234// delay(5000);
235// compass.read();
236// heading2 = compass.heading((LSM303::vector){0,-1,0}) - 90;
237// if( heading2 < 0 ) heading2 = heading2 + 360;
238// iDiff = heading - heading2;
239// //server.println(iDiff);
240
241 pitch = atan(compass.a.x/sqrt(pow(compass.a.y,2.)+pow(compass.a.z,2.)));
242 pitch *= (180.0)/3.1415;
243 pitch += 13.;
244 pitch = 90. - pitch;
245
246}
247
248// Generate SMS
249void generateMessage()
250{
251
252 // Get pointing difference
253 getDiff();
254 // Read light level
255 iLight = analogRead(0);
256 // Setup message
257 sprintf(message,"%d %d %d\n",heading,(int)pitch,iLight);
258
259}
Note: See TracBrowser for help on using the repository browser.