Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 6:3d0735a28b98, committed 2017-03-08
- Comitter:
- EmileArseneault
- Date:
- Wed Mar 08 02:59:25 2017 +0000
- Parent:
- 5:25101883c27a
- Commit message:
- Merge dans un ?tat l?thargique
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Mar 07 18:33:03 2017 +0000
+++ b/main.cpp Wed Mar 08 02:59:25 2017 +0000
@@ -11,13 +11,20 @@
DigitalOut myled(LED1);
DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
InterruptIn rX(p27);
DigitalOut tX(p28);
Serial pc(USBTX, USBRX);
+Mail<char [83], 4> textToPrint;
Queue<int, 1500> envoi;
+Queue<int, 1500> recoit;
+Queue<int, 200> rise_n_fall_queue;
Thread* listeningThread;
Thread* Push_data;
+osThreadId mainThread;
+Semaphore ecriture(0);
void printBin(uint16_t data)
@@ -274,12 +281,15 @@
// Emile
// thread.signal_set(0x1);
// Synchronize with wire
+ pc.printf("SendBits - len %d\r\n", len);
+ pc.printf("Waiting\r\n");
+ //Thread::signal_wait(1);
+ ecriture.wait();
for (int i = 0; i < len; i++)
{
envoi.put((int *) bits[i]);
}
Push_data->signal_set(0x1);
-
//ReceiveBits(bits, len);
}
@@ -293,8 +303,8 @@
{
tmp[i + 2 * 8] = data[i];
}
- AddStartEnd(tmp + (len + 3 - 1) * 8);
- SendBits(tmp, len + 3 * 8);
+ AddStartEnd(tmp + len + (2 * 8));
+ SendBits(tmp, len + (3 * 8));
}
void SendManchester(char* data, int len)
@@ -338,14 +348,26 @@
}
}
-void ReceiveText(char* data)
+void ReceiveText()
{
- pc.printf("Received: %s\r\n", data);
+ while (1)
+ {
+ osEvent evt = textToPrint.get();
+ if (evt.status == osEventMail){
+ led3 = 1;
+ char * message = (char *) evt.value.p;
+ pc.printf("Received: %s\r\n", message);
+ //ReceiveBits((bool *) message->bits, message->len);
+ textToPrint.free((char (*)[83]) message);
+ }
+ }
+
}
void ReceiveFormated(char* data, int len)
{
pc.printf("ReceiveFormated - len %d\r\n", len);
+ //pc.printf("%c%c\r\n",data[2], data[3]);
char tmp[len - 2];
int id, frame, frames, predicted_len;
AnalyseHeading(data, &id, &frame, &frames, &predicted_len);
@@ -371,8 +393,17 @@
if (tmp[len - 4] == data[len - 2] && tmp[len - 3] == data[len - 1])
{
tmp[len - 4] = '\0';
- led2= 1;
- ReceiveText(tmp);
+ char* toPrint = (char *)textToPrint.alloc();
+ int i = 0;
+ for (; i < len - 3; i++)
+ {
+ toPrint[i] = tmp[i];
+ }
+ toPrint[i] = '\r';
+ toPrint[i+1] = '\n';
+ toPrint[i + 2] = '\0';
+
+ textToPrint.put((char (*)[83]) toPrint);
}
else
{
@@ -395,6 +426,7 @@
void ReceiveBits(bool* data, int len)
{
+ /*
if (compareBoolArray(data, PREAMBULEBOOL))
{
data += 8;
@@ -404,7 +436,7 @@
{
pc.printf("DEBUG -- Received payload with wrong Preambule.");PrintBoolArray(data , 8);pc.printf("\r\n");
return;
- }
+ }*/
// Ensure Start and end are present
if (compareBoolArray(data, STARTENDBOOL) || compareBoolArray(data + (len - 8), STARTENDBOOL))
@@ -447,7 +479,7 @@
{
LPC_SC->PCLKSEL1 |=1<<12; //pclk = cclk timer2
LPC_SC->PCONP |=1<<22; //timer2 power on
- LPC_TIM2->MR0 = 9600000; //100 msec
+ LPC_TIM2->MR0 = 960000; //10 msec
LPC_TIM2->MCR = 3; //interrupt and reset control
//3 = Interrupt & reset timer2 on match
//1 = Interrupt only, no reset of timer0
@@ -458,25 +490,37 @@
void SendData()
{
+ bool releaseSent = false;
bool fin = false;
int valeur = 0;
while(true)
{
- Thread::signal_wait(1);
+ //osSignalSet(mainThread, 1);
+ if (!releaseSent)
+ {
+ pc.printf("Release sent\r\n");
+ ecriture.release();
+ releaseSent = true;
+ }
+ //pc.printf("SendData Waiting\r\n");
+
+ //Thread::signal_wait(1);
while(!fin)
{
- osEvent evt = envoi.get();
+ osEvent evt = envoi.get(1000);
if (evt.status == osEventMessage)
{
valeur = (int)evt.value.p;
Thread::signal_wait(2);
tX = valeur;
+ releaseSent = false;
}
else
{
fin = true;
+ tX = 1;
}
}
@@ -484,17 +528,141 @@
}
}
+void StartEnd(int intervale)
+{
+ bool End = false;
+ bool Start = false;
+ bool data[1500] = {0};
+ int i = 0;
+ bool ones[8] = {1, 1, 1, 1, 1, 1, 1, 1};
+
+ while(!End)
+ {
+ wait_us(intervale);
+ data[i] = rX.read();
+ led2 = data[i];
+ // Regarde si 3 valeurs consécutives sont 0
+ if (i >= 2)
+ {
+ if ((data[i-2] == data[i-1]) && (data[i] == data[i-1]) && (data[i] == 0))
+ {
+ printf("Ligne coupee\r\n");
+ return;
+ }
+ }
+
+ // Comparer pour les séquence de bits de fin et start
+ if (i >= 7)
+ {
+ if (compareBoolArray(ones, &(data[i-7])))
+ {
+ printf("Court_circuit\r\n");
+ return;
+ }
+ if (compareBoolArray(STARTENDBOOL, &(data[i-7])))
+ {
+ if (!Start)
+ {
+ Start = true;
+ }
+ else
+ {
+ ReceiveBits(data, i+1);
+ End = true;
+ }
+ }
+ }
+ i++;
+ }
+}
+
+void Preambule_Check(void const *args)
+{
+ int position = 1;
+ int valeur = 0;
+ int preambule[8] = {0, 1, 0, 1, 0, 1, 0, 1};
+ int timeBetween[6] = {0};
+ int sum;
+ int intervale = 0;
+ Timer t;
+
+ while(true)
+ {
+ osEvent evt = rise_n_fall_queue.get();
+ if (evt.status == osEventMessage)
+ {
+ valeur = (int)evt.value.p;
+ if (valeur == preambule[position])
+ {
+ if (position > 1)
+ {
+ t.stop();
+ timeBetween[position - 2] = t.read_us();
+ t.reset();
+ t.start();
+ }
+ else
+ {
+ t.stop();
+ t.reset();
+ t.start();
+ }
+
+ if (position < 7)
+ {
+ position++;
+ }
+ else
+ {
+ // Calculer la moyenne (pt oter les valeurs extrèmes s'il y en a)
+ sum = 0;
+ for (int i =0; i < 6; i++)
+ {
+ sum += timeBetween[i];
+ }
+ intervale = sum/6;
+ StartEnd(intervale);
+ wait(0.5);
+ position = 1;
+ led4 = !led4;
+ }
+ }
+ else
+ {
+ position = 1;
+ }
+ }
+ }
+}
+
+void Call_Preambule_Rise()
+{
+ rise_n_fall_queue.put((int *)1, 0);
+}
+
+void Call_Preambule_Fall()
+{
+ rise_n_fall_queue.put((int *)0, 0);
+}
+
void TestManchester();
void TestUtility();
void mainRaph()
{
//TestUtility();
// TestManchester();
- SendText("A more complex sentence to prove our algorithm is robust!", 57);
- wait(1);
- SendText("OK", 2);
- wait(1);
- SendText("A more complex sentence to prove our algorithm is robust!", 57);
+ //SendText("A more complex sentence to prove our algorithm is robust!", 57);
+ //wait(10);
+ tX = 0;
+ wait_us(100);
+ tX= 1;
+ wait_us(100);
+ tX = 0;
+ //SendText("OK", 2);
+ //wait(4);
+ //SendText("OK", 2);
+ //wait(1);
+ //SendText("A more complex sentence to prove our algorithm is robust!", 57);
}
void tick()
@@ -505,15 +673,23 @@
Ticker ticker;
ticker.attach(&tick, 0.5);
timer2_init();
+ mainThread = osThreadGetId();
listeningThread = new Thread();
listeningThread->start(Listening);
+ Thread get_data_thread(Preambule_Check);
Thread push_thread(SendData);
+ Thread printing(ReceiveText);
Push_data = &push_thread;
+ rX.rise(Call_Preambule_Rise);
+ rX.fall(Call_Preambule_Fall);
+
mainRaph();
- while (1){}
+ led3 = 1;
+ while (1){
+ }
}
//--------------------------------TEST---------------------------------------------------//